代码之家  ›  专栏  ›  技术社区  ›  Tom Bushell

OO数据模型-我可以忽略对象关系映射器约束吗?

  •  2
  • Tom Bushell  · 技术社区  · 15 年前

    我刚刚开始为一个新的C#项目建模数据,它必须是持久的。

    看起来最自然的OO模型将有很多嵌套的.Net泛型。对象列表,这些对象还将包含嵌套至少三层的其他泛型类型的列表,以此类推。

    理想情况下,我只想以面向对象的方式设计数据模型,并让对象-关系映射工具处理持久性-对我来说,面向对象设计比关系设计容易得多。

    我的印象是,我可能不得不将我的OO数据模型限制在我知道ORM可以处理的结构上,这似乎是一个很大的限制,特别是当我还没有决定使用ORM时。

    我想继续推进项目设计,不想现在就陷入研究ORM的泥潭。

    这是一个好方法,还是我让自己陷入了一个充满伤害的世界?是否最好先处理已知的ORM约束,然后围绕这些约束“哑”对象模型?

    编辑: Stefan Steinegger主动列出了NHibernate对OO代码施加的大部分限制。其他人能为其他风暴提供类似的列表吗?尤其是亚音速的?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Stefan Steinegger    15 年前

    我对NHibernate有一些经验。这是迄今为止我看到的最灵活、最非侵入性的ORM(尽管我没有看到很多)。所以我可以谈谈NHibernate,即使你不使用它,它也会给你一些你应该期待的印象。

    我们几乎可以自由地设计类模型。限制更多地体现在实施细节中:

    • 您需要一个默认构造函数(可以是私有的)
    • 集合的类型必须为 IList<T> , ICollection<T> , IDictionary<K, V> 、数组、其他一些接口或其非泛型对应接口。
    • 一切都需要是虚拟的,以使延迟加载成为可能。(可选,但强烈推荐)
    • 每个实体(非值类型)都需要一个数据库主键属性和一个用于乐观锁定的数据库版本属性(可选,但强烈建议)

    我不记得我们在NHibernate中关于类模型的任何其他限制。

        2
  •  1
  •   Thomas Weller    15 年前

    我对其他ORM不太了解,但你肯定应该和NHibernate一起去。它的用途与此完全相同:首先以DDD方式设计您的域,稍后关注数据库和持久性相关的内容。 在引入NH时,可能需要进行一些(较小的)重构,但根据我的经验,如果您有一个正确设计的域模型,这些重构并不是什么大问题,而且肯定不会带来痛苦。

        3
  •  1
  •   Otávio Décio    15 年前

    此外,对象模型中唯一需要“简化”的类是那些需要持久化的类。所有其他的都可以像你希望的那样复杂和复杂。