Factory类是否也适用于从数据库中提取数据的功能

Jak*_*134 5 c# design-patterns

我挣扎的软件开发的一个主要方面是将正确的责任委托给我的程序中的类.在我的第一个初级角色工作,我也接触到许多不同的设计模式和想法,有时信息可能是压倒性的.

显然,当我们构建软件时,我们倾向于声明一个类应该只对一件事和一件事负责.它应该做得很好,仅此而已.因此,在Factory模式的情况下,Factory类应负责构建产品并公开允许导向器从工厂中提取产品的界面.

然而,工厂类显然需要从某个地方接收数据来构建产品,没有输入数据我们没有输出产品.因此,我想知道是否包含工厂查询数据库的功能是否合适?我的理由是,如果工厂的任务是构建特定产品,那么它还应负责检索构建该产品所需的数据.但我不能100%确定这是否正确.

或者,是否应该有一个存储库类,谁负责从数据库中检索有问题的数据,然后可以将其传递给工厂以组装成所需的产品?在这种情况下,使用存储库类似乎有点过分,因为我们有一个类,它将包含大量不同的数据,然后必须将它们运送到工厂类.

如果我们还要记住鲍勃叔叔的教导,即声明函数和方法绝对不应超过三个参数,那么我们将通过将大量数据传递给工厂来打破这一规则.如果我们在传递给工厂之前首先将数据组装成一个包含类,那么我们基本上是在存储库类中完成工厂的工作.

在这方面我会非常感激一些指导,因为我脑子里的线条很模糊,我不知道该怎么办.

Max*_*rov 4

您不应该使用工厂模式来构建从数据库中提取的对象。为此目的有存储库模式数据映射器模式。这些模式必须封装数据存储的所有工作逻辑。这些模式必须承担以下责任:

  • 存储库必须为业务逻辑提供一个接口以处理数据存储
  • 数据映射器必须将数据从数据库转换为具体对象

对象之间的合作算法可以如下所示:

  • 业务逻辑使用存储库来读取/保留对象。
  • 存储库使用数据映射器将对象转换为 INSERT 或 UPDATE 查询,并将数据从数据存储转换为对象

另外,您可以在Microsoft 网站上阅读有关 C# 存储库模式的更多详细信息,并且可以查看存储库模式的 C# 示例