码农知识堂 - 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

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

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

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

  • 相关阅读:
    基于机器学习建模的 XSS 攻击防范检测
    Linux内核的安装
    详解GMM高斯混合模型EM模型
    R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型、使用anova函数进行方差分析通过p值确认指定连续变量和风险值HR之间是否存在非线性关系
    【Flutter小记10】apk 提交各大应用市场,出现armeabi与arm64 版本标识/版本号不一致无法上传审核的解决方案
    MindSpore端侧手机应用实战:AI垃圾分类应用
    【每日一题】数据流中的中位数
    14.在SpringBoot框架集成MyBatis(mapper、mapperscan、xml和dao分离)
    Android 组件逻辑漏洞漫谈
    java每日一题:接口与抽象类的区别
  • 原文地址:https://blog.csdn.net/dongnihao/article/details/126842737
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号