框架设计
文章平均质量分 78
燕山暮雪
人生在世,唯篮球和代码不可辜负
展开
-
软件架构设计分层模型和构图思考(有史以来最全架构图)
在采用SOA架构进行开发的时候,整体业务系统拆分为4个组件,10类服务域,5类流程,那么在构建的时候重点就是将上述组件,服务域和流程类体现出来。三层架构本身也和一个业务功能实现的完整对应,在数据访问层处理数据获取和持久化操作,在业务逻辑层对业务规则进行处理,在界面展现层进行相应的前端展现和用户交互。集成是配合分解完成的动作,最终分解完成的各个组件或子系统,通过合适的接口设计,最终还能够集成为一个完整的整体,分解仅仅是加速开发和降低问题复杂度,如果分解后的内容无法集成在一起,那么分解就没有任何意义。转载 2023-02-22 11:30:20 · 28745 阅读 · 1 评论 -
全面认识包图,组件图,部署图
命名空间,文件夹称为包但在uml中包是1.表达体系结构,2.就是针对类(业务实体类,控制管理类)的划分主要作用就是对类的逻辑划分。与命名空间概念类似。uml2.0后包中只建议包含类或其他的包。同级包名不能冲突use import直接将包引进了进来,use再设计期使用,import在实现时使用。是全部引入。access并不引入包,只是部分引入。整体划分,体系结构充分采用重用构建体系。分离法用的最多。...原创 2022-05-20 14:04:17 · 1676 阅读 · 0 评论 -
架构师必须要知道的几个开发期质量属性
易理解性(Understandability)。尤指设计被开发人员理解的难易程度。可扩展性(Extensibility)。可扩展性是指为适应新需求或需求的变化为软件增加功能的能力。我们在实际工作中,经常将可扩展性称为灵活性。可重用性(Reusability)。可重用性是指重用软件系统或其一部分能力的难易程度。可测试性(Testability)。可测试性是指对软件测试以证明其满足需求规约的难易程度。在实际工作中主要指进行单元测试、插桩测试等的难易程度。可维护性(Maintain原创 2021-11-08 16:55:04 · 639 阅读 · 0 评论 -
架构师必须要知道的几个运行期质量属性
安全性(Security)。安全性指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。高安全性意味着“同时兼顾”,这是因为有些攻击的目的是使软件系统拒绝向合法用户提供服务,而不是非法访问。易用性(Usability)。不少文献也称之为可用性,但为了避免和持续可用性(Availability)混淆,本书采用非常流行的“易用性”的叫法。指软件系统易于使用的程度持续可用性(Availability)。不少文献也称之为可用性,但为了避免和易用性(Usability)混淆,本书采用“持续可用性”的原创 2021-11-08 16:50:51 · 601 阅读 · 0 评论 -
运用五视图方法进行软件架构设计--实战三
1. 什么是架构设计? 架构设计就是一个系统的草图。 软件架构就是对软件从整体到部分的描述,从开发到运行再到后期扩展的描述,从性能和安全可靠性进行描述。2. 架构设计为了解决什么问题? 解决开发之初,也就是逻辑设计阶段的问题 —— 系统如何开发,如:整个系统融合为一个系统开发,还是从业务角度将系统拆分为几个独立的子系统。 解决即将进入开发时的问题 —— 数据是如何持久化的、数据库如何选型、非数据库文件的存储格式是怎样等像这样的存储方案的确定。 解决开发过程中的...原创 2021-10-25 23:52:53 · 314 阅读 · 0 评论 -
运用五视图方法进行软件架构设计--实战二
一、架构五视图是什么1、逻辑架构 逻辑架构关注的是功能,包含用户直接可见的功能,还有系统中隐含的功能。或者更加通俗来描述,逻辑架构更偏向我们日常所理解的“分层”,把一个项目分为“表示层、业务逻辑层、数据访问层”这样经典的“三层架构”。2、开发架构 开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间件等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。3、运行原创 2021-10-25 23:21:41 · 1343 阅读 · 0 评论 -
运用五视图方法进行软件架构设计--实战一
摘要软件架构是从宏观上说明一套软件系统的组成与特性,包括软件可以提供什么样的功能,软件代码的层次结构,软件的部署与网络结构,软件的数据结构,软件的性能特征。上面说到的几个方面就可以用五视图法来表示。五视图法做架构设计的步骤是逻辑架构->数据架构->开发架构->运行架构->物理架构。一、五视图介绍(一)逻辑架构设计着重考虑功能需求系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。逻辑架构关注的功能,不仅包括用户可见的功能,还应当包括...原创 2021-10-25 20:59:29 · 3016 阅读 · 0 评论 -
架构设计中的方法学
架构设计是一种权衡(trade-off)。一个问题总是有多种的解决方案。而我们要确定唯一的架构设计的解决方案,就意味着我们要在不同的矛盾体之间做出一个权衡。我们在设计的过程总是可以看到很多的矛盾体:开放和整合,一致性和特殊化,稳定性和延展性等等。任何一对矛盾体都源于我们对软件的不同期望。可是,要满足我们希望软件稳定运行的要求,就必然会影响我们对软件易于扩展的期望。我们希望软件简单明了,却增加了我们设计的复杂度。没有一个软件能够满足所有的要求,因为这些要求之间带有天生的互斥性。而我们评价架构设计的好坏的依据,原创 2021-10-22 15:34:39 · 696 阅读 · 0 评论 -
系统架构设计师如何进行架构设计
9.1 软件架构概述9.1.1 软件架构的定义定义1:软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构有软件元素、元素的外部可见属性及他们之间的关系组成。定义2:软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。定义3:软件架构是指一个系统的基础组织,它具体体现在:系统的构件,构建之间、构件和环境之间的关系,以及知道其设计和烟花的原则上。为更好的理解软件架构的定义,特作如下说明:架转载 2021-10-22 14:45:50 · 4289 阅读 · 0 评论 -
最经典的两种软件架构模式
什么是架构模式?根据维基百科中的定义:An architecture pattern is a general,reusable solution to a commonly occurring problem in software architecture within a given context.那么,在软件研发领域,最经典的两种架构设计模式,即微内核架构模式和 Pipe-Filter 架构模式,下面我们就来聊一聊这两种架构模式。一、Pipe-Filter 架构模式Pipe原创 2021-10-22 11:02:43 · 916 阅读 · 0 评论 -
如何编写一份合格的架构设计文档
在软件开发中,作为一名工程师,经常会遇到需要技术设计文档的场景。比如项目验收时,需要技术设计文档作为验收材料;进行岗位晋升时,需要技术设计文档作为晋升材料;解决遗留系统问题时,如果有设计文档会使问题得到更快速的解决 ......总之,作为一位软件工程师,会编写一份合格的架构设计文档是必备技能。今天,根据最近的学习,对如何编写架构设计文档做一个简单的总结。主要从三个方面进行介绍: 谁需要编写架构设计文档 为什么需要架构设计文档 架构设计文档应该包含哪些内容 谁需要原创 2021-10-22 10:08:32 · 9717 阅读 · 1 评论 -
软件概要设计如何写(文档恐惧症的程序猿必读)
一般说来,需求分析属于软件定义方面而概要设计、详细设计属于软件开发的阶段按照传统软件工程的软件过程,区别如下:1.需求分析--产生 软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白,开发人员也可据此进行下面的工作(概要设计)2.概要设计--产生 软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。3.详细设计--产生 软件详细设计说明书,对概要设计的进一步细化,一般由...原创 2021-10-21 20:20:15 · 40398 阅读 · 4 评论 -
谷歌软件工程师是怎样写设计文档的?
谷歌软件工程文化的主要元素之一就是通过设计文档定义软件设计。在开始项目编码工作之前,软件系统或应用程序的作者会创建这些相对非正式的文档。设计文档记录了高级实现策略和关键设计决策,并且重点记录了这些决策之间的权衡考虑。作为软件工程师,我们的工作本质上不是生产代码,而是解决问题。非结构化文本,类似设计文档的形式,也许是在项目早期解决问题比较好的工具,因为它易于理解、更简洁,且以比代码更高的层次来沟通问题和方案。除软件设计的原始文档外,设计文档还实现了软件开发周期中的如下功能:在早期发现设计问题,而那原创 2021-10-21 16:27:32 · 194 阅读 · 0 评论 -
如何写好一份软件开发设计文档
设计文档- 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完善你的想法,同时在软件交付和交接的过程中,能让其他人更通俗易懂的了解之前的设计目的和思路目录:一、什么是软件开发设计文档 二、为什么要写软件开发设计文档 三、写软件开发设计文档需要注意些什么 四、怎么写好一份开发设计文档一、什么是软件开发设计文档设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保.原创 2021-10-21 16:08:30 · 51976 阅读 · 4 评论 -
软件设计的不同模型:瀑布式、快速原型法、迭代式(敏捷)
自从1968年提出“软件工程”概念以来,软件开发领域对于借鉴传统工程的原则、方法,以提高质量、降低成本的探索就从未停止过。而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等。瀑布式模型是由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试 (确认), 集成,和维护顺序的进行。快速原型法 快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行..原创 2021-10-21 15:03:49 · 3023 阅读 · 0 评论 -
从哲学的角度来看面向对象中的主体客体思维
01 为什么面向对象难以理解?面向对象是应用软件设计比较好的方式,可以指导用计算机解决现实中的业务问题,因此是软件开发中的一种主流方式。不过,用好面向对象则比较困难,即使有数年经验的软件工程师也难说能很好驾驭。大多数人往往是照猫画虎,没有理解软件开发的 “骨相”。背后的原因为面向对象是对现实业务的抽象,需要使用者对现实有深入的理解,于是面向对象带有一定的哲学认识论的色彩。实际上,现代英语、现代法律、面向对象编程都和近代哲学有关,而近代哲学被称为“主体性哲学”,“主体” 概念和主客体关系是非常原创 2021-09-14 10:53:23 · 679 阅读 · 0 评论 -
一篇文章讲明白领域驱动建模(DDD)
何为DDDDDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从。有的小伙伴觉得DDD太虚了,具体在我们进行业务代码编写落地中DDD主要解决什么问题呢?总结起来说主要目的有两点:建立业务术语,统一PM/RD/QA需求沟通术语。 梳理业务边界,将业务领域逻辑内聚。搞定DDD要解决的问题如何进行领域建模 如何识别Bounded Context 如何在战术层面寻原创 2021-09-09 21:53:11 · 3071 阅读 · 0 评论 -
SOLID 设计原则,代码示例(show me the code)
认识 SOLID 原则无论是软件系统设计,还是代码实现,遵循有效和明确的设计原则,都利于系统软件灵活可靠,安全快速的落地,更重要的是能灵活地应对需求,简化系统扩展和维护,避免无效的加班。本文主要讨论面向对象软件开发中最流行的设计原则- SOLID,它是五个设计原则为了方便记忆而组成的首字母缩写:单一职责原则 开放/封闭原则 里式替换原则 接口隔离原则 依赖倒置原则S:单一职责原则 (SRP)基本概念单一职责原则 (SRP) 英文全称为 Single Responsibi..原创 2021-01-04 16:30:30 · 738 阅读 · 1 评论 -
领域驱动架构(DDD)建模中的模型到底是什么?
1. 什么是领域模型在理解领域模型之前,我们先思考一下软件开发的本质是什么。从本质上来说,软件开发过程就是问题空间到解决方案空间的一个映射转化,如图1所示。图1 软件开发的本质在问题空间中,我们主要是找出某个业务面临的挑战及其相关需求场景用例分析;而在解决方案空间中,则通过具体的技术工具手段来进行设计实现。就软件系统来说,“问题空间”就是系统要解决的“领域问题”。因此,也可以简单理解为一个领域就对应一个问题空间,是一个特定范围边界内的业务需求的总和。“领域模型”就是“解决方案空间”,原创 2020-12-27 00:34:51 · 1128 阅读 · 0 评论 -
10 种常用的软件架构模式
有没有想过如何设计大型企业级系统? 在开始开发主要软件之前,我们必须选择一个合适的架构来为我们提供所需的功能和质量等属性。 因此,在将它们应用于我们的设计之前,我们应该了解不同的架构体系。什么是架构模式?下面引用自维基百科架构模式是在特定环境下软件体系结构中常见问题的通用可重用解决方案。架构模式类似于软件设计模式,但它属于更广泛的领域。在本文中,我将简要地解释以下10种常见的架构模式及其用法,优缺点。分层模式 客户端-服务器模式(CS模式) 主从模式 管道过滤器模式..原创 2020-12-14 11:26:00 · 846 阅读 · 0 评论 -
架构分层:我们为什么一定要这么做?
在系统从 0 到 1 的阶段,为了让系统快速上线,我们通常是不考虑分层的。 但是随着业务的越来越复杂,大量的代码纠缠在一起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。这时,对系统进行分层就会被提上日程,那么我们要如何对架构进行分层?架构分层和高并发架构设计又有什么关系呢?本节课,我将带你寻找答案。什么是分层架构软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成 N 个层次,每个层次有独立的职责,多个层次协同提供完整的功能。我们在刚刚成为程原创 2020-12-11 18:28:20 · 270 阅读 · 0 评论 -
DDD 领域驱动模型设计中的分层架构,清晰好文
在分解复杂的软件系统时,分层是我们最常用的手段之一。然而,在领域驱动设计中,层次和包的划分看起来与我们的结构又有一定区别,本文主要讨论DDD中的分层架构及每层的意义,以及与传统的三层架构的区别。1. 为什么要分层软件设计中分层的设计随处可见,但是分层能带来什么好处呢?或者说,我们为什么要考虑分层架构呢?由于现实世界的复杂性,分层可以提供一个相对高层的视角来分解和简化我们的问题,此外分层也可带来可测试、可维护性、灵活性、可扩展性等方面的好处。简化复杂性,关注点分离,结构清晰; 降低耦合度,隔原创 2020-12-04 17:32:54 · 1660 阅读 · 1 评论 -
复杂性应对之道,抽象,程序员必修技能
写本文的原因是,抽象是软件设计中最重要的概念。但抽象这个概念本身又很抽象,我们有必要花一些时间深入理解抽象、抽象的层次性,以及不遗余力的不断提升我们抽象能力。抽象的力量没有抽象思维,就没有人类光辉灿烂的现代文明。原始人看到一片树林,不会给它们一个名字,比如叫“松树”。他们会给每一棵树取一个独特的名字,可能叫“silisiba”。原始人只知道某棵具体的树。随着意识水平的发展,人类开始有意识地将具有相同特征的事物归并到一起,从“silisiba”到“松树”——到“树木”——到“植物”——到“物质转载 2020-12-04 16:25:44 · 552 阅读 · 1 评论 -
IaaS,PaaS,SaaS 的区别
越来越多的软件,开始采用云服务。云服务只是一个统称,可以分成三大类。IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Platform-as-a-service SaaS:软件服务,Software-as-a-service它们有什么区别呢?IBM 的软件架构师 Albert Barron 曾经使用披萨作为比喻,解释这个问题。David Ng 进一步引申,让它变得更准确易懂。请设想你是一个餐饮业者,打算做披萨生意。你可原创 2020-12-04 15:10:31 · 171 阅读 · 0 评论 -
从概念到落地,中台可以解决哪些问题?怎么做?
导读:最近一直很火的中台概念,应该怎样落地?中台可以帮企业解决哪些问题?为什么中台对企业来说是一个很核心的战略意义?云徙科技消费品事业部副总经理、新书《中台战略》作者吴超在近期的分享《企业与中台战略》中给出了答案。本文整理自吴超老师在第26届北京国际图书博览会(BIBF)的演讲,华章科技经主办方授权首发。我们对中台的理解进入到一个深水区,因为从我们的认知来说,我们做了大概30多个头部客户,像宝洁、联想、茅台。对于中台有自己的一些看法,今天跟大家分享一下。可能很多人都会把中台理解为是一个技术上.原创 2020-12-04 11:27:16 · 1484 阅读 · 0 评论 -
软件架构设计三步迭代法(软件架构小白读有一种豁然开朗的赶脚)
软件架构设计需要考虑的东西很多,最忌讳的是将静态的结构、动态的行为、质量的优化混为一谈,导致思维混乱,典型错误如下:一、三步迭代法概述三步迭代法是指架构设计应从结构、行为和优化三个角度,采用由外而内、逐步求精的方法反复淬炼解决方案架构,建议初学者按以下步骤进行:步骤一:基于三个维度(业务的合成分解维、技术的职责划分维、应用的通专维),初步切分系统(结构思维模式)步骤二:基于应用场景,串联参于的功能块(行为思维模式)步骤三:通过质疑(性能等质量场景),优化架构设计(优化思维模式)原创 2020-10-23 15:32:51 · 1844 阅读 · 1 评论 -
UML统一建模语言,由小白到大神的跃迁之路
面向对象编程面向对象( Object Oriented,简称 OO)方法将世界看作一个个相互独立的对象,相互之间并无因果关系,它们平时是 “鸡犬之声相闻,老死不相往来” 的。只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。这些交互构成了这个生动世界的一个 “过程”。在没有外力的情况下,对象则保持着 “静止” 的状态。对象提供了一种处理复杂问题的方式,有了对象,我们能够通过提升抽象级别来构建更大、更复杂的系统。 之所以面向对象方法会兴起,是因为这种认识论能够帮助我们构造更为复杂原创 2020-10-23 10:02:04 · 757 阅读 · 0 评论 -
EA建模工具,介绍常用的UML图
[导读] 作为程序猿都最好掌握的一门语言,那就是UML(Unified Modeling Language),统一建模语言(UML)是软件工程领域中一种通用的开发建模语言,旨在提供一种可视化系统设计的标准方法。是开发人员、系统设计人员交流的有效工具。今天来分享一下UML的一些体会,如有错误请帮忙指正。注:UML工具有很多,本文描述的基于Enterprise Architect。UML时间进化线:说到UML不得不提的三位大神,Grady Booch、Jacobson、James Rumbaug转载 2020-09-11 18:33:25 · 4023 阅读 · 0 评论 -
浅谈UML中常用的几种图——组件图
在了解构件图之前,让我们先来熟悉一下什么是构件。构件导图构件 是系统中遵从同一组接口且提供其实现的物理的、可替换的部分。每个构件能实现一定的功能,为其他构件提供使用接口,方便软件的复用。构件举例:-对象库、可执行体、com+.企业级java Bean 构件类型:源代码构件:源代码文件二进制构件:目标码文件,静态链接库,动态链接库可执行构件:可执行程序数据文件或文档 构件和类的区别类 ...转载 2020-09-09 17:27:58 · 412 阅读 · 0 评论 -
浅谈UML中常用的几种图——鲁棒图
什么是鲁棒图鲁棒图包含 3 种元素(如图 8-2 所示),它们分别是边界对象、控制对象、实体对象: 边界对象对模拟外部环境和未来系统之间的交互进行建模。边界对象负责接收外部输入,处理内部内容的解释,并表达或传递相应的结果。 控制对象对行为进行封装,描述用例中事件流的控制行为。 实体对象对信息进行描述,它往往来自领域概念,和领域模型中的对象有良好的对应关系。 鲁棒图和MVC的比较? 1. View仅涵盖了“用户界面”元素的抽象,而鲁棒图的边界对象全面涵盖了三种交..原创 2020-09-04 13:55:01 · 15508 阅读 · 5 评论 -
DDD领域驱动设计的理解
从遇到问题开始当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的。再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备。但是最近由于各种原因,导致服务...转载 2019-05-08 17:07:06 · 228 阅读 · 0 评论 -
浅谈UML中常用的几种图——类图
在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1.泛化(Generalization)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的...转载 2019-04-29 11:32:07 · 555 阅读 · 0 评论 -
浅谈UML中常用的几种图——用例图
1.UML简介 统一建模语言(Unified Modeling Language,UML)又称标准建模语言,是始于1997年的一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 *注:OMG, Object Management Group 对象管理组织2.UML常见图分类 UML从考...原创 2019-04-28 11:08:02 · 587 阅读 · 0 评论 -
OpenMP 中的线程任务调度(负载均衡)
OpenMP中任务调度主要针对并行的for循环,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代,则可能会造成各个线程计算负载的不平衡,影响程序的整体性能。如下面的代码中,如果每个线程执行的任务数量平均分配,有的线程会结束早,有的线程结束晚: 1 #include<stdio.h> 2 #include<omp.h> 3 4 int main...转载 2018-04-08 20:00:41 · 3183 阅读 · 0 评论 -
连设计图都不会画,你还想做“系统架构师”?
什么是系统架构师?系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清单。架构师在软件开发的整个过程中起着很重要的作用。如何才能成为系统架构师?首先必须具有丰富的软件设计与开发经验,这有助于理解并解释所进行的设计是如何映射到实现中去。其次要具有领导能力与团队...转载 2018-03-07 15:10:44 · 388 阅读 · 0 评论