gpt4 book ai didi

c# - 工厂类还包括从数据库中提取数据的功能是否合适

转载 作者:太空狗 更新时间:2023-10-29 23:19:55 26 4
gpt4 key购买 nike

在软件开发中,我遇到的一个主要问题是将正确的职责委派到我的程序中的类中。在担任我的第一个初级职位时,我也会接触到许多不同的设计模式和想法,有时信息会让人不知所措。

显然,当我们构建软件时,我们倾向于声明一个类应该负责一件事并且只负责一件事。它应该把那件事做好,仅此而已。因此,在工厂模式的情况下,工厂类应该负责构建产品并公开允许主管从工厂中提取产品的接口(interface)。

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

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

如果我们还牢记 Uncle Bob 的教导,即函数和方法的参数绝对不应超过三个,那么我们将通过向工厂传递大量数据来打破这一规则。如果我们在传递给工厂之前首先将数据组装到一个包含类中,那么我们实际上是在存储库类中完成工厂的工作。

如果能提供一些指导,我将不胜感激,因为在我的脑海中,界限非常模糊,我不确定应该如何进行。

最佳答案

您不应该使用工厂模式来构建从数据库中提取的对象。有the Repository patternthe Data Mapper pattern为了这个目标。这些模式必须封装数据存储的所有工作逻辑。这些模式必须具有以下职责:

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

对象间合作的算法可以是这样的:

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

此外,您还可以在 the site of Microsoft 上阅读有关 C# 中存储库模式的更多详细信息。你可以看到 C# example of the repository pattern

关于c# - 工厂类还包括从数据库中提取数据的功能是否合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com