码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • DDD/ABP 洋葱架构aka整洁架构


    分层架构和传统三层架构

    1、分层架构:把各个组件按照“高内聚、低耦合”的原则组织到不同的项目中。

    2、传统的经典三层架构

     三层架构的缺点:尽管有DAL data access layer,但仍然是面向数据库的思维方式;对于一些简单的、不包含业务逻辑的增删改查类操作,仍然需要BLL business logic layer进行转发;依赖关系是单向的,所以下一层中的代码不能使用上一层中的逻辑。

    整洁架构(洋葱架构)

    1、内层的部分比外层的部分更加的抽象→内层表达抽象,外层表达实现。

    2、外层的代码只能调用内层的代码,内层的代码可以通过依赖注入的形式来间接调用外层的代码。简单理解,就是你平常在应用服务实现其接口(记住:应用服务调用领域服务)。然后在别的地方各种依赖注入着用。更简单理解:Angular的依赖注入各种service,service里各种逻辑,其他ts文件也可调用这个service。

    recall之前比较难理解的ABP架构图的指向:

    结合ABP VNext来理解DDD_董厂长的博客-CSDN博客_abp vnext 多租户DDD:根据领域划分业务,领域可以无限大或者无限小,这取决于业务分析师(产品经理和技术专家)看一下DDD的分层架构,是多层的,单向的,可以跨级访问的。那么ABP框架的架构遵循了DDD的架构思想。每个文件的大概作用如下:...https://blog.csdn.net/dongnihao/article/details/123105225?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166307919616782427476180%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166307919616782427476180&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-123105225-null-null.nonecase&utm_term=DDD&spm=1018.2226.3001.4450

     

     说一下开发中这种架构的实际用处:

    首先是由于使用依赖注入,举个例子,读取邮件被解耦了,可替代,那么开发环境可以使用mock数据,等到了生产环境,再替换上去。仔细想了想,我们开发确实是这么操作的。

    对比三层架构谈洋葱架构的优点。

    • 它提供了灵活、可持续和可移植的架构。

    • 各层之间没有紧密的耦合,并且有关注点的分离。

    • 由于所有的代码都依赖于更深的层或者中心,所以提供了更好的可维护性。

    • 提高了整体代码的可测试性,因为单元测试可以为单独的层创建,而不会影响到其他的模块。

    • 框架/技术可以很容易地改变而不影响核心领域。例如,RabbitMQ 可以被 ActiveMQ 取代,SQL 可以被 MongoDB 取代。

    防腐层 ACL 

    anti corruption layer

    外部服务(短信服务、邮件服务、存储服务等)的变化会比较频繁。把这些服务定义为接口,在内层代码中我们只定义和使用接口,在外层代码中定义接口的实现。

    体现的仍然是洋葱架构的理念。

    理解一下:你平常做的任何继承接口的实现,都是在做防腐层的事情,举个例子,某一天你的验证码服务商换掉啦,只需要重新实现其对应接口。

  • 相关阅读:
    java EE初阶 —进程与线程的区别
    【node.js】使用forever/pm2
    强化学习——Q-Learning算法原理
    C++基类和派生类的内存分配,多态的实现
    HTML期末作业:基于html+css+javascript+jquery实现古诗词网页 学生网页设计作品 web前端开发技术 web课程设计 网页规划与设计
    推荐算法高级案例-通过Wide&Deep算法进行特征组合的商品推荐详细教程 代码+数据
    Spring Data JDBC结合MyBatis、MySQL 和 Thymeleaf 实现分页、排序和全字段LIKE过滤/搜索功能
    【Django学习笔记(三)】BootStrap介绍
    JavaWeb----Ajax技术
    includes问题
  • 原文地址:https://blog.csdn.net/dongnihao/article/details/126842737
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号