技术开发 频道

扩展NHibernate为企业级的解决方案


从NHibernate 1.0x到1.2
 

    如果你正从NHibernate 1.0x更换到1.2,你肯定会发现一些改变。API改变的官方资料在NHibernate 1.2 Migration Guide中有介绍。下面列举了几条应该特别注意的:

    • 1.2版本的所有类和集合都默认惰性载入。所以,如果你没有修改这个惰性属性而运行应用程序的话,你将会受到很多"method x should be virtual."可以通过为每一个你不想默认载入的类和集合设置lazy="false"来解决这个问题。

    • 因为泛型的使用在这里被支持。所以你不再需要Ayende的NHibernate.Generics工具了。在我的devlicio.us的博客里有一个详细的例子refactoring away from Ayende's NHibernate.Generics。

     在完成所有的转换到NHibernate 1.2的工作之后,最好为每一个父类别/子类别关系测试下面的事项:

    • 通过父类别升级一个子类别,还工作吗?

    • 创建一个新的子类别到父类别中去,数据库支持吗?

    • 从父类别删除已存在的子类别,或者直接删除子类别,仍然正常工作吗? 

    • 其他的CRUD, cascade scenarios被测试了吗?

NHibernate/ASP.NET Best Practices总结

    下面是在举例的应用程序里所体现出来的最优方法的快速总结:

   • Business对象应该通过接口和数据存取对象通信。例如,总是依靠abstractions。

   • 具体的数据存取对象应该使用"client",这个business逻辑层定义的接口。

   • 通过一个abstract factory展示数据存取对象来帮助测试和降低耦合。

   • 使NHibernate进程管理细节远离表示层和business逻辑层。

   • 使用单元测试类来关闭依靠数据库连接的单元测试。

   • 通过在web.config里设置hibernate.default_schema来给NHibernate一个好的性能。

    我希望通过最优方法平衡ASP.NET, NHibernate和单元测试,这篇文章有帮助。现在通过这种方法我在自己的项目上已经获得了巨大的成功,同样我也希望能够听听你们的经验。如果你有任何问题和意见,请告诉我。如果你想知道任何时候我在忙什么,你可以在http://devlicio.us/blogs/billy_mccafferty上面找到我最新的留言。
0
相关文章