0

我想我会重写这个问题(相同的迭代)。最初是如何围绕 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。我们的数据库背后的想法就像更衣室更衣室存储。每个运动员(或客户)按照他们希望的方式组织他们自己的储物柜,我们会为他们处理存储。我们不在乎储物柜里有什么,只要他们能用它做他们需要的事情。

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

4

1 回答 1

1

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

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

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

于 2009-06-30T15:52:40.647 回答