我有这个问题,混淆何时将整个对象包含为另一个对象的属性,或仅包含其ID。似乎如果我包含整个对象,加载包含对象的调用将不必要地加载包含的对象,当我可能只需要引用时。什么是财产方法?
答案 0 :(得分:2)
通常总是引用另一个对象。
许多ORM技术都有“代理”和“延迟加载”的概念,这意味着,除非您引用该对象,否则它不会加载它。
答案 1 :(得分:2)
我更喜欢包含对象本身,因为一个对象实际上与另一个实际对象有关系 - 对象ID只是一个实现细节。要处理不必要的电话问题,请查看“lazy loading”。
答案 2 :(得分:2)
如果您需要详细信息,请仅包含其他对象。
理想情况下使用ViewModel而不是您的实体。您的ViewModel仅包含它所需的内容,因此例如OrderEditViewModel将包含customerid,除非您要显示自定义名称,在这种情况下,您将包含来自customer的字段。有些人建议您将对象展平为视图模型,因此您没有OrderEditViewModel.Customer.CustomerId,而是ORderEditViewModel.CustomerId。 Automapper可以帮助你做到这一点(以及价值注意 - 注意拼写)
我有mvcsecurity.codeplex.com来帮助加密网页上的记录ID以防止篡改(它有帮助但你仍然应该在你的查询中有一些东西来防止现场篡改,所以攻击者无法添加其他人的客户ID例如_)
如果有兴趣的话,我会更多地参与MVC中的参数篡改: http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app
答案 3 :(得分:1)
我的建议是始终考虑设计而不是性能。性能可以调整,但设计不能。因此,如果两个对象具有需要聚合/组合的那种关系,那么您应该这样做。
但是,如果您的包含对象只需要处理ID(例如,将其传递给处理ID以执行某些操作的其他对象),那么您只能保留ID字段。不需要公开整个对象(但要确保包含的对象不需要知道关于另一个对象的任何信息。)。