DDD

11 - 基于贫血模型的MVC架构是否违背OOP?

2021-08-12  本文已影响0人  舍是境界

众所周知,很多业务系统都是基于 MVC 三层架构来开发的。实际上,更确切点讲,这是一种基于贫血模型的 MVC 三层架构开发模式

虽然这种开发模式已经成为标准的 Web 项目的开发模式,但它却违反了面向对象编程风格,是一种彻彻底底的面向过程的编程风格,因此而被有些人称为反模式(anti-pattern)。特别是领域驱动设计(Domain Driven Design,简称 DDD)盛行之后,这种基于贫血模型的传统的开发模式就更加被人诟病。而基于充血模型的 DDD 开发模式越来越被人提倡

本文围绕以下问题展开,让大家先搞清楚以下问题:

  1. 什么是贫血模型?什么是充血模型?
  2. 为什么说基于贫血模型的传统开发模式违反 OOP?
  3. 基于贫血模型的传统开发模式既然违反 OOP,那又为什么如此流行?
  4. 什么情况下我们应该考虑使用基于充血模型的 DDD 开发模式?

什么是基于贫血模型的传统开发模式?

///////// Controller+VO(View Object) //////////
public class UserController {
  private UserService userService; //通过构造函数或者IOC框架注入
  
  public UserVo getUserById(Long userId) {
    UserBo userBo = userService.getUserById(userId);
    UserVo userVo = [...convert userBo to userVo...];
    return userVo;
  }
}
public class UserVo {//省略其他属性、get/set/construct方法
  private Long id;
  private String name;
  private String cellphone;
}
////////// Service+BO(Business Object) //////////
public class UserService {
  private UserRepository userRepository; //通过构造函数或者IOC框架注入
  
  public UserBo getUserById(Long userId) {
    UserEntity userEntity = userRepository.getUserById(userId);
    UserBo userBo = [...convert userEntity to userBo...];
    return userBo;
  }
}
public class UserBo {//省略其他属性、get/set/construct方法
  private Long id;
  private String name;
  private String cellphone;
}
////////// Repository+Entity //////////
public class UserRepository {
  public UserEntity getUserById(Long userId) { //... }
}
public class UserEntity {//省略其他属性、get/set/construct方法
  private Long id;
  private String name;
  private String cellphone;
}

什么是基于充血模型的 DDD 开发模式?

刚刚我们讲了基于贫血模型的传统的开发模式。现在我们再讲一下,另外一种最近更加被推崇的开发模式:基于充血模型的 DDD 开发模式。

  1. 首先,我们先来看一下,什么是充血模型?
  1. 我们再来看一下,什么是领域驱动设计?

为什么基于贫血模型的传统开发模式如此受欢迎?

什么项目应该考虑使用基于充血模型的 DDD 开发模式?

小结

上一篇 下一篇

猜你喜欢

热点阅读