我想创建一个产品目录,允许目录中每种产品类型的复杂细节。产品类型具有与之关联的截然不同的数据;有些只有通用数据,有些有一些额外的数据字段,有些有许多特定于该产品类型的字段。我需要轻松地将新产品类型添加到系统中并尊重它们的配置,并且我喜欢关于如何为这些产品设计数据模型以及如何处理持久性和检索的提示。
有些产品将非常通用,我计划使用通用 UI 来编辑这些产品。具有与之关联的可扩展配置的产品将获得为其编辑创建的新视图(和控制器)。我希望所有定制产品都定义自己的模型,但共享一个公共基类。基类将表示没有自定义字段的通用产品。
需要处理的示例产品:
- 通用产品
- 描述
- 灯泡
- 描述
- 类型(包括荧光灯、白炽灯、卤素灯、led 灯)
- 瓦数
- 样式(洪水、斑点等的枚举)
- 冰箱
- 描述
- 制作
- 模型
- 样式(在域模型中有一个枚举)
- 滤水器信息
- 零件号
- 描述
我希望使用 MEF 来发现系统中可用的产品类型。我计划创建包含产品类型模型、视图和控制器的程序集,将这些程序集放入 bin 中,并让应用程序发现新的产品类型,并在导航中显示它们。
使用 SQL Server 2008,存储这些不同类型的产品的最佳方式是什么,允许添加新类型而无需增加数据库架构?
从数据库中检索数据时,将这些多态实体转换为正确的域模型的最佳方法是什么?
更新和说明
为了避免内部平台效应,如果每种产品类型都有一个数据库表(用于存储该类型的产品),那么我仍然需要一种方法来检索跨产品类型的所有产品。那将如何实现?
我与 Nikhilk 就他的 SharePoint 参考进行了更详细的交谈。具体来说,他在谈论这个:http: //msdn.microsoft.com/en-us/library/ms998711.aspx。它实际上看起来很有吸引力。无需解析 XML;并且可以进行一些索引,以允许对数据进行简单快速的查询。例如,我可以通过知道该行中的第一个 int 列是该行代表一个灯泡时的瓦数来说“找到所有 75 瓦的灯泡”。应用层中的某些东西(NHibernate?)将定义从产品类型到用户数据模式的映射。
否决了具有属性表的模式,因为这可能导致每个产品有很多行。这可能会导致索引困难,而且所有查询基本上都必须对数据进行透视。