gpt4 book ai didi

asp.net-mvc - Nhibernate(以及一般的 ORM): work with Objects or ObjectIds?

转载 作者:行者123 更新时间:2023-12-02 03:37:21 25 4
gpt4 key购买 nike

这件事一直困扰着我。考虑一个(MVC 类型)Web 应用程序,将 ORM(例如 Nhiberate)作为数据访问层。

一方面 - OOP/Rich 域模型方面 - 我觉得我应该传递(引用)我正在谈论的真实对象。

另一方面 - DB/Web 应用程序方面 - 我觉得仅传递对象的整数 Id 比传递对象的整数 Id 更容易、更高效。反对自己。

考虑电子商务目录类型应用程序:

  • 用户已登录并导航至产品页面。
  • 他们发表了评论。
  • 负责保存此评论的 Controller 操作有 3 条信息:a) 用户 ID(来自身份验证 cookie 或其他位置),b) 产品 ID(可能来自查询字符串),以及 c) 评论文本。
  • 现在,什么是最佳实践?当我们知道用户和产品对象的全部用途是让 ORM 可以读取它们的 ID 并设置适当的外部对象时,是否真的值得膨胀用户和产品对象(例如,通过从存储库获取它们,以及所需的所有数据库工作)存储评论的数据库表中的键?

人们对此有何看法?也许由于 Web 应用程序的无状态性质,应该比其他应用程序给予更多的回旋余地?我想会有“这取决于”的答案,但也许有些人对这个问题是纯粹主义者。

这是一个普遍问题,可能适用于许多平台,但是如果给出示例,我希望它们是 ASP.NET MVC(如果可能的话)

谢谢。

最佳答案

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.

关于asp.net-mvc - Nhibernate(以及一般的 ORM): work with Objects or ObjectIds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3360758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com