我很难全神贯注于业务对象,或者更具体地说,业务对象集合。
这是我正在尝试做的一个简单示例。
如果我有一个事件对象,这个对象可以涉及很多人,每个人对象可以有多个注释。没有 Person 对象就不能存在注释,没有事件对象就不能存在 Person 对象。
如果我有 Public List
这也引出了另一个问题。实际数据库应该在哪里CRUD操作驻留。 Note 对象应该有自己的 CRUD 还是应该由 Person 对象负责,因为没有它就不可能存在?
我有点不知道该走哪条路,我想把这部分做好,因为它将成为程序其余部分的模板。
最佳答案
已经提供了一些很好的信息,但是您提到的一件事可能会让您感到困惑:
"If i have Public List notes = new List() then methods such as ADD, REMOVE become available to Person within Incident."
这完全取决于您如何设计类(class)。您应该考虑的一件事是这些数据相互关联的方式。这将帮助您描绘您的类(class)设计。
听起来像这样:
- 一个事件可能涉及很多人
- 一个人可以创建很多笔记
- 备注是最低级别,并且由于正在创建的事件和处理该事件的负责人而存在。
事件 1 - 许多人
人 1 - 许多笔记
您可以通过多种方式建立这种关系。一种方法可能是实际分离所涉及的对象,然后创建连接的对象。
例如
public class Incident {
//insert incident fields here
//do not add person logic / notes logic
//probably contains only properties
}
public class Person {
//insert person fields
//private members with public properties
//do not embed any other logic
}
public class Comment {
//insert comment private fields
//add public properties
//follow the law of demeter
}
这些类不会互相提供细节,它们只是存储这些信息的存储库。例如,您然后将这些类相互关联
public class IncidentPersonnel {
List<Person> p;
//add methods to add a person to an incident
//add methods to remove a person from an incident
....
}
然后你可能有另一个类来处理人员的评论
public class PersonnelNotes {
List<Note> n;
//other methods...
}
你可以更进一步,但这可能会使事情复杂化,但我只是给你另一个关于如何处理这个问题的想法。
尝试关注the law of demeter for functions
封装你所有的对象,此外,你的邻居可以和你说话,但其他的不多......这将有助于保持你的类松散耦合,并使你的思维过程更简单一些。
最后,您提到了 CRUD 操作应该如何工作。这一切都可以追溯到你的 DAL (数据访问层)。您可以返回一个引用对象及其所有属性,而不是从表中返回数据行。添加和删除的工作方式相同(传入或传出对象)。您可以使用 ORM 或编写自己的 DAL。这完全取决于您希望自己参与的程度:)。
关于C# 业务对象和集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2101542/