C# 业务对象和集合

标签 c# .net business-logic business-objects

我很难全神贯注于业务对象,或者更具体地说,业务对象集合。

这是我正在尝试做的一个简单示例。

如果我有一个事件对象,这个对象可以涉及很多人,每个人对象可以有多个注释。没有 Person 对象就不能存在注释,没有事件对象就不能存在 Person 对象。

如果我有 Public List notes = new List() 那么诸如 ADD 和 REMOVE 之类的方法对事件中的人员可用。我假设如果我要在 Notes 集合上调用这些方法,它只会将其从列表中删除,但不会执行任何代码来实际从数据源中添加/更新/删除员工。这让我相信我不应该使用 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/

相关文章:

c# - 打开数据连接

C#绑定(bind)datagridviewcomboboxcolumn到列表显示,格式化,preferred Size错误

c# - 收集仍在范围内的对象 - GC.Collect

java - Java中两个具有相同字段的类的面向对象设计

c# - VS2012无管理员账号远程调试

c# - 如何将 Unicode 字符写入控制台?

c# - 将数据行从一个数据表插入到特定索引

c# - 从单轨铁路到 ASP.Net MVC

c# - 在 C# 中分离 UI 和逻辑

java - 多个值对象的业务逻辑 - 将循环放在哪里?