【问题标题】:How would you code a repository pattern like a "factory" design pattern?您将如何编写类似于“工厂”设计模式的存储库模式?
【发布时间】:2009-06-30 15:33:09
【问题描述】:

我想我会重写这个问题(相同的迭代)。最初是如何围绕 EAV/CR 数据库包装存储库模式。我正在尝试不同的方法。

问题:您如何以“工厂”设计模式的方式编写数据存储库? 我有固定数量的实体,但这些实体的属性是相当客户特定的。他们宣传的产品都相似,但每个客户根据他们的商业模式附加不同的信息。例如,有些人关心浪费的百分比,而另一些人关心出售的磅数。每次我们找到另一个客户时,我们都会添加一堆字段,删除一堆字段,然后花费数小时将每个解决方案与最新的通用版本保持同步。

我认为我们可以将存储库类放在工厂模式中,这样当我知道客户类型时,我就知道他们将使用哪些字段。实际的?更好的方法? Web 表单使用经过修改以反映布局上的字段的用户控件。我们目前将布局中的字段“连接”到产品表中的字段,然后是 CRUD 通用字段。

以前的问题内容

我们有一个 EAV/CR 数据模型,它允许同一实体使用不同的类。这会跟踪客户拥有截然不同的产品的产品。客户可以定义产品的“类”,用字段加载它,然后用数据填充它。例如,

Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent

有关如何围绕此包装存储库模式的任何建议?

我们有一个三表 EAV:一个产品表、一个值表和一个列出字段名称和数据类型的元表(我们列出数据类型是因为我们还有其他表,例如 Product.Price 和 Product.Price 元数据)与 Product.Photo 等其他产品。)客户跟踪各种价格,例如竞争对手的折扣差异以及即时计算。

我们目前在 C# 中使用 Linq to SQL。

编辑:

我喜欢下面的“动态查询”Linq。我们的数据库背后的想法就像更衣室的储物柜。每个运动员(或客户)按照他们希望的方式组织自己的储物柜,我们会为他们处理存放。我们不在乎储物柜里有什么,只要他们能用它做他们需要的事情。

非常有趣...传递到存储库的对象可能是动态的?这几乎是有道理的,就像工厂模式一样。客户是否可以将自己的类定义放在一个文本文件中,然后我们继承它们并将它们存储在数据库中?

【问题讨论】:

    标签: c# linq-to-sql repository-pattern entity-attribute-value factory-pattern


    【解决方案1】:

    据我了解,存储库模式从应用程序中抽象出数据库的物理实现。您是否打算将数据存储在不同的数据存储中?如果您对 Linq to SQL 感到满意,那么我建议您也许不需要以这种方式进行抽象,因为它看起来非常复杂。也就是说,我可以看到提供 EAV 样式的存储库,即需要传递表、字段类型和字段名称以及所需的任何条件的查询,可能会为您提供所需的抽象。

    我不确定这是否仍然符合严格意义上的存储库模式,因为您并没有真正从应用程序中抽象出存储。这将是利益和努力之间的折腾,我无能为力。

    您可能想查看在 Codeplex 上的动态数据预览中找到的 Dynamic Linq 扩展。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2015-12-08
      相关资源
      最近更新 更多