整个过程大概是这样的,开发团队和领域专家一起通过 通用语言(ubiquitous language)去理解和消化领域知识,从领域知识中提取和划分为一个一个的子领域(核心子域,通用子域,支撑子域),并在子领域上建立模型,再重复以上步骤,这样周而复始,构建出一套符合当前领域的模型。
依靠领域驱动设计的设计思想,通过事件风暴建立领域模型,合理划分领域逻辑和物理边界,建立领域对象及服务矩阵和服务架构图,定义符合ddd分层架构思想的代码结构模型,保证业务模型与代码模型的一致性。通过上述设计思想、方法和过程,指导团队按照ddd设计思想完成微服务设计和开发。
1、拒绝泥球小单体、拒绝污染功能与服务、拒绝一加功能排期一个月
2、架构出高可用极易符合互联网高速迭代的应用服务
3、物料化、组装化、可编排的服务,提高人效
接口服务位于用户接口层,用于处理用户发送的restful请求和解析用户输入的配置文件等,并将信息传递给应用层。
jdk1.8【jdk1.7以下只能部分支持netty】
springboot 2.0.6.release
idea maven
itstack-demo-ddd-01
└── src
├── main
│ ├──
│ │ └── 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
│ │ ││ ├──
│ │ ││ │ └── 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 | 应用层用户服务,领域层服务做具体实现
public interface userservice { userrichinfo queryuserinfobyid(long id);}
domain/repository/iuserrepository.java | 领域层资源库,由基础层实现
public interface iuserrepository { void save(userentity userentity); userentity query(long id);}
domain/service/userserviceimpl.java | 应用层实现类,应用层是很薄的一层可以只做服务编排
@service("userservice")public class userserviceimpl implements userservice { @resource(name = "userrepository") private iuserrepository userrepository; @override public 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
infrastructure/po/userentity.java | 数据库对象类
public class userentity { private long id; private string name; get/set ...}
infrastructrue/repository/userrepository.java | 领域层定义接口,基础层资源库实现
@repository("userrepository")public class userrepository implements iuserrepository { @resource(name = "usermysqlrepository") private iuserrepository usermysqlrepository; @resource(name = "userredisrepository") private iuserrepository userredisrepository; @override public void save(userentity userentity) { //保存到db usermysqlrepository.save(userentity); //保存到redis userredisrepository.save(userentity); } @override public 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对象类,隔离数据库类
public class userinfodto { private long id; // id public long getid() { return id; } public void setid(long id) { this.id = id; }}
interfaces/facade/dddcontroller.java | 门面接口
@controllerpublic class dddcontroller { @resource(name = "userservice") private userservice userservice; @requestmapping("/index") public string index(model model) { return "index"; } @requestmapping("/api/user/queryuserinfo") @responsebody public responseentity queryuserinfo(@requestbody userinfodto request) { return new responseentity<>(userservice.queryuserinfobyid(request.getid()), httpstatus.ok); }}
以上基于ddd一个基本入门的结构演示完成,实际开发可以按照此模式进行调整。目前这个架构分层还不能很好的进行分离,以及层级关系的引用还不利于扩展。
以上就是浅谈java开发架构之领域驱动设计ddd落地的详细内容,更多关于java开发架构 领域驱动设计ddd落地的资料请关注软科小院其它相关文章!