这件事已经拉了我一段时间。考虑使用ORM(例如Nhiberate)作为数据访问层的(MVC类型)Web应用程序。
一方面 - OOP / Rich域模型手 - 我觉得我应该传递(引用)我正在讨论的真实对象。
另一方面 - 数据库/ Web应用程序手 - 我觉得传递对象的整数ID更容易,更有效率而不是反对自己。
考虑电子商务目录类型应用程序:
人们对此有何看法?也许网络应用程序应该比其他应用程序更有效,因为它们的无状态特性?我想会有'它取决于'的答案,但也许有些人是关于这个问题的纯粹主义者。
这是一个可能适用于许多平台的一般性问题,但如果提供示例,我希望它们尽可能是ASP.NET MVC 。
谢谢。
答案 0 :(得分:3)
由于这个原因,NHibernate具有加载操作(而不是执行get操作)。
session.Save(
new Comment
{
Text = commentTextFromScreen,
User = session.Load<User>(userID),
Product = session.Load<Product>(productID)
}
};
在上面的示例中,您正在告诉NHibernate:我知道这些已经存在于数据库中,因此请不要立即选择它们。 NHibernate将为它们返回代理对象,只要您不尝试访问对象的任何属性,就不会对数据库进行选择。
有关更多信息,请查看Ayende的博文:The difference between Get, Load, and query by id.