我创建了一个应用程序(基于Web的应用程序),它现在拥有大量的关联。简单地说,一个帐户:
同样是项目:
用户:
依此类推,加载更多关联。我希望没有什么特别不寻常的。我选择使用NHibernate为我提供了一组很好的持久化类,其中mappers定义了所有的关联。
但这种做法是对的吗?在每次向应用程序发出请求时,都会加载帐户(因为需要),然后这会从数据库中请求大量不需要的数据。延迟加载是一种选择,但我不知道我的初始方法是否更好。我在那个阶段想要的只是帐户和相关设置,那么映射是否反映了这一点?麻烦的是我想在其他方面想要帐户的所有项目,所以我需要映射器来反映所有的关联。
我担心的是,延迟加载可能只是补偿了我本身糟糕的初始架构。我很清楚,这可能只是因为我对NHibernate内部运作的了解很少。因此,我对任何有关良好实践的建议表示感谢。
答案 0 :(得分:0)
默认情况下,NHibernate默认为大多数关联和对象启用延迟加载,除非您知道自己总是需要关联数据。然后,您可以选择性地切换到急切加载,以便在进入优化阶段时更有效的项目。
答案 1 :(得分:0)
Domain Driven Design在了解这些情况时帮助了我很多。 Association in DDD
在你的情况下你应该问自己的问题:你真的需要双向关联 - 或者在某些情况下单向关联是否足够?而这个决定是架构的一部分。所以你是对的。在默认情况下选择双向关联时,延迟加载是一个很大的帮助。但它可能被认为是一个设计缺陷。
答案 2 :(得分:0)
嗯,在我看来,你的建筑看起来很健康。协会很好。
考虑其他选择:
一切看起来都很好,懒惰的初始化很好:) - 但是,有一些现实生活中使用的陷阱:
这是ORM的工作方式。他们有专业人士(更容易开发,避免大量的样板代码)和骗局(更多的开销,更少的灵活性)。