我必须设计一些存储库来处理 CRUD 操作。我会将所有这些 repos 放在一个 Facade 中。
这个 Facade 应该是 Singleton 吗?
一个例子:
FacadeLibrary [单例?]
- 书库| 客户资料库 | 租赁存储库
或者,存储库应该是单例?
或者两者都不是?
我必须设计一些存储库来处理 CRUD 操作。我会将所有这些 repos 放在一个 Facade 中。
这个 Facade 应该是 Singleton 吗?
一个例子:
FacadeLibrary [单例?]
- 书库| 客户资料库 | 租赁存储库
或者,存储库应该是单例?
或者两者都不是?
不!!!!避免使用单例。Singleton 类似于系统上的全局变量。通常,如果系统阻止您多次创建某些资源,您应该使用单例。例如,在 Direct3D 中,您不能两次创建 Direct3D 环境,因此您可以使用单例,但在任何其他情况下都避免使用它。
我所做的是向类型本身添加一个静态属性以访问该类型的存储库。该方法使用 IoC 来解决它:
public class Book
{
public static IBookRepository Repository { get { return IoC.Resolve<IBookRepository>(); } }
...
}
然后我可以拨打电话
Book myBook = Book.Repository.Find(id);
我喜欢这个,因为它将 Book-y-ness 的东西放在一起,并允许我通过配置 IoC 为存储库换入/换出不同的实现以进行测试。