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。我们DB背后的想法就像更衣室的储物柜。每个运动员(或客户)都以他们希望的方式组织自己的储物柜,并且我们会为他们储存。只要他们可以做他们需要的东西,我们就不在乎储物柜里的东西。

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

回答

1

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

我不确定这是否仍然符合最严格的条款作为存储库模式,因为您并不真正从应用程序中抽象存储。这将成为利益和努力之间的折腾,在那里我无法提供帮助。

您可能想看看Codeplex上动态数据预览中发现的Dynamic Linq扩展。