这里的土牛是指abp的作者,土耳其人,简称“土牛”,前两天看了他分享的ppt,这里做个小笔记。

架构分层

图一(abp作者)

图二(clean架构)

图三(在朋友圈看到的)

每种架构没有好坏,只要是流行的,适合自己的就好。一种架构不管是否完全运用DDD思想,不重要,合理的分层是必须的!

  • 表现层

  • 应用层(用例)

  • 领域层

  • 基础设施层

领域驱动的核心构件

最佳实践

Repositories 原则
  • repository 是一个类似于集合的接口,可与数据库交互以读取和写入实体

  • 在domain layer定义接口,在infrastructure中实现

  • 不包含domain 逻辑

  • Repository 接口应独立于数据库/ ORM

  • 为聚合根而非实体创建repositories

Application Services 原则
  • 实现应用程序的用例(应用逻辑)

  • 不实现核心domain逻辑

  • 获取并返回数据传输对象(DTO),而不是实体(entities)

  • 在内部使用领域服务,实体,仓储,和其他领域对象。

Application Services
通用DTO原则最佳实践
  • 应该序列化

  • 应该有一个无参数的构造函数

  • 不应该包含业务逻辑

  • 不要从实体继承!不要引用实体!

Input DTO 最佳实践
  • 仅定义用例所需的属性

  • 不要在多个用例(服务方法)中重复使用相同的输入DTO。

例如:

  • ID 在创建的时候不会使用!创建和修改不要共享相同的dto!

  • 密码在更改和ChangeUserName不会使用!

另外两个最佳实战

  • 仅实现形式验证(可以使用数据注释属性)

  • 不包括域验证逻辑(例如:唯一用户名约束)

Application Services
Output DTO 建议
  • 保持输出DTO文件数量最小。尽可能重复使用(不能把输入DTO作为输出DTO)。

  • 可能包含比客户需求更多的属性

  • 创建和更新方法返回实体DTO。

  • 例外:性能至关重要的地方,尤其是对于大型结果集。

vs

Application Services 对象映射
  • 使用自动对象映射库(但是,请小心–启用配置验证)

  • 不要将输入DTO映射到实体。

  • 将实体映射到输出DTO

Multiple Application Layers 多个应用层
  • 为每种应用程序类型创建单独的应用程序层。

  • 使用单个领域层 共享核心域逻辑。

跟着“土牛”学架构知识相关推荐

  1. 大专生三面蚂蚁金服,成为java架构师应该学的知识

    第一个 Java相关 1.1 美团面试Java问题 JVM内存模型 GC垃圾回收算法 讲解新生代 老年代 java的基本类型有哪几个?String是不是java的基本类型?String为什么要是fin ...

  2. 跟着Rocskdb 学 存储引擎:读写链路的代码极致优化

    文章目录 1. 读链路 1.1 FileIndexer 1.1.1 LevelDB sst查找实现 1.1.2 Rocksdb FileIndexer实现 1.2 PinnableSlice 减少内存 ...

  3. 致敬我在深圳大学的C++启蒙老师,跟着他学计算机编程就对了 (文末赠书5本)

    致敬我的C++启蒙老师,跟着他学计算机编程就对了 摘要 讲述了一个故事,介绍了一位良师,一段因C++而续写的回忆,希望对各位看官有所帮助和启发. 文章目录 1 写在前面 2 我的C++启蒙老师 3 谈 ...

  4. 跟着大厂学数据分析!

    大厂需要什么样的数据分析师? 随着数据分析岗位的正规化,很多新人也进入到这个行业中来,一些从业者明显感觉到了压力. 从最新的岗位JD上,也能看出,从SQL.Python到建模分析.Tableau,对数 ...

  5. java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分+微序幕就此拉开之Docker(Docker概念:容器、镜像、仓库)、操作命令、Docker网络、分层、K8S<->Docker~整起

    架构知识+分+微序幕就此拉开之Docker 一.为什么要搞这个Docker,咱们为啥要学,盖房子? 二.Docker的镜像与容器 1.预备知识:虚拟(机).容器(化) 2.Docker.镜像.容器 3 ...

  6. 程序员分哪几种?分别要学什么知识?工资怎么样?

    一.程序员的分类 程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员.delphi程序员.php程序员.powerbuilder程序员.C程序员.linux程序员.net程序 ...

  7. 从零开始学架构——架构基础

    本文章的内容是根据书籍<从零开始学架构>整理的资料,供作者以及读者查阅. 1. 架构的定义 软件架构指软件系统的顶层架构.详细阐述如下: a. "系统由一群关联个体组成" ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(一:总览篇)~整起

    PART1:项目情景发展历程:很久很久以后,敏小言和老胡开的小超市,突然发生了一些变故: 超市中除了柜台格子业务之外,还有用户.视频.签到.评论.数据处理等业务[之前,咱们项目中的用户.视频.签到.评 ...

  9. python做外贸_跟着销售学python(3)---开发微信公平台(1)

    跟着销售学python(3)--- 开发微信公共平台(1) 首先交代一下, 目前我的学习背景啊: 我自己是一个创业的外贸服务公司, 自己主要做销售,学python主要目的是为了工作上的帮助吧. 自己的 ...

最新文章

  1. 面向对象的三大特性(封装、继承、多态)
  2. mysql-10临时表、复制表
  3. C#实现打印与打印预览功能
  4. flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
  5. 算法题目——第K大的数
  6. c++ gzip java.util.zip.gzip_java.util.zip.GZIPInputStream.close()方法示例
  7. 无法访问_关于小米电视无法访问电脑创建共享文件夹问题
  8. HYSBZ2761 不重复数字【序列处理】(BZOJ2761)
  9. 两个页面用url传值 和设置页面字段为不可编辑或是只读
  10. 海康摄像头b/s架构下的视频直播
  11. vue-版的老虎机抽奖活动效果折腾小记
  12. 计算机四分位数公式,上四分位数(上下四分位数计算公式)
  13. transition 用法
  14. html5 游戏 黑屏,战地5游戏最新黑屏无限加载解决方法
  15. kubesphere master节点执行kubectl get po Unable to connect to the server: Forbidden
  16. Pandas+Pyecharts | 某APP大学生用户数据分析可视化
  17. ext3格式化成ext4
  18. vscode 下编译k210
  19. 摄像头视频监控是如何与流媒体服务器云平台连接的?
  20. 朱尔斯-雷格纳特——牛顿铁粉,用天体运行推算股票涨跌

热门文章

  1. python3-day4(装饰器)
  2. ExtJs 4.x Ajax简单封装
  3. hdu 1466 计算直线的交点数 递推
  4. 六、 跨多个WebService管理Session
  5. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
  6. antd picker 使用 如何_如何打造 Serverless JavaScript 全栈商业级应用?
  7. 如何使计算机为您读取文档
  8. 什么是Google Play保护以及如何确保Android安全?
  9. chrome开启touch屏幕点击事件
  10. Redhat 5.1 install PHP 5.3.6