C# nhibernate 多层架构
Posted
技术标签:
【中文标题】C# nhibernate 多层架构【英文标题】:C# nhibernate mulitier architecture 【发布时间】:2012-03-09 10:59:00 【问题描述】:我需要一些建议:我想在表示层和业务逻辑层中解耦 nHibernate 依赖关系,以便只有数据访问逻辑层引用 nHibernate DLL。
我只看到使用 SessionHelper/SessionManager 对象的解决方案,并且所有解决方案都是在顶层使用的。我相信必须存在更好的解决方案。
我应该遵循什么设计模式? 我可以在存储库模式中封装会话(管理器、助手等)并轻松更改 ORM 而无需在业务逻辑层强制更改吗?
代码示例将不胜感激。提前致谢。
【问题讨论】:
"轻松更改 ORM?"您只能在您可能想要使用的所有 ORMS 之间使用最小公分母。你会遇到性能问题,因为你不能使用很多特性来增强它,并且你会有泄漏的抽象。 这个问题出现了很多,一般的答案是:不要这样做。在极少数情况下,能够换出 ORM 是值得进行重大权衡的。如果不完全消除它,就很难“隐藏” ORM。 嗨@MichaelMaddox:理论上我不想切换ORM,因为客户不支付那种投资。我的目标是能够实现基类/泛型类(适用于我的所有项目),并允许我隐藏我不想被看到的内容(即对 ORM 的依赖项)。我想封装nhibernate session、EF objectcontext等,你会如何实现这样一个类? 【参考方案1】:Here is a nice presentation about nHibernate Worst Practices
你问的是第一个最坏的做法,所以一定要检查一下
You should check out the presenters nice blog which reviews these types of "architectures"
“我应该遵循什么设计模式” 请务必始终使用常识设计模式和 YAGNI :)
【讨论】:
以上是关于C# nhibernate 多层架构的主要内容,如果未能解决你的问题,请参考以下文章
来自表 Y 的关联引用了一个未映射的类:Y - C# NHibernate