我真的很喜欢Fluent NHibernate - 它非常棒。我不必编写那些平凡的基于CRUD的SQL存储过程,这很好(不是说有什么问题)!
我已经在我们正在开发的应用程序上走了一段路。现在我坐在几十个域对象中,每个域对象都有一个存储库接口和相应的具体存储库。呼!
但是等等 - 这真的让我省了那么多时间吗?感觉好像花了更多的时间。我必须编写所有这些99%属性和1%业务逻辑的域对象,然后我必须定义映射。这需要花费与编写存储过程相同的时间。那么使用Fluent NHibernate为我提供的只是编写存储过程有什么好处?
是否有任何可靠的解决方案用于生成那些“属性包”域对象(在.NET中),所以我不必编写它们?我可以看到一些好处,只要对象提供了一些可扩展性以根据需要添加额外的业务逻辑。
答案 0 :(得分:1)
您可以使用Auto mapping生成映射。 NHibernate是绿地应用程序的理想选择,大多数人使用NHibernate编写域对象并从中生成数据库。您喜欢相反,您有一个现有的数据库,并希望生成域对象。 NHiberante中没有解决方案,但您可以使用MyGeneration,CodeSmith或类似的代码生成工具编写一个小脚本。
答案 1 :(得分:1)
可能你应该反思。在开发过程中,您可以从对象生成SQL-Schema(FluentNhibernate支持这一点)。这样,您就可以在迭代过程中开发域模型,并且可能会有很多变化。数据模型可能只是一个附录。
从我的角度来看,编写对象就像在模式管理工具中创建表和添加字段一样简单。事实上,我相信编写业务/域对象更快: - )
如果您有贫血领域模型,可能是因为您的应用程序很年轻。更多功能将来:-)
答案 2 :(得分:0)
尝试创建单个泛型存储库接口和具体实现,而不是为每个聚合根创建单独的存储库接口和具体存储库类。
如果您需要为一种特定类型的实体添加一些特定功能,那么扩展方法可以帮助您。
看看Seb Lambla的这个例子: http://serialseb.blogspot.com/2009/08/nhibernate-repository-that-oren-wont.html