| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 依赖倒置如何升华架构设计 -> 正文阅读 |
|
[系统运维]依赖倒置如何升华架构设计 |
一、听说你是架构师不会自己写架构百科:系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。 你对核心架构有什么认识? 核心架构在软件领域是为软件系统提供结构、行为和属性的高级抽象结构。在不同领域不同业务,核心架构都关注抽象、业务规则分离。核心架构指导大型软件系统各个方面的设计。架构师在设计系统时,慎重选择各种依赖关系 - 基础框架,身份验证,存储;在规划业务战略、组建组员、项目周期、系统基础设施、调度资源都对核心架构有着重大影响。 那么,什么是架构? 架构建设的整体的认知包括三个部分:
二、依赖是什么?有哪些重要的具体体现?? ? ? ? ?答案似乎很简单。如果你的系统依赖某些东西来运行,那就是一个依赖。然而,这只是冰山一角。 ? ? ? ? ?更加形象的例子,动物的特征有新陈代谢,能繁殖。而要有生命力,需要氧气、水、食物等,就是说,动物依赖于氧气和水。它们之间是依赖关系,为了让软件设计人员拥有共同的交流方式,我们规定了依赖关系用虚线箭头表示。普通箭头指向被依赖的事物(例如:动物 指向氧气,指向水)。
总结:依赖关系是一种使用关系,即一个类的实现需要另一个类的协助。 表述方式:A依赖于B,A使用B 问题:如何在代码体现依赖关系,如何表达依赖?如何发现两个类(多个事物)是否存在依赖关系?在java中形成依赖关系的方式有哪些?依赖与设计原则有什么关系? 三、如何通过对依赖的认识设计业务架构呢?依赖为什么能升华架构设计? 也许你是高手,但对依赖的问题的经历记忆深刻,反复遇到的两个事件:对象创建和对象之间的交互, 它们混合在一起,这会导致紧密耦合和不必要的依赖关系,这反过来又使维护和单元测试变得痛苦。 下面,试着用一个非常简单的例子(学生、教师、课程)来解释依赖:
这个MyClass 类的问题是:
因此,每个软件设计师在设计时,都会经历测试痛苦过程,而产生对依赖的问题的经历记忆深刻。 那么, 依赖的认识已经有了,那么设计业务时候,你能从依赖 升华 设计吗? 为了深刻,可以继续思考下面的依赖的例子:
四、伟大的DIP原则是怎么指导业务架构的实施呢?DIP原则是面向对象编程中最着名的原则之一。这个原则提出有一段时间了,是?Robert C. Martin?于1996年制定了依赖性倒置原则(DIP)。它代表“?SOLID?”原则中的字母“?D?”。 Vaughn Vernon(2013)演示了如何在典型的4层架构中应用DIP: ? ? ? 为了深刻研究,继续发现: ? ? ? ?例子1:假设我们设计一套流程:先设计用户界面层,然后根据用户设计应用层,接着根据应用设计领域层,最后根据领域层设计基础设施层,并组装好整个系统依赖。这里就出现了一个“依赖”关系:该模式不指定层数,而是一个简单的规则:一层可以与其下面的任何层形成强的耦合关系,并形成简单的分层架构。从上图也明显发现,高层模块依赖底层模块,都依赖基础设施层。 ? ? ? ?例子2:假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。而这个设计的“依赖”关系体现在:汽车依赖车身,车身依赖底盘,底盘依赖轮子。 ? ? ? ?而Vaughn Vernon(2013)演示主要目标是解决分层架构的紧耦合问题。通过如图的设计,进行模块的反转,领域层是所有其他层依赖的域层。这种方法消除了与基础设施层的直接耦合。 ? ? ? 通过上图分析,基于DIP的架构的好处:
五、你能描述清楚依赖倒置吗? ? ? 问题1:你描述对依赖倒置的认识?? ? ? ?这个问题,你联系我吧。 ? ? ??问题2:依赖倒置的架构有什么缺点?? ? ? ?1.不理解原理的过程和思想就会很复杂。 ? ? ? ?2.术语模糊。 ? ? ? ?3.易受错误依赖影响。idea中依赖项理清楚、说清楚依赖关系更加复杂。 ? ? ? 4.你还会设计模式吗?你还会选择模式吗?如何选择模式? 六、如何理解依赖注入与依赖倒置的关系? ? ? ?明天更新 ? ? ?? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:31:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |