
软件架构设计指南
文章平均质量分 82
此专栏主要介绍各类软件及复杂软件系统的设计方法和实践经验总结。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
MVC框架详解
模型是应用程序的核心部分,负责管理数据和业务逻辑。它直接与数据库交互,检索数据并处理前端的命令。MVC三层架构在软件开发中提供了强大的设计模式,帮助开发者通过分离关注点来组织代码,提高了应用的可维护性和扩展性。fr=ge_ala。原创 2017-07-30 21:37:20 · 7234 阅读 · 0 评论 -
RPC简析
RPC简介:RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务原创 2017-03-31 12:33:11 · 485 阅读 · 0 评论 -
UML建模详解(9)—Rose将C++代码自动生成UML类图详解
一.类图(class diagram)即 c++ 中的 class:聚合(Aggregation)即我们c++中的引用:表现为 class 头文件中的一个或多个指针成员。组合(Composition)即 c++中的成员对象:表现为class头文件中的一个或多个对象成员。(也可以表现为指针成员,但需要在类中实例化此对象)。泛化(Generalization)即继承原创 2016-09-18 12:29:51 · 15081 阅读 · 0 评论 -
UML建模详解(8)—Rose系统部署图绘制总结
部署图:部署图用来描述系统硬件的物理拓扑结构以及在此结构上执行的软构件。部署图也称配置图,实施图。常常用于帮助理解分布式系统。部署图由体系结构设计师,网络工程师,系统工程师等描述。UML表示:用立方体表示加关键字>以金融终端为例,Rational Rose系统部署简图如下:原创 2016-08-14 21:37:50 · 12586 阅读 · 0 评论 -
UML建模详解(7)—Rose时序图绘制总结
使用Rose创建序列图案例分析1. 需求分析我们可以通过更加具体的描述来确定工作流程,基本工作流程如下: (1)客户希望通过系统查询某名学生的学科成绩。 (2)客户通过用户界面写入自己的账户信息。 (3)用户界面根据客户的ID号向数据库访问层请求客户信息。 (4)数据库访问层根据客户的ID加载客户信息。 (5)数据库访问层根据客户信息和原创 2016-08-11 09:18:00 · 9998 阅读 · 1 评论 -
UML建模详解(6)—Rose类图绘制总结
一.使用Rose创建类图在了解了类图中的各种概念后,让我们来学习如何使用Rational Rose 2007创建类图以及类图中的各种模型元素。1.1 创建类在类图的工具栏中,可以使用的工具按钮如表7-8所示,该表中包含了所有Rational Rose 2007默认显示的UML模型元素。我们可以根据这些默认显示的按钮创建相关的模型。表1类图的工具栏中的图标:1. 创原创 2016-08-11 09:12:33 · 37881 阅读 · 1 评论 -
UML建模详解(5)—类图组成构建详解
1. 类图的组成 类图(Class Diagram)是由类、接口等模型元素以及它们之间的关系组成的。类图的目的在于描述系统的构成方式,而不是系统是如何协作运行的。 类:类是面向对象系统组织结构的核心。类是对一组具有相同属性、操作、关系和语义的事物的抽象。这些事物包括了现实世界中的物理实体、商业事务、逻辑事物、应用事物和行为事物等,甚至还包括纯粹的概念性事物。根原创 2016-08-11 09:08:10 · 12182 阅读 · 0 评论 -
UML建模详解(4)—类图与对象图的对比分析
1.类图与对象图的含义类图(Class Diagram)显示了系统的静态结构,而系统的静态结构构成了系统的概念基础。系统中的各种概念都是现实应用中有意义的概念,这些概念包括真实世界中的概念、抽象的概念、实现方面的概念和计算机领域的概念。类图就是用于对系统中的各种概念进行建模,并描绘出它们之间关系的图。在大多数的 UML 模型中,我们可以将这些概念的类型概括为以下四种。(1).类:(原创 2016-08-11 09:06:00 · 4991 阅读 · 0 评论 -
UML建模详解(2)—对UML图要素和关系的认识
首先,了解下UML三大基本組成要素:(一)事物(Things):可以說是UML模型中最基本的成员,在UML中共分为四大类事物:(A)结构事物(Structural Things)(B)行为事物(Behavorial Things)(C)分组事物(Grouping Things)(D)附注事物(Annotational Things)原创 2016-08-11 09:03:08 · 1622 阅读 · 0 评论 -
组合/聚合复用原则详解--七大面向对象设计原则(7)
组合/聚合复用原则来源: 在面向对象的设计中,如果直接继承基类,会破坏封装,因为继承将基类的实现细节暴露给子类;如果基类的实现发生改变,则子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性。于是就提出了组合/聚合复用原则,也就是在实际开发设计中,尽量使用合成/聚合,不要使用类继承。即在一个新的对象里面使用一些已有的对象,使之成为新对象原创 2016-07-19 21:56:13 · 11993 阅读 · 1 评论 -
迪米特法则详解--七大面向对象设计原则(6)
迪米特法则的来源: 迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的Ian Holland提出。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。于是就提出了迪米特法则。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内原创 2016-07-19 19:07:42 · 10916 阅读 · 0 评论 -
开放-封闭原则详解--七大面向对象设计原则(5)
开闭原则来源: 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。开闭原则作用: 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化; 开闭原则可是保持原有的测试代码仍然能够正常原创 2016-07-16 07:20:22 · 1303 阅读 · 0 评论 -
接口隔离原则详解--七大面向对象设计原则(4)
接口隔离原则的来源: 类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。因为使用多个专门的接口比使用单一的总接口要好,所以便提出了接口隔离原则。接口隔离原则的目的: 将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。接口隔离原则的两种定义原创 2016-07-15 22:30:47 · 2186 阅读 · 1 评论 -
依赖倒置原则详解--七大面向对象设计原则(3)
依赖倒置原则来源: 类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单原创 2016-07-15 19:26:40 · 3333 阅读 · 0 评论 -
里氏替换原则详解--七大面向对象设计原则(2)
里氏替换原则来源: 我们都知道面向对象有三大特性:封装、继承、多态。所以我们在实际开发过程中,子类在继承父类后,根据多态的特性,可能是图一时方便,经常任意重写父类的方法,那么这种方式会大大增加代码出问题的几率。比如下面场景:类C实现了某项功能F1。现在需要对功能F1作修改扩展,将功能F1扩展为F,其中F由原有的功能F1和新功能F2组成。新功能F由类C的子类C1来完成,则子类C1在原创 2016-07-14 08:56:19 · 3073 阅读 · 3 评论 -
单一职责原则详解--七大面向对象设计原则(1)
单一职责原则来源: 定义:单一职责就是一个类负责一项职责.就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。 所谓职责,我们可以理解为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变原创 2016-07-14 08:48:40 · 2003 阅读 · 0 评论 -
优秀程序设计的18大原则
优秀程序设计的18大原则1、避免重复原则(DRY - Don’t repeat yourself)编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就很容易形成一个抽象体。2、抽象原则(Abstraction Principle)与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。原创 2016-07-11 17:07:57 · 6344 阅读 · 0 评论 -
Interpreter 模式详解--设计模式(23)
Interpreter 模式的来源: Interpreter(解释器)模式是一种特殊的设计模式,它建立一个解释器(Interpreter),对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。解释器模式属于行为模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。原创 2016-07-09 08:45:27 · 7835 阅读 · 0 评论 -
Iterator模式详解--设计模式(22)
Iterator模式来源: 迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。从定义可见,迭代器模式是为容器而生。Iterator模式作用:(1).它支持以不同的方式遍历一个聚合复杂的聚合可用多种方式进行遍历,如二叉树的遍历,可以采用前序、中序或后原创 2016-07-08 08:58:14 · 1248 阅读 · 0 评论 -
Chain of Responsibility模式详解--设计模式(21)
Chain of Responsibility模式来源: 熟悉VC/MFC的都知道,VC是“基于消息,事件驱动”,消息在VC开发中起着举足轻重的作用。在MFC中,消息是通过一个向上递交的方式进行处理,例如个WM_COMMAND消息的处理流程: 注明:有关MFC消息处理更加详细信息,请参考候捷先生的《深入浅出MFC》。 MFC提供了消息的处理的链式处理策略,原创 2016-07-08 08:43:19 · 952 阅读 · 0 评论 -
Visitor模式详解--设计模式(20)
Visitor模式来源:Visitor模式作用:Visitor模式UML结构图如图1所示: Visitor模式来源:Visitor模式来源:原创 2016-07-07 08:40:36 · 6492 阅读 · 0 评论 -
Command模式详解--设计模式(19)
Memento模式来源: Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的ConcreteCommand类中(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间的解耦。Memento模式作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可原创 2016-07-06 08:58:20 · 7321 阅读 · 0 评论 -
Mediator模式详解--设计模式(18)
Mediator模式来源:原创 2016-07-06 08:42:48 · 1007 阅读 · 0 评论 -
中小型网站架构分析和优化
以上网站架构广泛运用中大型网站中,本文从架构每一层分析所用主流技术和解决手段,有助于初入网站运维朋友们,进一步对网站架构认识,从而自己形成一套架构概念。第一层:CDN国内网络分布主要南电信北联通,造成跨地区访问延迟大问题,对于有一定访问量网站来说,增加CDN(内容分发网络)层可有效改善此现象,也是网站加 速的最好选择。CDN把网站页面缓存到全国分布的节点上,用户访问时从最近的机房获转载 2016-07-05 09:30:48 · 708 阅读 · 0 评论 -
Memento模式详解--设计模式(17)
Memento模式来源: 我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利:)),我们对一些关键性的操作肯定需要提供诸如撤销(Undo)的操作。那这个后悔药就是Memento模式提供的。Memento模式作用: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态原创 2016-07-02 08:48:07 · 1123 阅读 · 0 评论 -
Observer模式详解--设计模式(16)
Observer模式来源: Observer模式应该可以说是应用最多、影响最广的模式之一。 因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。在MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构(有一个从设计模式(Observer模原创 2016-07-02 08:47:42 · 3166 阅读 · 0 评论 -
C++状态模式详解--设计模式(15)
State模式来源: 每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State)。最简单的一个生活中的例子就是:地铁入口处,如果你放入正确的地铁票,门就会打开让你通过。在出口处也是验票,如果正确你就可以ok,否则就不让你通过(如果你动作野蛮,或许会有报警(Alarm))。 有限状态自动机(FSM)也是一个典型的状态不同,...原创 2016-07-01 08:51:21 · 9794 阅读 · 4 评论 -
C++策略模式详解--设计模式(14)
Strategy模式来源: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方...原创 2016-07-01 08:51:02 · 1301 阅读 · 0 评论 -
C++模板方法模式详解--设计模式(13)
Template模式来源: 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。Template模式作用: Template模式又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类...原创 2016-06-30 08:57:37 · 2440 阅读 · 2 评论 -
C++代理模式详解--设计模式(12)
Proxy模式的产生原因: 在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 当由于某些特定的需要调用的对象在另外一台机器上,需要跨越网络才能访问,在没有WebService的情况下我们需要直接coding去处理网络连接、处理打包、解包等等非常复杂的步骤,而WebService的出现帮我们解决了其中的一些问题简化客户...原创 2016-06-30 08:57:19 · 1575 阅读 · 1 评论 -
C++外观模式详解--设计模式(11)
Facade模式产生原因: 老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种策略:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。这在某种意义上与Adapter及Proxy有类似之处,但是,Proxy(代理)注重在为Clie...原创 2016-06-29 08:57:54 · 2650 阅读 · 0 评论 -
C++亨元模式详解--设计模式(10)
Flyweight模式产生原因: 在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000次,而实际上我们可以让这...原创 2016-06-29 08:47:50 · 2799 阅读 · 0 评论 -
C++组合模式详解--设计模式(9)
Composite模式产生原因: 在开发中,我们经常可能要递归构建树状的组合结构,Composite模式则提供了很好的解决方案。Composite模式作用: 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。Composite模式典型的UML结构图如图1所示: 在Com...原创 2016-06-29 08:45:52 · 1539 阅读 · 0 评论 -
C++装饰模式详解--设计模式(8)
Decorator装饰模式产生原因: 在OO设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。Decorator装饰模式作用: Decorato...原创 2016-06-28 11:12:03 · 1110 阅读 · 0 评论 -
C++桥接模式详解--设计模式(7)
Bridge模式的产生原因: 总结面向对象实际上就两句话:一是松耦合(Coupling),二是高内聚(Cohesion)。面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling)。然而这也是面向对象设计过程中最为难把握的部分,大家肯定在OO系统的开发过程中遇到这样的问题:(1).客户给了你一个需求,于是使用一个类来实现...原创 2016-06-27 10:35:42 · 4738 阅读 · 0 评论 -
C++创建者模式详解--设计模式(6)
Prototype模式来源: 关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(CopyConstructor)曾经是很多程序员的噩梦,浅层拷贝和深层拷贝...原创 2016-06-26 12:10:19 · 1558 阅读 · 0 评论 -
C++建造者模式详解--设计模式(5)
Builder模式来源: 生活中有着很多的Builder的例子,个人觉得大学生活就是一个Builder模式的最好体验:要完成大学教育,一般将大学教育过程分成4个学期进行,因此没有学习可以看作是构建完整大学教育的一个部分构建过程,每个人经过这4年的(4个阶段)构建过程得到的最后的结果不一样,因为可能在四个阶段的构建中引入了很多的参数(每个人的机会和际遇不完全相同)。...原创 2016-06-24 16:03:30 · 2289 阅读 · 0 评论 -
C++适配器模式详解--设计模式(4)
Adapter模式来源: 在实际应用中,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。Adapter模式作用: Adapter设计模式主要目的组合两个不...原创 2016-06-20 13:29:05 · 1166 阅读 · 0 评论 -
C++抽象工厂模式详解--设计模式(3)
Abstract Factory模式来源: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色...原创 2016-06-18 16:39:27 · 2247 阅读 · 0 评论 -
C++简单工厂模式详解--设计模式(2)
一、简单工厂模式: 简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。客户端唯一需要知道的具体子类就是工厂子类。除了这点,基本是达到了依赖倒转原则的要求。 假如,我们不用工厂类,只用CreateOperate和它的子...原创 2016-06-13 08:55:53 · 936 阅读 · 0 评论