hushouqi

Entity Data Model的扩展性问题及解决思路

    .net推出的Entity Framework以Entity Data Model(简称EDM)为核心,可以使开发人员只面对实体及实体关系来分析相关业务,而非传统的面向关系型数据库的方式。领域驱动给软件设计及开发带来极大的好处,是一种更科学的方法。

     领域的核心数据是实体,而非传统的数据集。比起传统的数据集,实体更能清晰的表现业务对象。例如一个电子商务网站,包括User(会员),Order(订单),OrderItem(订单项)等等。用实体会以对象属性的形式表达,例如User,包括User.Name,User.Age,User.Tel等属性。对应到以关系型数据库层,即User表,字段有Name,Age,Tel等等。那么使用Entity有什么局限性呢?

    实体以对象属性的体现,对于属性明确的需求可以满足,但对于需要配置属性这种硬编码的形式就无法体现了。例如用户想自己增加一个属性Tel2,而Entity在程序设计时已经固化了其属性,无法动态增加属性。那么这个问题怎么解决呢?

    使用传统的方式。如果有这种需求,就抛弃以实体为核心,而采用传统的数据集的形式。但这种方式是非科学的,我们还是要以领域驱动的方式去设计一个软件系统。那么首先我们要清楚一点领域驱动思想本质是什么,不是使用Entity作为业务的数据模型就是领域驱动。而是我们在设计的时候要以Entity为核心,在设计一个系统的时候要分析对象、属性以及对象之间的关系,而数据库只是一个持久化介质,Entity是业务层领域。实体以及实体之间的关系分析好,至于数据库只是一个技术手段。有了这个认识,从我个人认为实体不一定非要以固定化的属性的形式体现。

   为了要解决可扩展的问题,可以把Entity设计成一个Key,Value的形式,增加一个schema对象来体现Entity的结构。即一个Entity有了一个Entity.ObjectType对象,ObjectType包含了属性集合,开发人员在使用Entity的时候以Entity["属性名"]的形式使用。这样我们扩展性就灵活多了。

   在这里只提供一个思路,没有做详细的设计。大家看看有什么更好的思路进行探讨。

posted on 2010-07-30 16:07  freemao  阅读(1825)  评论(5编辑  收藏  举报

导航