已经提供了一些重要的信息,但您提到的一件事可能会让您感到困惑:
“如果我有 Public List notes = new List(),那么 ADD、REMOVE 等方法对事件中的人员可用。”
这一切都取决于你如何设计你的课程。您应该考虑的一件事是这些数据相互关联的方式。这将帮助你描绘你的班级设计。
听起来像下面这样:
- 一个事件可能涉及许多人
- 一个人可以创建多个笔记
- 注释是最低级别,并且由于正在创建事件和负责该事件的负责人而存在。
事件 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...
}
你可以更进一步,但这可能会使事情复杂化,但我只是给你另一个关于如何处理这个问题的想法。
尽量遵循得墨忒耳定律
封装你所有的对象,此外,你的邻居可以和你说话,但其他的不多……这将有助于保持你的类松散耦合,并使你的思考过程更简单。
最后,您提到了 CRUD 操作应该如何工作。这一切都可以追溯到您的DAL(数据访问层)。与其从表中返回数据行,不如返回一个引用对象及其所有属性。添加和删除的工作方式相同(传入或传出对象)。您可以使用 ORM 或编写自己的 DAL。这完全取决于您希望自己参与的程度:)。