NHibernate + Mappings + Domain Model =过度工程?

时间:2010-02-25 16:05:32

标签: .net nhibernate stored-procedures orm oop

背景

我真的很喜欢Fluent NHibernate - 它非常棒。我不必编写那些平凡的基于CRUD的SQL存储过程,这很好(不是说有什么问题)!

我已经在我们正在开发的应用程序上走了一段路。现在我坐在几十个域对象中,每个域对象都有一个存储库接口和相应的具体存储库。呼!

但是等等 - 这真的让我省了那么多时间吗?感觉好像花了更多的时间。我必须编写所有这些99%属性和1%业务逻辑的域对象,然后我必须定义映射。这需要花费与编写存储过程相同的时间。那么使用Fluent NHibernate为我提供的只是编写存储过程有什么好处?

问题

是否有任何可靠的解决方案用于生成那些“属性包”域对象(在.NET中),所以我不必编写它们?我可以看到一些好处,只要对象提供了一些可扩展性以根据需要添加额外的业务逻辑。

3 个答案:

答案 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