使用可以使用其他属性扩展的实体设计应用程序的最佳方法是什么?

时间:2009-04-28 13:59:05

标签: c# .net design-patterns architecture

寻找关于设计应用程序的最佳方式的建议,链接,设计模式等,其中实体和相关屏幕可以通过元数据/无需重新编译进行额外的属性/相关查找,最好是最终用户。我在想与Dynamics CRM 4.0如何使用扩展表/动态属性非常相似的东西。该应用程序将使用C#.NET 3.5

构建

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过编写自己的PropertyDescriptor实现,以及实现ICustomTypeDescriptor(向实例添加属性)或使用{{{{}}来实现此类操作。 1}}(可以为整个类型添加属性)。

这是实现可扩展/动态属性包实现的常用方法,并且TypeDescriptionProvider之类的内容用于揭示虚拟属性(在DataTable等上)。

然而;这是很多工作。我已经完成了几次,但这并不好玩。我想知道你是否应该只使用一个罐装解决方案?虽然我通常会避免使用DataRowView,但这可能是真正有用的场合之一......只需添加列,然后完成工作。

答案 1 :(得分:0)

我参与了两个项目,一个是电信内容管理系统门户,另一个是身份管理系统。

两者都是产品的定制,并且都支持您所描述的实体扩展。并且都将数据存储为XML字符串! (其中1个在数据库中,另一个在SVN中)。

对于搜索,其中一个使用Lucene,另一个使用名称/值对的表进行搜索,优化用户定义的一些更常用的“字段”,与XML存储在同一行中串..

实体架构都由XML配置文件驱动。

作为一种产品,我几乎认为它们是好主意,允许实体定制以适应不同的场景。但是当我对它们进行定制时,它只是简单而刺激。

我认为最好从最终用户客户的角度来看待这一点。

  1. 鉴于能够按照自己的意愿扩展实体,谁可以扩展实体?一个程序员?商业用户?
  2. 鉴于您已将其缩小到谁将进行“定制”,您如何才能使其成为更愉快的体验?从使用中推动设计。
  3. 另外,考虑一下: 你真的需要一个RDBMS,或像CouchDB这样面向文档的存储吗? IMO面向文档的存储似乎是可扩展实体的理想选择。但我没有与他们合作,也没有关于他们是否有用的必要数据。

    价值2美分。希望它有所帮助。