跟着“土牛”学架构知识
这里的土牛是指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 多个应用层
为每种应用程序类型创建单独的应用程序层。
使用单个领域层 共享核心域逻辑。
跟着“土牛”学架构知识相关推荐
- 大专生三面蚂蚁金服,成为java架构师应该学的知识
第一个 Java相关 1.1 美团面试Java问题 JVM内存模型 GC垃圾回收算法 讲解新生代 老年代 java的基本类型有哪几个?String是不是java的基本类型?String为什么要是fin ...
- 跟着Rocskdb 学 存储引擎:读写链路的代码极致优化
文章目录 1. 读链路 1.1 FileIndexer 1.1.1 LevelDB sst查找实现 1.1.2 Rocksdb FileIndexer实现 1.2 PinnableSlice 减少内存 ...
- 致敬我在深圳大学的C++启蒙老师,跟着他学计算机编程就对了 (文末赠书5本)
致敬我的C++启蒙老师,跟着他学计算机编程就对了 摘要 讲述了一个故事,介绍了一位良师,一段因C++而续写的回忆,希望对各位看官有所帮助和启发. 文章目录 1 写在前面 2 我的C++启蒙老师 3 谈 ...
- 跟着大厂学数据分析!
大厂需要什么样的数据分析师? 随着数据分析岗位的正规化,很多新人也进入到这个行业中来,一些从业者明显感觉到了压力. 从最新的岗位JD上,也能看出,从SQL.Python到建模分析.Tableau,对数 ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分+微序幕就此拉开之Docker(Docker概念:容器、镜像、仓库)、操作命令、Docker网络、分层、K8S<->Docker~整起
架构知识+分+微序幕就此拉开之Docker 一.为什么要搞这个Docker,咱们为啥要学,盖房子? 二.Docker的镜像与容器 1.预备知识:虚拟(机).容器(化) 2.Docker.镜像.容器 3 ...
- 程序员分哪几种?分别要学什么知识?工资怎么样?
一.程序员的分类 程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员.delphi程序员.php程序员.powerbuilder程序员.C程序员.linux程序员.net程序 ...
- 从零开始学架构——架构基础
本文章的内容是根据书籍<从零开始学架构>整理的资料,供作者以及读者查阅. 1. 架构的定义 软件架构指软件系统的顶层架构.详细阐述如下: a. "系统由一群关联个体组成" ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(一:总览篇)~整起
PART1:项目情景发展历程:很久很久以后,敏小言和老胡开的小超市,突然发生了一些变故: 超市中除了柜台格子业务之外,还有用户.视频.签到.评论.数据处理等业务[之前,咱们项目中的用户.视频.签到.评 ...
- python做外贸_跟着销售学python(3)---开发微信公平台(1)
跟着销售学python(3)--- 开发微信公共平台(1) 首先交代一下, 目前我的学习背景啊: 我自己是一个创业的外贸服务公司, 自己主要做销售,学python主要目的是为了工作上的帮助吧. 自己的 ...
最新文章
- 面向对象的三大特性(封装、继承、多态)
- mysql-10临时表、复制表
- C#实现打印与打印预览功能
- flutter 弹幕插件_Flutter 实现虎牙/斗鱼 弹幕效果 | 秒速技术
- 算法题目——第K大的数
- c++ gzip java.util.zip.gzip_java.util.zip.GZIPInputStream.close()方法示例
- 无法访问_关于小米电视无法访问电脑创建共享文件夹问题
- HYSBZ2761 不重复数字【序列处理】(BZOJ2761)
- 两个页面用url传值 和设置页面字段为不可编辑或是只读
- 海康摄像头b/s架构下的视频直播
- vue-版的老虎机抽奖活动效果折腾小记
- 计算机四分位数公式,上四分位数(上下四分位数计算公式)
- transition 用法
- html5 游戏 黑屏,战地5游戏最新黑屏无限加载解决方法
- kubesphere master节点执行kubectl get po Unable to connect to the server: Forbidden
- Pandas+Pyecharts | 某APP大学生用户数据分析可视化
- ext3格式化成ext4
- vscode 下编译k210
- 摄像头视频监控是如何与流媒体服务器云平台连接的?
- 朱尔斯-雷格纳特——牛顿铁粉,用天体运行推算股票涨跌
热门文章
- python3-day4(装饰器)
- ExtJs 4.x Ajax简单封装
- hdu 1466 计算直线的交点数 递推
- 六、 跨多个WebService管理Session
- stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
- antd picker 使用 如何_如何打造 Serverless JavaScript 全栈商业级应用?
- 如何使计算机为您读取文档
- 什么是Google Play保护以及如何确保Android安全?
- chrome开启touch屏幕点击事件
- Redhat 5.1 install PHP 5.3.6