Facade和Repository模式:它们应该是Singleton?

时间:2011-12-01 15:36:50

标签: design-patterns singleton repository crud facade

我设计了一些存储库来处理CRUD操作。 我将把所有这些回购放在一个门面。

这个Facade应该是单身人士吗?

一个例子:

FacadeLibrary [Singleton?]

- BookRepository | ClientRepository | RentalRepository

或者存储库应该是Singleton?

或者两者都没有?

2 个答案:

答案 0 :(得分:1)

没有!!!!避免使用单身人士。 Singleton就像是系统中的全局变量。通常情况下,如果系统阻止您多次创建某些资源,则应使用单例。例如,在Direct3D中,您无法创建两次Direct3D环境,因此可以使用单例,但在任何其他情况下都可以避免使用它。

答案 1 :(得分:0)

我所做的是为类型本身添加一个静态属性以获取该类型的存储库。该方法使用IoC来解决它:

public class Book
{
    public static IBookRepository Repository { get { return IoC.Resolve<IBookRepository>(); } }
    ...
}

然后我可以拨打电话,如

Book myBook = Book.Repository.Find(id);

我喜欢这个,因为它将Book-y-ness的东西保持在一起,并且允许我通过配置IoC来交换存储库的不同实现以进行测试。