【发布时间】:2009-08-11 10:44:35
【问题描述】:
在我看来,业务对象的 ID 字段应该是只读的(公共获取和私有集),因为根据定义,ID 永远不会改变(因为它唯一地标识了数据库中的一条记录)。
当您创建一个新对象(ID 尚未设置)时,这会产生一个问题,通过存储过程将其保存在数据库中,例如返回新创建的 ID,那么如果 ID 存在,您如何将其存储回对象中属性是只读的?
例子:
Employee employee = new Employee();
employee.FirstName="John";
employee.LastName="Smith";
EmployeeDAL.Save(employee);
如果该属性是只读的,Save 方法(实际上连接到数据库以保存新员工)如何更新 Employee 对象中的 EmployeeId 属性(这应该是因为 EmployeeId 一旦创建就永远不会改变)。
看起来 Id 应该可以由 DAL 写入,而对于世界其他地方来说应该是只读的。如果 DAL 类和业务对象类位于不同的程序集中,您将如何实现这一点?
我不想在 Employee 类中创建 Save 方法,因为这个类应该与数据库无关。
【问题讨论】:
-
一个我不相信的古老问题,有一个“不错”的答案,只是一个最不坏的妥协。
-
安东尼,我删除了我的答案。我想我太复杂了。我同意@Martin Brown 的观点。这个问题没有简单的答案。我会创建一个新对象,即使这意味着复制所有属性。
-
@布鲁诺。我正要评论说你的答案可能会奏效。看起来这样做的最好方法是使 ID 内部化: public int Id { get;内部集;这样,只有 DAL 能够更新它并允许 DAL 更新“内部”ID 属性:[assembly: InternalsVisibleTo("DAL_Assembly")] 这样对于 DAL,内部 ID 属性将是可更新的。
标签: c# business-logic