Ian*_*nT8 3 testing nhibernate abstraction
是否可以采用像NHibernate或Entity Framework这样的O/RM,并以一种可以在遇到O/RM无法处理的情况时替换它的方式对其进行抽象.
使用大块服务方法创建服务似乎很诱人,其中创建会话,会话用于获取/ upsert实体,然后用于保存所有脏对象.
我会考虑存储库模式,以便服务操作向存储库请求实体,并且O/RM会话嵌入在存储库中.但是你如何保存相关实体,并且Update(T实体)方法会立即刷新更改.它似乎很简单,而且通常不令人满意.
我现在倾向于使用单个O/RM包装器类,它使用诸如"StartSession","EndSession","AbandonSession","GetById(object id)"等通用方法公开接口.
至少这将允许OR/M在测试中伪造,这是我的另一个大问题.
我想我是说我不想密切交织业务逻辑和O/RM数据访问代码,因为切换到另一个O/RM可能会导致大部分代码被替换.
人们在现实世界中做了什么?
我强烈的意见是对较小的项目进行一些测试并选择一个工具集来预先使用而不是推迟决定,直到后来通过构建一个你将能够"改变"某天的抽象包装器.根据我的经验,有一天永远不会到来,你引入的复杂性是不值得的.
我试图在过去为nHibernate构建一个通用的包装器,并且因为它而基本上只遇到了痛苦.ORM工具本身就是一个包装器和工具集.当您尝试创建包装器的包装器时,您最终需要开发(并随后维护)相对复杂的工具和机制来完成本机包装的内容.
而且,根据我自己的经验,我花费了大量时间构建的包装器最终只暴露了底层ORM工具的一小部分功能.然后我从来没有结束使用除了nHibernate之外的所有东西...所以我可以通过使用vanilla nHibernate本身节省了大量的时间和精力.
我建议仔细查看你的要求是什么,而不是花时间抽出一个瑞士军刀解决方案,做研究,首先选择一个工具集并运行它.是的,您的代码将紧密耦合到第三方工具,但代码将更简单,您将更快地到达那里,并且可能结果会更好.
希望有所帮助,
马克斯席林
归档时间: |
|
查看次数: |
771 次 |
最近记录: |