我以为我会重写这个问题(同样的迭代)。最初的原因是如何围绕EAV / CR数据库包装存储库模式。我正在尝试不同的方法。
问题:您如何以“工厂”设计模式方式编写数据存储库?我有固定数量的实体,但这些实体的属性是相当客户特定的。他们宣传所有类似的产品,但每个客户根据他们的商业模式向他们附加不同的信息。例如,有些人关心废弃物的百分比,而其他人则关心销售的磅数。每次我们找到另一个客户时,我们都会添加一堆字段,删除一堆字段,然后花费数小时将每个解决方案保持最新状态。
我认为我们可以将存储库类放在工厂模式中,这样当我知道客户类型时,我就会知道它们将使用哪些字段。实际的?更好的方法? Web表单使用用户控件,这些用户控件经过修改以反映布局中的字段。我们目前将布局中找到的字段“加入”到产品表中的字段,然后是CRUD常用字段。
上一个问题内容:
我们有一个EAV / CR数据模型,允许同一个实体使用不同的类。这跟踪客户拥有完全不同产品的产品。客户可以定义产品的“类”,用字段加载,然后用数据填充它。例如,
Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent
有关如何围绕此包装存储库模式的任何建议吗?
我们有一个三表EAV:一个Product表,一个值表和一个列出字段名称和数据类型的元表(我们列出了数据类型,因为我们有其他表,如Product.Price和Product.Price元数据,与Product.Photo等其他人一起。)客户可以跟踪各种价格,例如竞争对手的差价折扣以及即时计算。
我们目前使用Linq to SQL with C#。
编辑:
我喜欢下面的Linq“动态查询”。我们的数据库背后的想法就像一个更衣室储物柜存储。每个运动员(或客户)都按照自己的方式组织自己的储物柜,我们会为他们存储。我们不关心储物柜里的东西,只要他们可以用它做他们需要的东西。
非常有趣......传递给存储库的对象可能是动态的吗?这几乎是有道理的,几乎就像工厂模式。客户是否可以将自己的类定义放在文本文件中,然后我们继承它们并将它们存储在数据库中?
答案 0 :(得分:1)
据我所知,存储库模式从应用程序中抽象出数据库的物理实现。您是否计划将数据存储在不同的数据存储中?如果您对Linq to SQL感到满意,那么我建议您可能不需要以这种方式进行抽象,因为它看起来非常复杂。也就是说,我可以看到提供一个EAV风格的存储库,即一个查询需要传递表,字段类型和字段名称以及所需的任何条件,可能会为您提供所需的抽象。
我不确定这是否仍然可以用最严格的条件限定为存储库模式,因为您并没有真正从应用程序中抽象存储。这将是利益和努力之间的折腾,我无法帮助。
您可能需要查看Codeplex上动态数据预览中的Dynamic Linq扩展。