我通过WCF服务公开了一些CRUD方法,因为一些数据对象通过NHibernate持久保存在数据库中.将NHibernate类用作数据契约是一种好方法,还是更好地将它们包装起来或用其他一些数据契约替换它们?你的方法是什么?
我们的团队经历了几个月的争论这个设计点,所以我有很多链接可以分享;-)
简短回答: 您应该"从"NHibernate类转换为域模型.
答案 很长:我认为答案就是原则问题.如果你曾经想成为可互操作的,你应该不会为您的DTO(使用数据集我爱这个Hanselman的职位).我不是说这从来不是一个好主意; 显然,人们已经取得了成功.只要知道你正在偷工减料,这是一个冒险的主张.
如果您可以完全控制将数据推入的类,则可以构建一个不错的域模型,并将NHibernate数据映射到这些类中.你很可能会遇到严重的问题,因为IList <>(
您需要测量构建一些包装类所涉及的工作量,以及它们之间的转换,但是您可以完全灵活地使用您的域模型.然后,您就可以像NHibernate地图和对象一样(就像我们所做的那样)做代码生成.然后,您的数据合同将作为数据的抽象,就像它们应该的那样.
PS您可能希望了解ADO.NET数据服务,这是一种公开数据的RESTful方式,此时,它似乎是公开数据的最具互操作性的选择.