【发布时间】:2010-07-29 08:47:45
【问题描述】:
这件事一直困扰着我。考虑使用 ORM(例如 Nhiberate)作为数据访问层的(MVC 类型)Web 应用程序。
一方面 - OOP/富域模型方面 - 我觉得我应该传递(引用)我正在谈论的真实对象。
另一方面 - DB/Web App 手 - 我觉得只传递对象的整数 Id 而不是传递反对自己。
考虑一个电子商务目录类型的应用程序:
- 用户已登录并导航到产品页面。
- 他们发表评论。
- 负责保存此评论的控制器操作包含 3 条信息:a) 用户 ID(来自 auth cookie 或任何地方),b) 产品 ID(可能来自查询字符串),以及 c) 评论文本。
- 现在,这里的最佳做法是什么?当我们知道它们的全部用途是为了让 ORM 可以读取它们的 ID 并设置适当的外部对象时,是否真的值得夸大用户和产品对象(例如,通过从存储库中获取它们,以及所需的所有数据库工作)存储 cmets 的 DB 表中的键?
人们对此有何看法?由于 Web 应用程序的无状态特性,也许应该比其他应用程序给予更多的余地?我想会有“视情况而定”的答案,但也许有些人是这个问题的纯粹主义者。
这是一个可能适用于许多平台的一般问题,但如果给出示例,我希望它们尽可能使用 ASP.NET MVC。
谢谢。
【问题讨论】:
-
如何更容易“只是”传递 id 而不是引用?另外,除了从数据库中获取一个额外的实体之外,这是否在任何方面都更具性能?
-
@Apollodude:当然,一旦你拥有对象,它就不再具有更高的性能——这不是我的意思。但是两次不必要的数据库提取让我畏缩。看看 Daniel Auger 的解决方案,大家都满意。
-
我同意性能问题是非常有效的。我想了解您追求的其他好处。
标签: asp.net-mvc nhibernate oop orm