尽管它是一个可观的,表面上是n层的项目,但我帮助支持的应用程序没有真正的业务对象可言。我们的团队称之为“业务对象”实际上只不过是自动生成的数据库行周围的包装,而所有实际的业务逻辑都与Web UI代码混合在一起。对于新功能,我真的希望看到我们的团队开始使用/编码真正代表业务实体数据和行为的对象,并尽可能地将业务逻辑从UI中排除出去。然而,关于如何建模关系存在一些冲突。关联:使用ID还是对象引用?
为了达到这个目的,大大简化了域名,比如说你有人员和任务。每个任务都有一个人分配给它。
public class Person
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
应该如何建模任务?
public class Task
{
public int ID { get; set; }
public string Title { get; set; }
public int AssignedPersonID { get; set; }
}
OR
public class Task
{
public int ID { get; set; }
public string Title { get; set; }
public Person AssignedPerson { get; set; }
}
那些花更多的时间编写Web UI希望越早,其中人是他的ID引用。他们认为,当一个不同的人员分配给一个任务时,最好只更改task.AssignedPersonID
(新的ID很容易从UI的下拉列表中获得)并写入数据库。对我而言,这与我们现在所做的方法没有什么不同;它仍然反映了比实际业务模型更多的数据库行。他们认为,如果最终结果 - 任务表中的AssignedPersonID列被更新 - 完全相同,那么他们认为必须采用该PersonID并实例化相应的Person实例,然后设置task.AssignedPerson
,代码更慢并且速度更慢。
从面向对象的角度来看,这里的首选方法是什么?
对于术语混淆抱歉。对于继承来说,对我来说最自然的术语是“基类”和“子类”,在继承的背景下,我没有考虑“父”和“小孩”。这可能解释了我在查找有关我的问题的在线信息时遇到的一些困难。 – Mark42 2012-01-27 22:08:53
没问题。这些也很常见。作为程序员,我们在很多地方真的弄得一团糟。子类,派生类,子类,超类,基类,父类......它可能是一个大问题。就像我说的那样,你的问题实际上是一个很好的问题。 – rbwhitaker 2012-01-27 22:28:16
我更新了标题,希望更好地反映问题的性质。感谢您的观点。 – Mark42 2012-01-27 23:11:28