如何正确地理解应用架构并开发(下)

简介: 如何正确地理解应用架构并开发(下)

如何正确地理解应用架构并开发(中):https://developer.aliyun.com/article/1443482



常见问题


 API层


API包一般放什么内容?

  1. 对外暴露接口:直接代理外界需要访问的领域服务。
  2. Facade模式:对Domain层的能力,基于易用性的目的,进行一定的重组;比如多个领域服务合一个API、一个领域服务拆多个API
  3. 对于一些通用的判断方法可以放在里面
  4. 通用的异常类型
  5. 通用的枚举


 Application层


Application层即API的设计要划分领域吗?

  1. 需要划分领域,细节可能和Domain层存在一些差异,由于属于顶层服务


API和Domain Service都是接口,它们的区别是什么?

  1. API是暴露给外部系统,希望外部系统感知的能力;领域服务的能力仅暴露在系统内部。
  2. API暴露的能力一般比领域服务少,因为领域服务还要给JobProcessor、MessageListener或其它领域服务提供服务。


分层原则(也是任何分层分域的一般准则)

  1. 架构解决的是变化的问题。根据子系统变化的快慢,对子系统进行分层,从而隔离变化。例如上面的基础域变化慢,业务域变化快,分开。


 Domain


为什么Domain层和Infrastructure层要依赖倒置?

  1. 通过依赖倒置,消除Domain层的外部依赖,完全隔离外部变化,实现自洽。


Repository和防腐层(Anti-Corruption)是什么?

  1. Repository就是DDD里的领域仓库,负责领域实体的生命周期管理(可以简单理解为增删改查)
  2. 防腐层(Anti-Corruption)是为了隔离变化而抽象出来的概念,负责和外部系统打交道。



Repository和防腐层(Anti-Corruption)的区别是什么?

  1. 从代码结构上来看是一样的。如果按设计模式来解读,本质上都是Adaptor。其中,本领域充当Adaptor中的client角色。即Repository和防腐层(Anti-Corruption)的接口签名是基于本领域的需求而设计(而不是基于外部系统的签名来设计)。这也是为什么Repository和防腐层(Anti-Corruption)要按域来组织,而不是按外部系统来组织。
  2. 从语义上来讲,Repository偏数据,防腐层(Anti-Corruption)偏功能。这种语义区分能提升系统可维护性。


 Infrastructure


什么决定了是放Domain层还是Infrastructure层?约定:访问中间件/外部系统的,放基础设施层。领域层只放领域逻辑,从而隔离变化。
基础设施从字面上看偏基础,为什么把中间件、外部系统放这里?按照洋葱圈架构的说法,这些其实都是适配器,都应该属于外部依赖的范畴
Utils放哪里,是不是基础设施的一部分?

  1. 不建议:如果认为工具是基础设施的一部分,则Domain层甚至API层将感知Infrastructure层,破坏了依赖单向性。
  2. 建议基础工具抽到单独的二方包;业务工具放到对应的Module。

回顾下整篇文章,咱们对于应用架构的混乱问题进行了总结与归纳,并给出了一些重点需要理解的内容,希望能对大家的日常开发有一些帮助。


附录

  1. 后端开发实践系列——领域驱动设计(DDD)编码实践 - Thoughtworks洞见(地址:https://insights.thoughtworks.cn/backend-development-ddd/)
  2. 实现领域驱动设计(地址:https://book.douban.com/subject/25844633//)
  3. Cola-阿里巴巴开源应用架构(地址:https://github.com/alibaba/COLA


团队介绍

我们是淘天集团物流技术团队,服务淘天物流部及零售行业的产技团队,一直深耕在物流及供应链的数字化协同与运营领域:为零售业务提供灵活多样的经营模式管理方案及可以快速适配市场变化的经营策略数宇化管理工具;为商家提供高效低成本的物流及供应链解决方案,加快资金效率,提升协同效率;为消费者提供即时便捷的购物体验。

目录
打赏
0
2
2
0
197
分享
相关文章
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
101 13
布谷直播系统源码开发实战:从架构设计到性能优化
作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。
|
15天前
|
类似ComfyUI和Midjourney这样的文生图图生图应用的API与服务架构该怎么设计
文生图图生图应用的API与服务架构分析。或和微服务类似,但是不同。ComfyUI其 API 架构设计为我们理解此类应用提供了很好的参考模型。但距离生产级别的应用差距还有很远。
45 0
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
118 7
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
238 3
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
69 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等