Mat*_*hew 6 .net c# business-logic business-objects
我很难绕过业务对象或更具体地说是业务对象集合.
这是我正在尝试做的一个简单示例.
如果我有一个事件对象,则此对象可以包含许多人,并且每个Person对象都可以有多个注释.没有Person对象,Notes不能存在,如果没有Incident对象,Person对象就不能存在.
如果我有公共列表<Note> notes = new List <Note>(),则事件中的Person可以使用ADD和REMOVE等方法.我假设如果我要在Notes集合上调用这些方法,它将只是从列表中删除它,但不执行任何代码来实际添加/更新/删除数据源中的员工.这让我相信我不应该使用List而是其他什么?
这也引出了另一个问题.实际数据库CRUD操作应驻留在何处.Note对象是否应该有自己的CRUD,或者Person对象应该对它负责,因为它没有它就不存在?
我有点迷失方向,我想让这部分正确,因为它将成为该计划其余部分的模板.
已经提供了一些重要信息,但您提到的一件事可能会让您感到困惑:
“如果我有公共列表注释 = new List(),则事件中的人员可以使用 ADD、REMOVE 等方法。”
这一切都取决于您如何设计课程。您应该考虑的一件事是这些数据相互关联的方式。这将帮助你想象你的班级设计。
听起来像下面这样:
事件 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
}
Run Code Online (Sandbox Code Playgroud)
这些类不会互相提供详细信息,它们只是存储这些信息的存储库。然后,您可以将这些类彼此关联起来
public class IncidentPersonnel {
List<Person> p;
//add methods to add a person to an incident
//add methods to remove a person from an incident
....
}
Run Code Online (Sandbox Code Playgroud)
然后你可能有另一个类来处理人员的评论
public class PersonnelNotes {
List<Note> n;
//other methods...
}
Run Code Online (Sandbox Code Playgroud)
您可以进一步解决这个问题,但这可能会使事情变得复杂,但我只是给您提供如何处理这个问题的另一个想法。
尝试遵循函数的迪米特定律
封装所有的对象,此外,你的邻居可以与你交谈,但不能做太多其他事情......这将有助于保持你的类松散耦合,并使你的思维过程更简单。
最后,您提到了 CRUD 操作应该如何工作。这一切都回到您的DAL(数据访问层)。您可以返回一个引用的对象及其所有属性,而不是从表中返回数据行。添加和删除的工作方式相同(传入或传出对象)。您可以使用 ORM 或编写自己的 DAL。这完全取决于您想要自己参与的程度:)。