1

我正在和几个人一起开发一些软件,从完成的类图中有一个Database类,例如Order该类有两个构造函数,一个没有参数,一个除了id. 它也有一个save()方法,所以我假设如果你id在构造函数中提供一个类功能,那么类将使用该类并填充对象属性,并且在构造函数或 setter 方法中Database也没有地方注入这个类Database所以我认为他们想使用Singleton.

在我对他们说之前,我想知道我的论点是否有效,所以他们在这里:

  • 这样做违反了 SOLID 单一责任原则 (SRP)
  • Database它在我们所有需要该类的类之间引入了紧密耦合
  • 它隐藏了我们的对象依赖
  • 它使单元测试变得更加困难
  • 引入不必要的全局状态

它们会是有效的论点吗?这样做还有更多的缺陷吗?如果我的观点是有效的,是否值得对他们说?

谢谢。

4

1 回答 1

1

这是一种众所周知的模式,称为活​​动记录。它通常用于几个大型框架,例如 Ruby on Rails。它确实有你提到的缺点,我认为你应该强调潜在的问题,但并非没有任何替代方案可供讨论。

一个常见的替代方法是使用服务外观来保存对象——一组 DAO。使用这种模式,您可以更明确地访问数据库并且不太方便,但 IMO 会减少主应用程序中的数据库耦合。正如您所提到的,从 SRP 的角度来看,这更好,这使得测试变得更加容易。

于 2013-03-16T11:23:27.150 回答