将对象保存到DataBase中的对象是否会破坏类的Cohesion?

pen*_*ake 4 .net c# oop service cohesion

就面向对象设计而言,您是否认为提供将数据库保存到数据库中的功能会破坏类的COHESION?

想像:

Product p = new Product() 
          {
           Name = "Joy Rider", 
           Price = 100, 
           Currency = "USD"
          };
Run Code Online (Sandbox Code Playgroud)

您是否认为将此产品保存到DataBase最好以这种方式完成:

 p.Save();
Run Code Online (Sandbox Code Playgroud)

或者以某种方式:

 ProductServices.SaveProduct(p);
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Ode*_*ded 8

可以将自身保存到数据库的对象将违反SRP(单一责任原则).

持久性本身就是一种责任,应该由专门的类来处理.

除了具有LOW内聚之外,还有其他成员 - 与持久性有关的成员与那些没有持久性的成员没有任何关系,也不会在那些不处理持久性的类的方法中使用.


Vin*_*nie 5

它确实干扰了单一责任原则.示例中Product类的用途是表示产品以及该产品上的操作.与数据库交互不是班级责任的核心部分.

使用ProductServices类可以提高代码的可维护性.假设用于保存数据库中对象的逻辑是要更改(它可以)您想要更改系统中的每个实体类吗?