In the Nullables patterns, WeatherDataImpl and FootballDataImpl are "high level infrastructure wrappers." They should delegate to a "low level infrastructure wrapper" that talks to the external system. In this case, I would have them delegate to something that abstracted the file system. Because I like stupid-obvious names, I would call it "FileSystem." It can expose the only thing you care about, which is String readFileContents(filename).