前言:

download:DDD(畛域驱动设计)思维解读及优良实际

下载课程ZY:https://www.97yrbl.com/t-1317.html

开发环境

jdk1.8【jdk1.7以下只能局部反对netty】
springboot 2.0.6.RELEASE
idea + maven

五、代码示例

itstack-demo-ddd-01└── src    ├── main    │   ├── java    │   │   └── org.itstack.demo    │   │       ├── application    │   │       │    ├── event    │   │       │    │   └── ApplicationRunner.java        │   │       │    └── service    │   │       │        └── UserService.java        │   │       ├── domain    │   │       │    ├── model    │   │       │    │   ├── aggregates    │   │       │    │   │   └── UserRichInfo.java        │   │       │    │   └── vo    │   │       │    │       ├── UserInfo.java        │   │       │    │       └── UserSchool.java        │   │       │    ├── repository    │   │       │    │   └── IuserRepository.java        │   │       │    └── service    │   │       │        └── UserServiceImpl.java        │   │       ├── infrastructure    │   │       │    ├── dao    │   │       │    │   ├── impl    │   │       │    │   │   └── UserDaoImpl.java        │   │       │    │   └── UserDao.java        │   │       │    ├── po    │   │       │    │   └── UserEntity.java        │   │       │    ├── repository    │   │       │    │   ├── mysql    │   │       │    │   │   └── UserMysqlRepository.java    │   │       │    │   ├── redis    │   │       │    │   │   └── UserRedisRepository.java            │   │       │    │   └── UserRepository.java        │   │       │    └── util    │   │       │        └── RdisUtil.java    │   │       ├── interfaces    │   │       │    ├── dto    │   │       │    │    └── UserInfoDto.java        │   │       │    └── facade    │   │       │        └── DDDController.java    │   │       └── DDDApplication.java    │   ├── resources        │   │   └── application.yml    │   └── webapp        │       └── WEB-INF    │            └── index.jsp        └── test         └── java             └── org.itstack.demo.test                 └── ApiTest.java
application/UserService.java | 应用层用户服务,畛域层服务做具体实现/** * 应用层用户服务 * 虫洞栈:https://bugstack.cn * 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码 * Create by fuzhengwei on @2019 */public interface UserService {    UserRichInfo queryUserInfoById(Long id);}

domain/repository/IuserRepository.java | 畛域层资源库,由根底层实现
/**

  • 虫洞栈:https://bugstack.cn
  • 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码
  • Create by fuzhengwei on @2019
    */

public interface IUserRepository {

void save(UserEntity userEntity);UserEntity query(Long id);

}
domain/service/UserServiceImpl.java | 应用层实现类,应用层是很薄的一层能够只做服务编排
/**

  • 虫洞栈:https://bugstack.cn
  • 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码
  • Create by fuzhengwei on @2019
    */

@Service("userService")
public class UserServiceImpl implements UserService {

@Resource(name = "userRepository")private IUserRepository userRepository;@Overridepublic UserRichInfo queryUserInfoById(Long id) {        // 查问资源库    UserEntity userEntity = userRepository.query(id);    UserInfo userInfo = new UserInfo();    userInfo.setName(userEntity.getName());    // TODO 查问学校信息,内部接口    UserSchool userSchool_01 = new UserSchool();    userSchool_01.setSchoolName("振华高级试验中学");    UserSchool userSchool_02 = new UserSchool();    userSchool_02.setSchoolName("西南电力大学");    List<UserSchool> userSchoolList = new ArrayList<>();    userSchoolList.add(userSchool_01);    userSchoolList.add(userSchool_02);    UserRichInfo userRichInfo = new UserRichInfo();    userRichInfo.setUserInfo(userInfo);    userRichInfo.setUserSchoolList(userSchoolList);    return userRichInfo;}

}
infrastructure/po/UserEntity.java | 数据库对象类
/**

  • 数据库实体对象;用户实体
  • 虫洞栈:https://bugstack.cn
  • 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码
  • Create by fuzhengwei on @2019
    */

public class UserEntity {

private Long id;private String name;get/set ...

}
infrastructrue/repository/UserRepository.java | 畛域层定义接口,根底层资源库实现
/**

  • 虫洞栈:https://bugstack.cn
  • 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码
  • Create by fuzhengwei on @2019
    */

@Repository("userRepository")
public class UserRepository implements IUserRepository {

@Resource(name = "userMysqlRepository")private IUserRepository userMysqlRepository;@Resource(name = "userRedisRepository")private IUserRepository userRedisRepository;@Overridepublic void save(UserEntity userEntity) {    //保留到DB    userMysqlRepository.save(userEntity);    //保留到Redis    userRedisRepository.save(userEntity);}@Overridepublic UserEntity query(Long id) {    UserEntity userEntityRedis = userRedisRepository.query(id);    if (null != userEntityRedis) return userEntityRedis;    UserEntity userEntityMysql = userMysqlRepository.query(id);    if (null != userEntityMysql){        //保留到Redis        userRedisRepository.save(userEntityMysql);        return userEntityMysql;    }    // 查问为NULL    return null;}

}
interfaces/dto/UserInfoDto.java | DTO对象类,隔离数据库类
/**

  • 虫洞栈:https://bugstack.cn
  • 公众号:bugstack虫洞栈 | 欢送关注并获取更多专题案例源码
  • Create by fuzhengwei on @2019
    */

public class UserInfoDto {

private Long id;        // IDpublic Long getId() {    return id;}public void setId(Long id) {    this.id = id;}

}
interfaces/facade/DDDController.java | 门面接口
/**

@Controller
public class DDDController {

@Resource(name = "userService")private UserService userService;@RequestMapping("/index")public String index(Model model) {    return "index";}@RequestMapping("/api/user/queryUserInfo")@ResponseBodypublic ResponseEntity queryUserInfo(@RequestBody UserInfoDto request) {    return new ResponseEntity<>(userService.queryUserInfoById(request.getId()), HttpStatus.OK);}

}

六、综上总结

以上基于DDD一个根本入门的构造演示实现,理论开发能够依照此模式进行调整。
目前这个架构分层还不能很好的进行拆散,以及层级关系的援用还不利于扩大。
后续会继续欠缺以及能够组合搭建RPC框架等,让整个架构更利于互联网开发。