软件本质是一种逻辑实体,它通过指令和数据来指导计算机硬件执行特定的任务或操作,实现特定的功能并满足用户的需求。

架构师(技术选型,制定大方向的)不参与详细编码,负责软件系统整体架构,指导规范与标准,与各人员交流合作确保项目成功实施

软件工程过程框架定义了若干个框架活动,通常包括沟通、策划、建模、构建和部署五个主要环节。

软件设计

软件设计软件需求转化为具体的软件产品或系统的过程。软件设计是指从软件需求规格说明书出发,根据需求分析阶段确定的功能,设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。

软件设计可以被看作是“对软件将如何开发出来的一种描述

软件设计过程包含阶段:需求分析、架构设计、详细设计、编码实现、测试与维护

基本原则:

  • 模块化

将软件系统划分为若干个独立的模块,每个模块具有明确的职责和功能,便于维护和扩展。

  • 高内聚低耦合

模块内部的各个元素高度相关,模块之间的耦合度要尽量降低,以保障软件系统的灵活性和可维护性。

软件设计的过程 (重点为迭代)
迭代***

软件设计是一个迭代的过程。这里的迭代,有两层含义。

第一层含义是,针对给定的需求模型,通过多次从抽象到具体的设计过程,得出足够精细的设计模型,以供软件实现之用,见图中第一层迭代。

第二层含义是,软件需求经常发生变化或者不完整,在需求模型发生变化并更新完成后,第一层含义的设计过程再随之展开,直至获得最终的目标软件产品,见图中第二层迭代。

软件设计一般过程(前两个过程)的详细解释,包括迭代概念:

一、需求分析与定义

1.收集和理解需求:与客户或用户沟通,明确软件需要实现的功能、性能、安全等要求。

2.建立需求模型:使用需求规格说明书、用例图、活动图等工具,将需求转化为可理解、可验证的模型。

二、软件设计的初步阶段(第一次迭代
1.总体架构设计:确定软件的整体结构,包括各个模块、组件、接口等。

2. 数据结构设计:定义软件所需的数据类型、数据结构、数据库模式等。
3.接口设计:明确模块之间的交互方式,包括数据传递、消息传递等。

三、软件设计的细化阶段(多次迭代

1.模块设计:将总体架构细化为具体的模块,明确每个模块的功能、输入输出、内部逻辑等。

2. 算法设计:针对具体的模块,设计实现功能的算法和流程。

3. 界面设计:设计用户与软件交互的界面,包括布局、颜色、字体、交互方式等。

4. 测试设计:设计测试用例和测试方案,确保软件能够按照需求正确运行。

在这个阶段,软件设计需要不断地从抽象到具体,通过多次迭代,逐渐细化设计模型,直至达到可以实现的程度。

架构 + 软件体系结构概念

软件体系结构具有一定形式的结构化元素组成,包括处理构件、数据构件和连接构件处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件则把体系结构的不同部分组合连接起来。

软件体系结构设计的目标,是建立软件系统的体系结构,有时也称‘顶层架构

体系结构,有助于确保系统能够满足其利益相关人的关注点,构想、计划、构建、维护系统时,体系结构有助于处理复杂性。

领域特定的软件体系结构设计(Domain-Specific Software Architecture Design)是针对特定应用领域或行业进行的软件架构设计。

6个架构(都了解一下,深入了解分层架构***

1.单体架构(功能都集成在一个应用程序中,比较简单,适合小公司,但可维护性差难以扩展)

2.分层架构

特点:

1层次划分:将系统划分为不同的层次,如表示层、业务逻辑层和数据访问层。

2职责明确:每个层次都有自己的职责,提高了代码的可维护性和可扩展性。

优势:提高了系统的可维护性和可扩展性,使得开发人员可以更加专注于各自领域的开发工作。
劣势:虽然解决了单体架构的一些问题,但系统仍然较为庞大,难以进行细粒度的扩展和更新。

3.分布式系统与服务导向架构(多个独立服务器,松耦合,可扩展性和灵活性高,但服务器之间的通信治理复杂,需要引入中间件管理)

4.微服务架构(极小的独立服务,高内聚松耦合,可扩展和灵活性高,需要高新技术)

5.服务网格架构(在微服务之间引入基础设施层,用于处理通信、流量管理、安全认证等,透明化。可靠性和性能更好,系统更复杂了)

6.无服务器架构(把应用程序的运行管理托管给云服务提供商,开发人员无需关心部署和运维;按需付费。简化了开发过程降低了运维成本,可扩展性和灵活性提高。对云服务提供商的依赖度较高,可能面临性能瓶颈和成分超支)

软件体系结构的设计内容(理解记忆,标题记清楚

1.体系结构设计: 确定软件系统的整体架构,包括构件的划分、连接件的选择以及它们之间的组织方式。

2.模块设计:在体系结构设计的基础上,进一步细化各个构件的设计,包括内部结构和功能实现。

3.用户界面设计:设计用户与软件系统交互的界面,确保用户能够方便的使用软件系统

4.数据库设计:设计用于存储和管理软件系统所需数据的数据库结构

5.数据结构和算法设计:设计实现软件系统功能所需的数据结构和算法

多视图建模(如“4+1”视图模型)(搞清楚每个都能干嘛***

1.逻辑视图(概念视图/设计视图):关注功能,包括用户可见的功能和为实现这些功能而必须提供的辅助功能模块,描述了系统的功能需求及其之间的相互关系,即系统最终将提供给用户什么样的服务。 主要展示了软件设计中的逻辑部分,即类和类之间的关系

2.开发视图(模块视图):关注程序包(模块组织和管理),包括要编写的源程序、第三方SDK、现成框架、类库等。

3.过程视图:关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题, 让开发者可以了解系统的动态行为

4.物理视图:关注目标程序及其依赖的运行库和系统软件如何安装或部署到物理机器,以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。

5.场景视图:用场景来分析一个特定的视图,或描述不同视图构件间是如何相互作用的。

数据模型设计

将数据结构设计、数据库设计、甚至数据文件设计等统一称为数据模型设计

数据模型设计是软件系统设计中的重要环节,它涉及数据元素的格式、结构、访存、表示等机制的建模和优化。在数据模型设计中,需要充分考虑数据的特性、业务需求以及系统架构等因素,以确保数据的完整性、一致性、可扩展性和高效性。

高可信软件设计

高可信软件的特点(理解记忆

可靠性:软件在使用中可靠,不会因为程序错误等问题导致崩溃或失效。

一致性:软件能够按照规定的行为方式运行,避免出现与预期行为不符的情况。

安全性:软件能够保障用户隐私和数据安全,不会被黑客攻击或恶意软件侵犯。

容错设计(两个策略
1.恢复块设计

恢复块设计是一种动态冗余系统设计的方法。 它选择一组操作作为容错设计单元,从而把普通的程序块变成恢复块。恢复块可以包含若干个功能相同但设计存在差异的程序块文本,每一时刻只有一个文本处于运行状态。一旦该文本出现故障,就用备份文本加以替换,从而维持系统的正常运行。

构造:恢复块可以由模块、过程、子程序、程序段等构成。

策略:采取后向恢复策略,即从当前出错时刻往回走,走到一个无错误的点。

方式:多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。

类型

1.热备份系统(双重系统):备用模块在其待机时与主模块一样工作。

2.冷备份系统(双工系统、双份系统):备用模块在其待机时不工作。

2.N+1编程

概念:N+1冗余架构是一种故障容错技术,其中“N”代表系统正常运行所需的最低资源数量,“+1”则代表额外增加的一个资源或模块。这个额外的资源或模块在正常情况下不参与工作,但在系统故障时可以作为备份来替代故障部分。

优势:

1.提高系统的可靠性和稳定性。

2.在出现故障时能够快速恢复,减少系统停机时间。

软件模型

软件模型对软件系统进行抽象表示的一种工具旨在帮助开发者、设计者、测试者以及用户更好的理解和构件软件系统。

软件模型的作用:

1.沟通桥梁模型是开发团队与用户、利益相关者之间沟通的桥梁,有助于确保各方对软件系统的理解一致

2.风险管理通过模型,可以识别和评估软件开发过程中的潜在风险,并制定相应的应对措施。

3.质量保证模型为软件测试提供了依据,有助于确保软件系统的质量符合预定标准。

瀑布模型和敏捷开发模型(定义、特点)**

瀑布式:大项目,从头到尾,按顺序完成,整个项目全部完成以后部署上线

定义:将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行和维护阶段

特点:

1结构化:提供了一个清晰且有序的开发流程

2文档驱动:强调文档的重要性,确保所有需求和设计都在事先进行详细规定

3缺点:无法应对变化,缺乏灵活性

敏捷开发:将大项目,分成好多小项目,不按照特定的顺序,写一个功能上线一个

定义:一种以人为核心、迭代、循序渐进的开发方法,适用于需求变化快、需要快速响应的市场环境

特点:

1快速响应变化:通过短周期的迭代开发来适应市场需求的变化

2灵活性:允许在开发过程中进行更改,使开发流程更加灵活

3缺点:需要高技能团队和高效的沟通

用例图、数据流图、活动图

1.用例图

描述:展示了系统参与者(用户或者外部系统)与系统用例之间的关系,是功能模型的重要组成部分。

用途:帮助开发人员理解系统的功能需求,以及不同用户角色如何与系统交互。

2.活动图

描述:展示了系统执行特定功能时的一系列活动或步骤,以及这些活动之间的流程控制。

用途:帮助开发人员理解系统内部的功能流程,以及各个活动之间的依赖关系

3.类图

描述:DFD通过图形方式展示系统中数据的流动和处理过程,包括数据的输入、处理、存储和输出。

用途:帮助开发人员理解系统如何处理数据,以及数据中的流向

组件模型的特点

1.异族对象关系:组件模型允许不同来源、不同语言编写的对象(或组件)在系统中协同工作。

2.独立性:组件模型强调组件的独立性,即组件应该具有清晰的接口和内部实现分离

3.可重用性:通过定义标准化的接口和协议,组件可以在不同的项目中被重复使用,从而避免了重复劳动和资源浪费。

模块化:组件模型促进了软件的模块化设计。 将系统划分为多个独立的组件。 开发者可以更加专注于每个组件的设计和实现,同时也便于团队成员之间的协作和分工。

软件体系结构的描述

软件体系结构的描述,指通过某种语言表达软件体系结构,描述的目的,是为了实现对软件体系结构的认识、理解、交流。进而,基于描述,可以对软件系统的行为、特性进行各种理论分析和仿真模拟,以及实现软件系统代码的自动生成。

UML

UML(Unified Modeling Language,统一建模语言)是一种为面向对象系统的产品进行说明、可视化和编制文档的标准语言,包括类图、对象图、用例图、时序图等多种图形, 它被视为一种形式化或半形式化的建模语言,是非专利的第三代建模和规约语言。

1.类图

类图(Class diagram)是显示了系统的静态结构。描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解; 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。

+:表示public:紧跟后面的成员可以被任何人引用可以被外部对象访问;
- :表示private:紧跟后面的成员除了类型创建者和类型内部的方法,任何人不可引用,否则编译报错,只能被对象自己访问;

#:表示protected:与private相当,但是继承的类可以访问protected成员,仅能被本类及其子类的对象访问。

类与类之间的关系
关联关系

关联关系分为一般关联关系、聚合关系和组合关系。也可以分为单向关联,双向关联,自关联。

1)单向关联: 用一个带箭头的实线表示(引用的指向被引用的)。

一个类的属性的类型,使用另一个类。

2)双向关联:双向关联用一个不带箭头的直线表示

所谓的双向关联就是双方各自持有对方类型的成员变量。

3)自关联: 用一个带有箭头且指向自身的线表示。

4)关联的多重性

5)聚合关系***

聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系。

聚合关系可以用带空心菱形的实线来表示,菱形指向整体。

6)组合关系***

组合表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系。

组合关系用带实心菱形的实线来表示,菱形指向整体

7)依赖关系

依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。

8)继承关系

用带空心三角箭头的实线来表示,箭头从子类指向父类。

9)实现关系

实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口

建类图的一般步骤

①研究分析问题域,确定系统需求。

②确定类,明确类的含义和职责;类里面的属性、方法

③确定类之间的关系(泛化、实现、依赖、关联、聚合、组合)

④确定类的属性和操作

⑤调整和细化类及其关系,并增加相应说明(角色,多重性,约束等)

⑥考虑是否有接口

类图案例***

微信支付是一种非常方便的电子支付方式。顾客购买完商品后,卖家计算总价,并出示二维码(二维码由图片和账号组成)。顾客扫码后,输入支付金额,并点击支付。如果微信余额足够,则余额支付,如果余额不足,则调用银行支付接口,从银行卡支付。顾客输入正确密码,支付完成。

解析:为了绘制描述微信支付流程的类图,我们需要先理解涉及的主要实体和它们之间的关系。以下是根据你提供的描述,如何构建类图的一些步骤和说明:

一、主要实体(类)

1. Customer(顾客)

属性:可能包括姓名、微信余额、银行卡信息等(虽然银行卡信息在类图中可能不直接显示,但支付时会用到)。

方法:支付(指定金额)、输入密码等。

2.Seller(卖家)

属性:可能包含姓名、商品列表、总价等。

方法:计算总价、生成二维码(包含图片和账号信息)等。

3.QRCode(二维码)

属性:图片、账号信息

方法:展示二维码(这更多是一个可视化操作,但在类图中可以表示为二维码的实例)

4.WeChatPaySystem(微信支付系统)

属性:可能包括系统状态、日志等。

方法:检查余额、处理支付请求(包括余额支付和银行支付接口调用)、验证密码等。

5.BankPaymentInterface(银行支付接口)

属性:可能包括接口状态、连接信息等(这些信息在类图中可能不直接显示)。

方法:处理银行卡支付请求

二、类关系和交互

1.Seller 生成 QRCode 并展示给 Customer。

2.Customer 扫描 QRCode 后,通过 WeChatPaySystem 进行支付。

3. WeChatPaySystem 检查 Customer 的微信余额。

4. 如果余额足够,直接进行余额支付。

5. 如果余额不足,调用 BankPaymentInterface 进行银行卡支付。

6. Customer 在支付过程中需要输入密码,由 WeChatPaySystem 验证。

2.对象图

对象图(object'diagram)描述类图在某一时刻各个类中的对象相互之间的关系相当于对类图中的对象在某时刻的一个快照。

对象图案例***

图 1表示“作者”和“图书”的类图,

图 2表示该类图在某个时刻的对象图。“在对象图中有“白羊叔:作者"和“黑羊叔:作者"两个作者对象,←图书类中有“小白书:图书”、“核心 300:图书"和“UML 及建模:图书"三个对象前两本图书的作者是白羊叔,因此,两本图书和“白羊叔:作者"之间存在两个链后一本图书的作者是黑羊叔,“黑羊叔:作者"对象和“UML 及建模:图书”之间存在一链条

解析:0个或多个作者对应,1到多个图书

对象图:对象之间没有多重性只能是1对1的关系

对象名:类名

属性=属性值

3.构件图

构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。(例如网站分了多少层,每层有多少个组件

MVC

4.部署图

部署图(Component Diagram)描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中。

部署图用于静态建模,是表示运行时过程节点结构、描述软件与硬件是如何映射的、构件实例及其对象结构的图。表现用于部署软件应用的物理设备信息

5.用例图**

用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。参与者和系统之间的关系

用例图多用于静态建模阶段(主要是业务建模和需求建模)。

用例图是指由参与者(用户)、用例(功能),边界(系统的范围)以及它们之间的关系构成的用于描述系统功能的视图。从用户的角度而不是从开发者的角度来描述需求,分析产品的功能和动态行为。

用例图包括三方面内容:用例(Use Case); 参与者(Actor); 参与者、用例之间的关系。用例图模型如下图所示,参与者用人形图标显示,用例用椭圆形表示,连线描述之间的关系。

参与者泛化

假设汽车租赁系统可以接受客户的电话预定和网上预订,那么参与者“客户”就描述了参与者“电话客户”和“网上用户”所扮演的一般角色。泛化关系与类图一样都使用一个空心三角箭头表示,指向扮演一般角色的超类。

用例图中涉及的关系有:关联泛化包含扩展

1.关联

2.泛化

子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。

由于安全主管与经理,安全主管与保安之间泛化关系的存在,意味着安全主管可以担任经理和保安的角色,就能够参与经理和保安参与的用例。

3.包含(include

包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤。

PS:预约功能、结束功能都包含 登陆功能,将通用功能(复用功能)提取出来作为包含关系

4.扩展用例(extend

扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能

简单来说,就是当某特定条件出现时,该扩展用例的行为才会被执行

客户在还车超过了一定期限就需要缴纳罚款,其中“借车超期”为特定条件,只有该条件出现,才执行“缴纳罚款”用例行为,“还车”用例和“缴纳罚款”之间就是扩展关系。

用例图案例***

QQ音乐用户及其相关用例(简易版)

其中参与者【用户】可以泛化为QQ用户与微信用户。【建立歌曲列表】用例包含了【听歌】和【登录】用例,因为必须要先登录才能在听歌页面添加到歌曲列表中。在【听歌】用例中,有1个扩展点,是有的收费歌曲需要购买才能收听,其中歌曲收费为特定条件。

6.状态图

用来操述一个特定的对象所有可能的状态,以及哪些事件将导致状态改变。

状态图的元素

(1)箭头表示一个转换/一个动作

(2)箭头上的文字:表示一个事件

(3)长方形表示某种状态

(4)起始状态 :是一种伪状态,只是表示从这里要开始 (可选)

(4)起始状态 :是一种伪状态,只是表示从这里要开始 (可选)

示例

7.活动图

活动图(activity diagram)是UML的动态规图之一,用来描述事物或对象的活动变化流程。类似流程图,描述从一个动作转移到另外一个动作,阐明了业务用例实现的工作流程。

活动图元素

(1)开始:线条表示-活动流(ActionFlow):描述活动之间的有向关系,表示一个活动向另外一个活动之间的转移。用带箭头的实线表示。

(2)结束:

(3)活动:

(4)条件转移(分支):表示从一个活动按照某种条件转移到几个不同的活动。

(5)分劈和汇合:表示并发的同步行为,用同步杆表示。 - 》 有分劈、有汇总,同时进行,全部完成的时候进入下一个流程

活动图举例

8.时序图

时序图(Sequence Diagram),又名序列图、循序图,顺序图、是一种UML交互图,当用户进行某个操作的时候,按照时间的顺序看,各个模块之间如何调用的。

时序图元素

(1)角色(Actor)

(2)对象(Object)

(3)生命线(LifeLine)

(4)控制焦点(Activation) PS:控制焦点可以体现生命周期


(5)消息(Message)

时序图例子

通过ADD请求直接调用DepServlet,DepServlet开始请求业务层DepService的add方法,业务层开始请求数据访问层DepDao的save方法开始操作,DepDao开始提取DButil工具类,开始执行extendupdate方法,然后访问数据库将数据层层返回,放回到.jsp中,jsp向用户返回具体的数据,一层层的调度过程,柱子表示当前的生命周期,从这一层的请求开始生命周期就开始了,然后一层一层的调用,显示层级对象关系,方块具体层对象

9.系统架构图(体系结构图)***

系统架构图是一种视觉化工具,用于展示和描述软件系统或信息系统的结构和组件之间的关系。

架构图绘画六步法

1.

2

3

4

5

6

10. 技术架构图和体系结构图

技术架构图和体系结构图的对比***

软件技术架构图和体系结构图在软件开发和设计中具有不同的侧重点和使用场景。技术架构图更关注技术实现细节和组件之间的交互方式,而体系结构图则更关注系统的整体结构和功能分布。两者相辅相成,共同为系统的设计和开发提供有力支持。

软件技术架构图

定义:技术架构图主要关注软件系统中各个组件之间的技术实现和交互方式,包括使用的技术栈、框架、中间件、数据库等。

目的:帮助开发人员理解系统的技术实现细节,指导开发过程中的技术选型、集成和测试。

体系结构图(系统架构图)

定义:体系结构图是对整个系统的组织结构和各个组件之间关系的抽象描述,包括硬件、软件、网络、数据库等各个层面的组件

目的:为系统设计和开发提供全局视图,帮助相关人员(如架构师、开发人员、测试人员、运维人员等)理解系统的整体结构和功能分布

面向对象设计方法(第五章ppt

面向对象方法概述 类 对象

面向对象系统开发过程:ooD ooA OOp

面向对象设计的核心要素

问题域部分:

问题域部分是OOD模型的核心组成部分,由与问题有关的对象构成。它应该在OOA模型的基础上,根据实现条件进行必要的修改、调整和细节补充。

人机交互部分:

人机交互部分即人机界面设计部分,它关注如何设计一个可满足人机交互需求、适合使用者特点的人机界面。

控制驱动部分:

控制驱动部分用来定义和协调并发的各个控制流,确保系统的稳定性和性能。

数据管理部分:

数据管理部分用来对永久对象的存取建模,确保数据的完整性和一致性。

构件及部署部分:

构件及部署部分描述构件以及构件之间的关系,以及构件在结点上的分布,确保系统的可维护性和可扩展性

软件体系设计风格

软件体系结构风格 :这些风格的共性、每个风格的特点

数据抽象和面向对象风格

它建立在数据抽象和面向对象编程的基础上。

1. 数据抽象:

数据抽象是指对某一类对象的共同属性和行为进行概括,形成类。它描述某类对象的属性以及状态,即只向外界提供关键信息,并隐藏其后台的实现细节。这种技术允许程序员关注对象的高层次行为,而不需要关注其具体实现细节。

在面向对象编程中,数据抽象是通过类与接口实现的。类定义了一组属性和方法,这些属性和方法共同描述了该类对象的行为和状态。接口则定义了一组方法,但不提供具体的实现,由实现该接口的类来提供具体的行为。

2. 面向对象:

面向对象编程是一种编程范式,它使用“对象”来设计软件。对象是类的实例,包含了数据(即属性)和操作这些数据的方法(即行为)。

面向对象编程的核心概念包括封装、继承和多态。封装将数据和方法封装在一起,形成一个独立的单元,提高了代码的安全性和可维护性。继承允许新类(子类)继承现有类(父类)的属性和方法,实现了代码的重用和扩展。多态则允许对象以多种形态存在,提高了系统的灵活性和可扩展性。

分层系统风格

分层系统风格,也被称为层次型架构风格分层架构,是一种广泛应用的软件体系结构风格。它通过将系统分解为若干层次清晰、功能明确的层来组织代码,每一层都有其特定的职责,并且每一层只与其直接上层或下层交互。 、

1. 层次:分层架构中的基本构成单元是层次。每个层次都承担特定的功能或职责,如数据处理、业务逻辑、用户界面等。

2. 接口:层次之间通过接口进行通信。每个层次都定义了其向上层提供的服务接口和从下层接收的输入接口。

3. 依赖关系:在分层架构中,通常只允许相邻层次之间的直接交互。这种约束有助于降低层次之间的耦合度,提高系统的可维护性和可扩展性。

在分层架构中,常见的层次包括:

1. 表示层: 负责处理用户交互和界面显示。它接收用户的输入并将其传递给业务逻辑层进行处理,同时接收业务逻辑层的输出并将其显示在用户界面上。

2. 业务逻辑层: 负责处理系统的业务规则和逻辑。它接收表示层的输入,根据业务规则进行处理,并将处理结果返回给表示层或数据访问层。

3. 数据访问层: 负责与数据库或其他存储系统进行交互,实现数据的存储、检索和更新。它接收业务逻辑层的请求,对数据库进行操作,并将操作结果返回给业务逻辑层。

仓库风格和黑板风格 ****

一、仓库风格
仓库风格,也称为数据为中心的架构风格,是以数据的存储和共享为核心的设计模式。

优点:数据集中管理,便于数据的维护和更新;所有数据都集中存储在中央仓库中,便于各个组件访问和使用。

缺点:可扩展性受限,当数据量增大或访问量增加时,中央仓库可能成为性能瓶颈。

二、黑板风格

黑板风格是一种基于共享数据空间的架构风格,它允许不同的处理组件通过读写一个共享的黑板(或称为共享内存、共享数据结构)来交换信息。

优点:提供了灵活的协作机制,允许处理组件以异步和并行的方式工作;黑板可以作为一个全局状态存储,方便处理组件之间的信息共享和协作。
缺点:黑板的设计和实现可能比较复杂;当黑板上的数据量增大时,可能会导致性能问题;此外,黑板风格也缺乏明确的控制流和数据流,这可能会增加系统的调试和维护难度。

模型-视图-控制器风格

模型-视图-控制器(Model-View-Controller,MVC)风格是一种经典的软件架构风格,它将应用程序划分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。

模型 负责存储系统的中心数据,以及处理与数据相关的业务逻辑。
视图 负责将信息显示给用户,并接收用户的交互操作。

控制器 处理用户输入的信息,并协调模型和视图之间的交互。

MVC风格的特点

组件分离 灵活性 可扩展性 可测试性

MVC风格的优缺点
优点 : 低耦合性、 可维护性 、 快速部署 、 灵活性

缺点:

1.增加了系统结构和实现的复杂性:对于简单的界面,严格遵循MVC可能会增加结构的复杂性。

2.视图与控制器间的过于紧密的连接:虽然它们相互分离,但确实联系紧密,这可能会妨碍它们的独立重用。

3.视图对模型数据的低效率访问:根据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。

案例:在线购物网站

一个在线购物网站采用了模型-视图-控制器(MVC)风格来构建其前端界面。模型层负责处理业务逻辑和数据存储,视图层负责展示用户界面,控制器层负责接收用户输入并调用模型和视图层来完成相应的操作。这种风格使得前端界面更加灵活和易于维护,同时支持多种视图和控制器的组合和替换。

客户/服务器(C/S)风格

客户/服务器架构风格强调通过中间件来连接客户端和服务器,实现系统的可扩展性和灵活性。

案例扩展多看看***

1. 在线游戏

案例:大型多人在线游戏(MMOG)如《魔兽世界》、《王者荣耀》等。
应用方式:游戏客户端负责图形渲染、用户输入处理,而服务器处理用户间的互动、数据同步和游戏世界状态。

优势:C/S架构能够提供低延迟、高交互性的游戏体验,同时确保数据的安全性和一致性。

三层客户/服务器结构风格 ****

三层客户/服务器(Client/Server,C/S)结构风格是一种在软件架构设计中广泛使用的模式,它将应用程序的功能划分为三个独立的层次:用户接口层(或表示层)、处理层(或业务逻辑层)和数据层(或数据访问层)。

特点与优势

1. 负荷小:通过分层设计,将不同的功能分散到不同的层次上,减轻了单一层次的负荷。

2. 安全性高:通过功能层有效地隔离开表示层和数据层,未授权的用户难以绕过功能层而非法访问数据层。

3. 响应速度快:分层设计使得各层可以专注于自己的任务,提高了整体系统的响应速度。

4. 灵活性好:三层结构允许合理地划分功能,使之在逻辑上保持相对独立性,提高了系统和软件的可维护性和可扩展性。

5. 适应性强:允许更灵活有效地选用相应的平台和硬件系统,并且使这些平台和各个组成部分可以具有良好的可升级性和开放性。

案例扩展多看看****

企业资源计划(ERP)系统

项目背景:某制造业企业希望实现生产、销售、财务等业务流程的信息化管理。

三层结构应用:
1.用户接口层:提供友好的图形用户界面,员工可以通过该界面进行订单处理、库存管理、财务报表查看等操作。

2. 业务逻辑层:处理ERP系统的核心功能和业务规则,如订单审批流程、库存预警、成本核算等。

3. 数据层:与数据库系统交互,存储企业的各类业务数据,如客户信息、产品数据、订单记录等。

效果:通过三层结构设计,ERP系统实现了业务流程的自动化和数据的集中管理,提高了企业的运营效率和管理水平。

浏览器/服务器(B/S)风格

浏览器/服务器(Browser/Server,B/S)风格是一种基于Web的分布式计算架构,它主要依赖于浏览器作为客户端来访问服务器上的资源和服务。

特点

1. 客户端简化在B/S架构中,客户端主要是浏览器,用户无需安装额外的客户端软件,只需通过浏览器即可访问服务器上的资源和服务。

2.跨平台性由于浏览器是跨平台的,因此B/S架构可以轻松地实现跨平台访问,用户可以在不同的操作系统和设备上访问相同的资源和服务。

3.易于维护和升级B/S架构中的业务逻辑和数据存储都集中在服务器上,因此维护和升级工作主要集中在服务器端,降低了整体的维护成本。

4.可扩展性B/S架构具有良好的可扩展性,可以通过增加服务器或优化服务器性能来应对不断增长的用户需求。

优点:

1.客户端无需安装额外的软件,降低了使用门槛。

2. 跨平台性好,可以在不同的操作系统和设备上访问。

3. 易于维护和升级,降低了维护成本。

4. 可扩展性强,可以应对不断增长的用户需求。

缺点:

1. 依赖网络连接,如果网络不稳定或中断,将影响用户体验。

2. 浏览器性能和兼容性可能影响应用的性能和用户体验。

3. 服务器端负荷较重,需要构建必要的备用服务器以保证系统的稳定性和可用性。

案例扩展

一、电子商务平台

案例背景: 电子商务平台是现代商业的重要组成部分,它允许消费者在线浏览商品、下单购买、支付货款,并享受售后服务。B/S架构因其跨平台性、易维护性和可扩展性,成为构建电子商务平台的首选。

案例特点

1. 用户友好界面:通过浏览器,用户可以随时随地访问电子商务平台,浏览商品信息、查看订单状态、进行在线支付等操作。

2. 商品管理:商家可以通过后台管理系统,轻松地上传商品信息、管理库存、处理订单和退款等。

3. 数据分析:平台会收集用户的浏览和购买数据,进行数据分析,为商家提供营销策略建议。

案例效果: 电子商务平台通过B/S架构,实现了用户与商家之间的无缝连接,提高了交易效率,降低了运营成本,为消费者提供了更加便捷、安全的购物体验。

C/S与B/S混合结构风格

C/S(Client/Server)与B/S(Browser/Server)混合结构风格是一种将两种不同架构优势相结合的软件设计方式。

C/S与B/S混合结构风格的优势 **

1.结合两者优点:C/S与B/S混合结构风格结合了C/S架构的交互性强、安全性高和B/S架构的跨平台性好、易于维护和升级的优点。

2. 提高系统性能:通过混合使用C/S和B/S架构,可以根据实际需求合理分配客户端和服务器的任务,从而提高系统的整体性能。

3. 降低维护成本:混合结构风格使得系统的维护和升级更加灵活和方便,降低了整体的维护成本。

SASDSP分别是什么。理解记忆

面向数据流的分析方法是最具代表性的结构化分析方法

SA(结构化分析)

定义:结构化分析(Structured Analysis,简称SA)是一种面向数据流的需求分析方法,主要关注于分析大型的数据处理系统,尤其是企事业管理系统。

基本思想:SA的基本思想是“分解”和“抽象”分解是指将复杂系统分解成若干小问题,然后分别解决;抽象则是在分解的基础上,先考虑问题最本质的属性,暂把细节略去,以后再逐层添加细节。

过程:SA过程包括理解当前的现实环境,获得当前系统的具体模型,从当前系统的具体模型抽象出当前系统的逻辑模型,分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型。

组成:SA模型的组成包括数据字典、数据流图、E-R图和状态转换图。

SD(结构化设计)

定义:结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图(DFD图)映射成软件体系结构的设计方法。它强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则。

过程:SD分为概要设计和详细设计两大步骤。概要设计是对软件系统的总体设计,而详细设计则是对模块实现细节的设计。

特点:SD需要分两步完成:初始SC图、最终SC图,逐步细化,细化的本质就是分解。

SP(结构化程序设计)

定义:结构化程序设计(Structured Programming,简称SP)是结构化方法的一部分,关注于具体的编码实现,强调使用结构化的编程技术,避免使用复杂的跳转语句,如GOTO。

目的:SP的目的是确保软件的质量和稳定性,通过结构化的编程技术提高代码的可读性和可维护性。

面向数据流的分析方法

自顶向下逐层分解

自顶向下逐层分解是面向数据流的需求分析方法的核心思想之一

在软件工程技术中,面对复杂问题,我们采用两个基本手段来控制复杂性:分解和抽象。

分解:将大问题分割成若干个小问题,分别解决。这有助于降低问题的复杂性,使其变得易于管理。

抽象:先考虑问题最本质的属性,忽略细节,然后逐层添加细节,直至涉及最详细的内容。这有助于我们逐步深入理解问题。

面向数据流的设计方法主要包括两种策略:

事务型分析设计 : 将复杂系统分解为较小、相对简单的子系统,子系统间相对独立。

变换型分析设计 : 识别数据流图中的变换中心,分解为输入、变换、输出三部分,并映射为软件结构中的模块。

用户界面设计

用户界面设计是指对软件的人机交互、操作逻辑、界面美观的整体设计过程,旨在提高软件用户体验和易用性。

重要性:良好的用户界面设计能够提供流畅、愉悦的用户体验,提高软件或产品的竞争力。同时,它能够降低用户使用软件的门槛,提高软件的易用性和可操作性。

用户界面设计的基本原则

一致性原则:保持软件整体风格、操作方式、信息架构的一致性,降低用户学习成本。

美观性原则:遵循美学原则,注重界面布局、色彩搭配、字体选择等视觉元素,提升用户体验。

可用性原则:确保软件功能易于理解和使用,避免误操作,提高软件可用性。

用户为中心原则:始终站在用户角度思考,了解用户需求和习惯,提供符合用户心理预期的用户界面设计。

设计模式的分类

创建型模式

用于描述怎样创建对象,它的主要特点是将对象的创建与使用分离GoF(四人组)书中提供 了单例、原型、工厂方法、抽象工厂、建造者等5 种创建型模式。

结构型模式

用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、 桥接、装饰、外观、享元、组合等7 种结构型模式。

行为型模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访 问者、备忘录、解释器等11 种行为型模式。

软件设计原则(除开闭外的原则了解即可

开闭原则****

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效 果(例如:鼠标,键盘,硬盘的)。简言之,是为了使程序的扩展性好,易于维护和升级。

该原则要求尽量通过扩展软件实体的方法来适应变化,而不是通过修改已有的代码来完成变化

想要达到这样的效果,我们需要使用接口和抽象类

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐