DAO 和 SOLID 设计原则
DAOs and SOLID design principles
我一直在阅读 SOLID 设计原则,目前正在研究 'Single Responsibilty Principle',但我对这个原则的用例很好奇。在我工作的公司,我们有 DAO,它有 read
、insert
和 update
的方法来管理数据库中的记录。
这样的事情会破坏 'Single Responsibilty Principle' 吗?如果是这样,那么每次插入、读取和更新是否需要 类?
DAO 示例:
class UserDAO {
public function read(where: object) {
// read code
}
public function insert(user: User) {
// insert code
}
public function update(user: User) {
// update code
}
}
单一职责原则指出
A class must have only one reason to change.
假设我们有 UserDAO 方法读取、保存、删除、更新。因此,此 class 仅在与用户相关的更改时才会更改。因此,它只有一个更改原因,即 User.
因此,我认为如果实施正确,它不会违反 SRP(单一职责原则)。
void save(User user){
//user related logic
}
void save(User user){
// user related logic and address logic encapsulated inside address class
//eg: address.getAddress(user.getId);
}
在上面的例子中,它并没有违反SRP,因为只有在用户逻辑发生变化时才会改变保存方法。地址逻辑由地址 class 本身处理。
例如:如果保存方法如下所示:
void save(User user){
Address address = new Address();
//Address logic
Payment payment = new Payment();
//Payment logic
}
在上面的代码中,Address 或 Payment 逻辑的任何变化都会使这个 DAO 保存方法也发生变化。它违反了 SRP。
所以,这真的取决于实施。
我一直在阅读 SOLID 设计原则,目前正在研究 'Single Responsibilty Principle',但我对这个原则的用例很好奇。在我工作的公司,我们有 DAO,它有 read
、insert
和 update
的方法来管理数据库中的记录。
这样的事情会破坏 'Single Responsibilty Principle' 吗?如果是这样,那么每次插入、读取和更新是否需要 类?
DAO 示例:
class UserDAO {
public function read(where: object) {
// read code
}
public function insert(user: User) {
// insert code
}
public function update(user: User) {
// update code
}
}
单一职责原则指出
A class must have only one reason to change.
假设我们有 UserDAO 方法读取、保存、删除、更新。因此,此 class 仅在与用户相关的更改时才会更改。因此,它只有一个更改原因,即 User.
因此,我认为如果实施正确,它不会违反 SRP(单一职责原则)。
void save(User user){
//user related logic
}
void save(User user){
// user related logic and address logic encapsulated inside address class
//eg: address.getAddress(user.getId);
}
在上面的例子中,它并没有违反SRP,因为只有在用户逻辑发生变化时才会改变保存方法。地址逻辑由地址 class 本身处理。
例如:如果保存方法如下所示:
void save(User user){
Address address = new Address();
//Address logic
Payment payment = new Payment();
//Payment logic
}
在上面的代码中,Address 或 Payment 逻辑的任何变化都会使这个 DAO 保存方法也发生变化。它违反了 SRP。
所以,这真的取决于实施。