前言:
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框架等,让整个架构更利于互联网开发。