Database design OO数据模型-我可以忽略对象关系映射器约束吗?
我刚刚开始为一个新的C#项目建模数据,它必须是持久的 看起来最自然的OO模型将有很多嵌套的.Net泛型。对象列表,这些对象还将包含嵌套至少三层的其他泛型类型的列表,以此类推 理想情况下,我只想以面向对象的方式设计数据模型,并让对象-关系映射工具处理持久性-对我来说,面向对象设计比关系设计容易得多 但我对ORM的初步研究表明,它们不一定是这样工作的。我还不清楚是否可以创建任意复杂的对象模型,并期望ORM“自动”地将其持久化。(我昨天问了那个问题) 我的印象是,我可能不得不将我的OO数据模型限制在我知道ORM可以处理的结构上,这似乎是一个很大的限制,特别是当我还没有决定使用ORM时 我想继续推进项目设计,不想现在就陷入研究ORM的泥潭 我的直觉是围绕我知道我可以在C#中做的事情来设计我的对象模型,以一种看起来最自然的方式。这将帮助我更好地了解应用程序真正需要什么。我希望,如果有必要的话,我可以根据ORM限制重新考虑设计 这是一个好方法,还是我让自己陷入了一个充满伤害的世界?是否最好先处理已知的ORM约束,然后围绕这些约束“哑”对象模型Database design OO数据模型-我可以忽略对象关系映射器约束吗?,database-design,oop,orm,Database Design,Oop,Orm,我刚刚开始为一个新的C#项目建模数据,它必须是持久的 看起来最自然的OO模型将有很多嵌套的.Net泛型。对象列表,这些对象还将包含嵌套至少三层的其他泛型类型的列表,以此类推 理想情况下,我只想以面向对象的方式设计数据模型,并让对象-关系映射工具处理持久性-对我来说,面向对象设计比关系设计容易得多 但我对ORM的初步研究表明,它们不一定是这样工作的。我还不清楚是否可以创建任意复杂的对象模型,并期望ORM“自动”地将其持久化。(我昨天问了那个问题) 我的印象是,我可能不得不将我的OO数据模型限制在我
编辑:未经请求,Stefan Steinegger列出了NHibernate对OO代码施加的大部分限制。其他人能为其他ORM提供一个类似的列表吗?尤其是亚音速的吗?我对其他ORM不太了解,但你当然应该选择NHibernate。它的用途与此完全相同:首先以DDD方式设计您的域,稍后关注数据库和持久性相关的内容。
在引入NH时,可能需要进行一些(较小的)重构,但根据我的经验,如果你有一个正确设计的域模型,重构并不是什么大问题,而且肯定不会很痛苦。我认为真正的问题是,我如何开发OO应用程序,并且仍然能够持久保存其数据(对象)在关系存储中,无论是否有ORM。在达到实际体积之前,严格关注对象模型的方法应该没有问题,因为阻抗失配可能会对您造成伤害。如果不考虑系统的关系模型(无论是面向对象还是非面向对象),仍然不可能开发任何关系数据库支持的系统
此外,对象模型中唯一需要“简化”的类是那些需要持久化的类。所有其他的都可以像你希望的那样复杂和复杂 决定将模型映射到关系数据库有多容易仍然高度依赖于将使用的ORM 我对NHibernate有一些经验。这是迄今为止我看到的最灵活、最非侵入性的ORM(尽管我没有看到很多)。所以我可以谈谈NHibernate,即使你不使用它,它也会给你一些你应该期待的印象 我们几乎可以自由地设计类模型。限制更多地体现在实施细节中:
- 您需要一个默认构造函数(可以是私有的)
- 集合的类型必须为
、IList
、ICollection
、数组、一些其他接口或其非泛型对应项IDictionary
- 一切都需要是虚拟的,以使延迟加载成为可能。(可选,但强烈推荐)
- 每个实体(非值类型)都需要一个数据库主键属性和一个用于乐观锁定的数据库版本属性(可选,但强烈建议)
我记不起我们在NHibernate中关于类模型的任何其他限制。我相信这是昨天问题的链接:我对其他ORM不太了解,但关于这个问题,有一个正在进行的讨论,涉及NHibernate:@Jeff-这是一个很好的链接-我对所有答案都投了赞成票@Stefan-谢谢你走了这么远的路,提供了我可能一开始就应该要求的信息。我要编辑我的问题。。。