Inv*_*nda 3 c# design-patterns
在工作中,我们使用的是一种我在GoF书中没有找到的"模式"(但这可能是由于在这个问题上缺乏能力,我只是略去了模式)而且我仍然在怀疑.
比方说,如果我们有一个包含项目DataAccess的多项目解决方案,那么管理数据访问.然后通常我看到它有这样的结构:
Providers (Folder)
- DataAccessProvider.cs
Interfaces (Folder)
- IFileLoader.cs
Implementors (Folder)
- FileLoader.cs
Run Code Online (Sandbox Code Playgroud)
这里是接口FileLoader
的internal
实现,IFileLoader
提供者看起来像这样:
public static class DataAccessProvider
{
public static IFileLoader FileLoader
{
get { return new FileLoader(); }
}
}
Run Code Online (Sandbox Code Playgroud)
这是什么样的设计模式(如果有的话),除了掩盖IFileLoader
接口的具体实现之外,它的真正用途是什么?
其次,这真的是"好风格"吗?我想知道,例如,如果有很多电话会发生什么
string content = DataAccessProvider.FileLoader.LoadContentFromFile("abc.txt");
Run Code Online (Sandbox Code Playgroud)
new FileLoader()
无论何时使用它都会调用.是不是有更优雅的方式来做类似的方法?
在此示例中,它DataAccessProvider
是简单工厂方法(模式)的示例.通常,您将拥有一个名为GetFileLoader()
或CreateFileLoader()
代替Property版本的方法,但结果是相同的.
返回的目的IFileProvider
,而不是FileProvider
对依赖倒置,这样一个可以写其他类型的FileProvider
和它们注入到应用程序,而不进行返工或重新编译所有依赖于一个对象的需要IFileProvider
.这不是掩蔽.
如果关注FileLoader
创建了多少个实例,那么可以使用Singleton模式用于该对象.但是,如果它FileLoader
是一个轻量级对象,这通常不是问题,因为CLR垃圾收集器会自动为您处理.