如何以可靠的方式管理外部资源?
How does one manage external resources in a SOLID way?
我目前正在做一个项目,我正在将外部文件解析为抽象对象,如下所示:
public interface IMapConverter
{
IMap Convert(IMapFile file);
}
public interface IMapFile
{
void Load(string filePath);
string Json { get; }
}
我的计划是通过使用 IMapFile 实现并在该实现中创建 StreamReader 来抽象文件的加载。然后我会将其传递给 IMapConverter.Convert 方法。那会是一种正确的方法并保持可测试性吗?例如,将字符串直接传递给 IMapConverter 并在那里处理它是否是错误的?
我认为按照您的建议进行操作没有问题,即让混凝土 IMapConverter
创建混凝土 IMapFile
的实例,因为它们都在同一层上你的申请。
根据我的理解,规则是实现依赖接口的 class 可以 "know" 关于另一个接口的实现,只要它们在你的同一层上应用;一旦你在层之间工作,你想将你的依赖项,即你的具体实现,注入到它下面的层中。
我一直在研究 the onion architecture 我强烈推荐给任何想要创建松散耦合、高度可测试的应用程序的人。在该站点上讨论了这种依赖关系的概念,只要它们在同一层上就相互了解。
我目前正在做一个项目,我正在将外部文件解析为抽象对象,如下所示:
public interface IMapConverter
{
IMap Convert(IMapFile file);
}
public interface IMapFile
{
void Load(string filePath);
string Json { get; }
}
我的计划是通过使用 IMapFile 实现并在该实现中创建 StreamReader 来抽象文件的加载。然后我会将其传递给 IMapConverter.Convert 方法。那会是一种正确的方法并保持可测试性吗?例如,将字符串直接传递给 IMapConverter 并在那里处理它是否是错误的?
我认为按照您的建议进行操作没有问题,即让混凝土 IMapConverter
创建混凝土 IMapFile
的实例,因为它们都在同一层上你的申请。
根据我的理解,规则是实现依赖接口的 class 可以 "know" 关于另一个接口的实现,只要它们在你的同一层上应用;一旦你在层之间工作,你想将你的依赖项,即你的具体实现,注入到它下面的层中。
我一直在研究 the onion architecture 我强烈推荐给任何想要创建松散耦合、高度可测试的应用程序的人。在该站点上讨论了这种依赖关系的概念,只要它们在同一层上就相互了解。