对po、dao、domain、service的理解

来源:5-5 资金账户模块-账户表数据库访问层写入和更新的编码实践

梦飞_0002

2020-03-27

1、po:其实就是将数据库表字段映射到一个struct中,作为最基础的数据结构
2、dao:就是对po的一些增删改查的操作,php四层代码架构中的model其实就
是po、dao的结合体
3、service:这门课程中的service更像是定义除表字段外的其他数据结构,比如
数据传输对象DTO,不涉及任何业务逻辑,而这一点在php的四层代码架构
中,service主要处理业务逻辑
4、domain:这门课程里的domain更像是php四层代码架构中的service,主
要处理业务逻辑

对于service和domain的理解,不知道我这么理解,是否准确,请老师指正,

写回答

1回答

枫荇

2020-03-27

同学您好,po和dao理解是准确的,service和domain理解上有误:

domain:领域对象,包括了业务数据和业务行为,和java中提到的OO一致,通常domain是有状态的。领域对象用来处理业务逻辑,但只处理领域内业务逻辑,不做跨领域业务逻辑,比如订单和库存是2个领域,那么在订单下单逻辑中只包括订单相关的逻辑处理,不包括扣库存的逻辑。

service:是一种泛化的服务对象,通常用来处理泛化的业务逻辑,不同的分层架构中,其service职责不一样;在三层架构中,service中包含了领域逻辑和应用业务逻辑;在四层架构中,service处理应用业务逻辑,通常是多领域业务组合或编排,以及跨领域的逻辑处理,比如下单后发送扣库存消息,比如下单后发送短信通知等逻辑。但也会根据微服务架构的不同,service职责也会有一些变化,只要满足单一职责面向对象设计就是一种好的实践。

0
7
梦飞_0002
回复
枫荇
所以在实际开发中,确定好了需求后,就可以先设计service层interface,定义好所有涉及到的业务行为,而domain层也是在设计好service层interface后就确定好了的,根据业务维度划分成多个领域,最后再考虑每个domain涉及到哪些dao,一切都是业务为驱动进行的,其中dao只是为了将业务状态持久化,以便还原和跟踪。所以数据最终是为业务服务的
2020-03-27
共7条回复

仿微信抢红包 Golang实战多版本抢红包系统

Golang红包系统单体版+并发版+分布式+微服务版,四大金装版、超值必修课

582 学习 · 159 问题

查看课程