违反SRP的对象是否存在持久性责任?

时间:2018-01-23 19:00:57

标签: c# oop single-responsibility-principle

我很难证明这是否违反了SRP。 Employee类只代表系统中的员工。

class Employee
{
  int id;
  string name;
  Date startDate;
  int departmentCode;


  void UpdateEmployeeInformation(some arguments) //updates the data in DB

  void DaysInTheCompany() //calculates now - startDate  difference

}

根据我能阅读的内容,它确实违反了SRP,但我不确定为什么(我认为这是因为Update方法不仅仅是持有数据的责任?

2 个答案:

答案 0 :(得分:2)

是。它违反了SRP。

员工的责任是持有员工信息,也许是一些计算,例如DaysInTheCompany,但访问文件数据库不属于他的责任。

您的示例是最容易识别的示例之一。

这篇文章对我很有用。 https://www.codeproject.com/Articles/587404/Understand-Single-Responsibility-and-Interface-Seg

您的Employee类只是一个容器,您将在业务层中填充此容器并将其传递给数据层。

我使用Service类(EmployeeService),此类接收Employee对象并更新数据库中的信息。

在此链接中,您可以看到一些想法。 https://softwareengineering.stackexchange.com/questions/156481/how-should-i-encapsulate-database-access

答案 1 :(得分:-2)

不,它不是,它实际上是一个好方法。对象可以在内部封装用于完成其工作的数据库连接。对象的职责是进行更新,这通常意味着更新数据库中的数据。