刚开始做java开发,用博客记录一些知识,做以积累。这篇文章大部分都是翻译的英文资料,英语一般,翻译的有点蹩脚,外加自己的少部分理解。

原英文资料:Domain-Driven Design with Onion Architecture

国外一位开发者 Wade Waldron结合洋葱架构使用了领域驱动设计后,代码质量得到显著的提高,并且可读性、可理解性和易于维护性也都大大加强。

洋葱架构有时候也被叫做“端口和适配器架构构”或者“六边形架构”。如图所示洋葱架构共有四层。

Core是一个不涉及任何领域或者技术的构造快,它包含着像list、case类、actors等这种通用构造快,但绝不能包括技术概念,比如:REST、数据库等。

Domain存放着处理业务逻辑的类和方法。这些类和方法都是按照领域通用语言进行命名的。通过API可以控制domian并且所有的业务逻辑放在domian,这样使整个应用变的可移植,所有的的技术点都能被追踪,不会丢掉任何业务逻辑。

API层是domain的入口,使用domain中的术语和对象。wade认为API应该只公开不可变对象,以防止用户通过公开的对象获取底层的domain的访问权限,从而操纵domian.wade经常从API开始写程序,一个方法作为一个骨架,并且对应这一个高层次应用的测试吗,之后添加逻辑是特使通过从而驱动domain的实现。

Infrastructure是最外层,包含着各种技术的适配器,例如:数据库、用户接口和额外的服务。他可以访问所有的内部层但大多数访问都必须通过API实现。但也有例外的情况,比如在Infrastructure实现domian定义的接口。

依赖是一个非常重要的概念,外部层能够看见内部层,但内部层对它的外部层却一无所知。

用洋葱架构实现领域驱动设计相关推荐

  1. 如何使用ABP框架(2)三层架构与领域驱动设计的对比

    本文来自长沙.NET技术社区,原创:邹溪源.全文共有8500字,读完需耗时10分钟. 题图来自@pixabay 简述 上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项 ...

  2. c/s三层结构信息系统的三个层次_如何使用ABP框架(2)三层架构与领域驱动设计的对比...

    本文来自长沙.NET技术社区,原创:邹溪源.全文共有8500字,读完需耗时10分钟. 题图来自@pixabay 简述 上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项 ...

  3. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)

    三层架构 严格分层架构模式的特点是上层只能访问相邻的下层,其他层次间的调用都不允许.三层架构就是一种严格分层模式,它把职责划分为界面展示.业务逻辑.数据访问三层,还有一个业务实体,前面三层都要依赖它, ...

  4. 微服务架构与领域驱动设计应用实践

    本篇文章一共分为三个部分,分别是微服务架构的演进过程.具体实践微服务的应用技术和领域驱动设计的意识转变.微服务架构已经渗透到互联网应用的方方面面,而领域驱动设计也逐渐被业界所接收. 微服务架构几乎都是 ...

  5. 如何使用ABP进行软件开发(2) 领域驱动设计和三层架构的对比

    简述 上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项目中涉及到的知识点,例如DTO,应用服务层,整洁架构,领域对象(如实体,聚合,值对象)等. 笔者也曾经提到,AB ...

  6. 结合领域驱动设计的SOA分布式软件架构

    引言 本文主要是参考Martion Fowler所著的<企业应用架构模式>与Eric Evans所著的<领域驱动设计>这两本泰山之作,加上本人在近年实际的工作过程中开发SOA系 ...

  7. 领域驱动设计,让程序员心中有码(二)

    引子,软件工程没有银弹    上一篇博文领域驱动设计,让程序员心中有码,抛出了一个问题,领域驱动设计真的是万能的良方吗?对于这个问题,大家的答案无疑是一致的,作为一种非常受软件行业欢迎的软件思想,领域 ...

  8. ddd领域驱动设计_领域驱动设计(DDD)理论启示

    过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少,个 ...

  9. 京东研发团队 - 领域驱动设计(DDD)实践

    过去几年,通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少, ...

最新文章

  1. Spring security防止跨站请求伪造(CSRF防护)
  2. Infopath重复表分页(原创)
  3. Javascript刷新全集
  4. C语言课程设计——学生学籍管理系统
  5. oracle如何修改列为空,Oracle 如何修改列不为空的时候的数据类型
  6. Cell|严景华/齐建勋首次发现新冠病毒进入细胞的详细分子细节
  7. Python Imaging Library: ImageStat Module(图像统计模块)
  8. 从inceptionv1走向xception小结
  9. 摄影基础知识——曝光和测光
  10. Efficient polynomial commitment schemes for multiple points and polynomials学习笔记
  11. 制作一份简单的网络地图(世博地图的配准和切割)
  12. 大疆2019届秋招笔试--测试工程师
  13. 单点故障的解决方案:高性能集群
  14. python get函数用法_详解python中get函数的用法(附代码)
  15. 【OpenCV】人脸检测和识别
  16. 手机只是前菜,YunOS为何还要瞄准“家里、车里、路上和娱乐”?
  17. 了解RS-232、RS-485串口通信协议
  18. Apache Torque连接多个数据库及其使用
  19. 标自然段的序号格式_怎么教孩子标自然段
  20. 供应链金融(四):保理业务中的风控手段

热门文章

  1. HTTP协议状态(sc-status)码的含义
  2. Hadoop修改SSH端口号
  3. 嵌入式Linux应用开发学习路线--自用
  4. 计算任意多边形的面积(Android)
  5. ADSL(PPPOE)接入指南
  6. Python3中的round函数(四舍六入五成偶)
  7. 小学英语教学与计算机结合论文,浅谈小学英语语音教学与信息技术之结合
  8. uniapp项目在HBuilder编辑器打包成H5项目的方法
  9. 学习从USGS中下载真实世界高度图并导入Houdini
  10. php使用easy ui combobox级联,Easy UI中combobox利用拼音进行筛选