对象中的持久性责任是否违反了 SRP?

Is persistence responsibility in an object violating SRP?

我很难证明这是否违反了 SRP。 Employee class 仅表示系统中的一名员工。

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 方法与仅保存数据的职责不同?

是的。它违反了 SRP。

Employee 的职责是保存员工信息,也许是一些计算,比如 DaysInTheCompany,但是访问 DB of File 不是他的职责。

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

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

您的员工 class 只是一个容器,您将在您的业务层中填充此容器并将其传递到数据层。

我使用了一个Serviceclass,(EmployeeService),这个class接收Employee对象并更新数据库中的信息。

在这个link中,你可以看到一些想法。 https://softwareengineering.stackexchange.com/questions/156481/how-should-i-encapsulate-database-access

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