【问题标题】:Facade and Repository pattern: they should be Singleton?Facade 和 Repository 模式:它们应该是 Singleton 吗?
【发布时间】:2012-01-10 18:04:05
【问题描述】:

我必须设计一些存储库来处理 CRUD 操作。 我会将所有这些 repos 放在一个 Facade 中。

这个 Facade 应该是 Singleton 吗?

一个例子:

FacadeLibrary [单例?]

- 书库 |客户资料库 |出租仓库

或者 Repository 应该是 Singleton?

或者两者都没有?

【问题讨论】:

标签: design-patterns singleton repository crud facade


【解决方案1】:

不!!!!避免使用单例。 Singleton 类似于系统上的全局变量。通常,如果系统阻止您多次创建某个资源,您应该使用单例。例如,在 Direct3D 中,您不能两次创建 Direct3D 环境,因此您可以使用单例,但在任何其他情况下都避免使用它。

【讨论】:

  • 我真的不喜欢 MVC 设计模式,因为它不是真正的 OO。而且,哪个框架使用哪个模式并不重要。我更喜欢让我的数据与逻辑相关。
  • 我同意亚历克斯。当应用程序是胖客户端并且事情更简单时,您可以摆脱基于类或单例数据访问。那些时光已逝。用这种方法很容易把自己逼到角落里。
【解决方案2】:

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

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

然后我就可以打电话了

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

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

【讨论】:

  • 但这并不是真正的面向对象,您可以使用命名空间来对您的函数进行分组。实际上一本书是一个对象,所以你应该以某种方式表示这本书的状态。
猜你喜欢
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 2021-01-05
  • 2013-06-24
  • 1970-01-01
  • 2014-12-12
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多