【系统架构师】-第13章-层次式架构设计

层次式体系结构设计是将系统组成一个层次结构,每一层 为上层服务 ,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外, 内部的层接口只对相邻的层可见
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最 多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
关注分离、职责明确

1、表现层

1)MVC模式

1、控制器:接受用户的输入并调用模型和视图去完成用户的需求

2、模型:应用程序的主体部分。模型表示业务数据业务逻辑

3、视图:用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户输入的数据。视图可以向模型查询业务状态,但不能 改变模型

优点:

1、允许多种用户界面的扩展,只需改动视图、控制器。无需调整模型

2、易于维护

3、功能强大的用户界面

2、MVP模式

Controller/ Presenter 负责逻辑的处理, Model提供数据, View负责显示

在MVP 中 View并不直接使用 Model, 它们之间的通信 是通过 Presenter来进行的

 3、MVVM模式

为解决MVP 中U I种类变多,接口也会不断增加的问题而提出的

模型-视图-视图模型。

通过DataBinding实现View与 Model之间的双向绑定,其内容包括数据状态处理、数据绑定及数据转换

View和 Model 不能直接通信,两者的通信只能通过ViewModel 来实现。 ViewModel通常要实现一个观察者,当数据发生变化, ViewModel 能够监听到数据的变化,然 后通知对应的视图做自动更新;而当用户操作视图, ViewModel 也能监听到视图的变化,再通 知数据做改动,从而形成数据的双向绑定。

更适用于数据驱动的场景

4、使用XML设计

XML (可扩展标记语言)与 HTML 类似,是一种标记语言。适用于Android、WinForm,灵活的页面配置

主要三部分:

1)界面配置:对用户界面的静态定义

2)界面动态生成

3)界面定制:对用户界面的动态修改过程,软件运行过程中,支持用户动态修改后,保存样式、

5、UIP设计思想

应用程序需要维护一个状态,如状态存储在窗体中,代码需要访问这个窗体以重新恢复状态

类似于后台进程,可以重新唤起页面

1)● User Interface Components: 这个组件就是原来的表现层,用户看到的和进行交互都是这 个组件,它负责获取用户的数据并且返回结果。

2)● User Interface Process Components: 这个组件用于协调用户界面的各部分,使其配合后 台的活动,例如导航和工作流控制,以及状态和视图的管理。用户看不到这一组件,但 是这些组件为User Interface Components提供了重要的支持功能。

 2、中间层

1、业务逻辑层组件设计

业务逻辑组件分为接口和实现类两个部分。接口:定义业务逻辑组件,面向接口编程

2、业务逻辑层工作流设计

业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协调工作以达到业务的整体目标。

含6个基本模块,分别是工作流执行服务、工作流引擎、流程定义工具、客户端应用、 调用应用和管理监控工具。

1)接口1:过程定义导入/导出接口

2)接口2:客户端应用程序接口

3)接口3:应用程序调用接口

4)接口4:工作流机协作接口。

5)接口5:管理和监视接口

3、业务逻辑层实体设计

以数据为中心的模型到更加面向对象 的表示法。如XML、 通用DataSet、 有类型的 DataSet

通用DataSet对象:

(1)灵活性。 DataSet可以包含数据的集合,能够表示复杂的数据关系。

(2)序列化。在层间传递时, DataSet本身支持序列化。

(3)数据绑定。可以把 DataSet绑定到 ASP.NET应用程序和 Windows 窗体应用程序的任意 用户界面控件。

(4)排序与过滤。可以使用 DataView对象排序和过滤DataSet。 应用程序可以为同一个 DataSet 创建多个DataView对象,以便用不同方式查看数据。

(5)与 XML 的互换性。可以用 XML格式读写 DataSet。

(6)开放式并发。在更新数据时,可以配合使用数据适配器与DataSet 方便地执行开放式 并发检查。

(7)可扩展性。如果修改了数据库架构,则适当情况下数据访问逻辑组件中的方法可以创 建包含修改后的DataTable 和 DataRelation对象的 DataSet。

有类型的DataSet:

包含具有严格类型的方法、 属性和类型定义以公开DataSet中的数据和元数据的类。 

(1)代码易读。要访问有类型的DataSet 中的表和列,可以使用有类型的方法和属性。

(2)有类型的方法和属性的提供使得使用有类型的 DataSet 比使用通用 DataSet更方便。使 用有类型的DataSet时, IntelliSense将可用。

(3)编译时类型检查,无效的表名称和列名称将在编译时而不是在运行时检测。

 4、业务逻辑层框架

业务框架位于系统架构的中间层,是实现系统功能的核心组件。采用业务容器的形式,便于系统功能的开发、代码重用和管理

1)Domain Model 是领域层业务对象,它仅仅包含业务相关的属性

2)Service 是业务过程实现的组成部分,是应用程序的不同功能单元

3)Control 服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的

4、 数据访问层设计

未完待续......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/494926.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优化体验课转化流程:提升转化率,实现教育品牌增长

随着在线教育市场的竞争日益激烈,体验课转化流程成为影响教育机构发展的关键环节之一。本文将深入探讨如何优化体验课转化流程,提升转化率,实现教育品牌的可持续增长。 ### 什么是体验课转化流程? 体验课转化流程是指教育机构通…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务👺 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

Stable Diffusion XL之使用Stable Diffusion XL训练自己的AI绘画模型

文章目录 一 SDXL训练基本步骤二 从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型2.1 配置训练环境与训练文件2.2 SDXL训练数据集制作(1) 数据筛选与清洗(2) 使用BLIP自动标注caption(3) 使用Waifu Diffusion 1.4自动标注tag(4) 补充标注特殊tag(5) 训练数据预处理(标注…

Sublime for Mac 使用插件Terminus

1. 快捷键打开命令面板 commandshiftp2. 选择 Package Control: Install Package,然后会出现安装包的列表 3. 在安装终端插件前,我们先装个汉化包,ChineseLocallization,安装完重启 4. 输入 terminus,选择第一个&am…

面试题:Java虚拟机JVM的组成

1. 基础概念 JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收机制 JVM由哪些部分组成,运行流程是什么? …

DoCAN配置

DoCAN涉及模块 CanTrcv -> Can -> CanIf -> CanTp -> PduR -> Dcm DCM DcmDslProtocolRow DcmDslProtocolID: DCM_UDS_ON_CAN DslProtocolSIDTable DcmDslMainConnection Rx 物理寻址/功能寻址 PDUR PduRBswModules-Dcm

spring安全框架之Shiro

Shiro 一、现存问题 1.1 现存问题 认证(登录):认证操作流程都差不多,但是每次都需要手动的基于业务代码去实现,很麻烦! 授权:如果权限控制粒度比较粗,可以自身去实现&#xff0c…

【论文阅读】Faster Neural Networks Straight from JPEG

Faster Neural Networks Straight from JPEG 论文链接:Faster Neural Networks Straight from JPEG (neurips.cc) 作者:Lionel Gueguen,Alex Sergeev,Ben Kadlec,Rosanne Liu,Jason Yosinski 机构&#…

数据结构与算法 单链表的基本运算

一、实验内容 编写一个程序实现,实现单链表的各种基本运算(假设单链表的元素类型为char),并以此为基础设计一个程序完成下列功能: 初始化单链表;采用尾插法依次插入元素a,b,c&…

GitHub Copilot如何订阅使用

1.Copilot是什么 Copilot是由Github和OpenAI联合开发的一个基于人工智能大模型的代码写作工具。 我们都知道Github是世界上拥有开源项目及代码最多的一个平台,有了这么一个得天独厚的资源,Github联合OpenAI喂出了Copilot。经过不断地更新迭代&#xff…

GNU Radio之OFDM Carrier Allocator底层C++实现

文章目录 前言一、OFDM Carrier Allocator 简介二、底层 C 实现1、make 函数2、ofdm_carrier_allocator_cvc_impl 函数3、calculate_output_stream_length 函数4、work 函数5、~ofdm_carrier_allocator_cvc_impl 函数 三、OFDM 数据格式 前言 OFDM Carrier Allocator 是 OFDM …

Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?

一、前言 不知道大家注意过没有,在Spring Boot项目启动过程中日志打印并没有显示完整的报名,而是显示一些o.a.c,o.s.web形式的包名,如下图: 这是为什么呢? 二、原理 首先,我们先看一下Spring…

ArrayList和LinkedList有什么区别?

ArrayList和LinkedList的区别 ArrayList 和 LinkedList 是 Java 中常用的两种集合类,它们都实现了 List 接口,但在内部实现和性能上有一些区别。 内部实现: ArrayList 使用数组实现,它的元素在内存中是连续存储的,每…

软件部署资源计算工具:精确评估资源需求

软件部署资源计算工具:精确评估资源需求 在当今快速发展的信息技术时代,软件部署已成为企业运营不可或缺的一部分。然而,一个常见的挑战是如何精确评估软件部署所需的资源。资源评估不仅关系到软件的性能和稳定性,还直接影响到成…

Spring Boot:Web开发之三大组件的整合

Spring Boot 前言Spring Boot 整合 ServletSpring Boot 整合 FilterSpring Boot 整合 Listener 前言 在 Web 开发中,Servlet 、Filter 和 Listener 是 Java Web 应用中的三大组件。Servlet 是 Java 代码,通过 Java 的 API 动态的向客户端输出内容。Filt…

SpringMvc之映射器HandlerMapping

简介 在springmvc的处理流程中,第一步就是查询请求对应的映射器,然后组装成处理器链处理请求,本文意在梳理该过程 重要实现 HandlerMapping是一个接口,该接口用于通过HttpServletRequest寻找对应的处理器,接口介绍如下…

python学习15:python中的input语句

python中的input语句 我们前面学习过print语句,可以将内容输出到屏幕上;在python中,与之对应的还有一个input语句,用来获取键盘输入。 数据输出:print 数据输入:input 使用上也很简单: 使用inp…

31-3 文件包含漏洞 - 文件包含漏洞利用(CVE-2021-3019:Lanproxy 任意文件读取漏洞复现)

一、Lanproxy简介: lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持TCP流量转发,可支持任何TCP上层协议(访问内网网站、本地支付接口调试、SSH访问、远程桌面等)。 二、漏洞概述: Lanproxy1.0 版本存在目录遍历漏洞,可通过绕过路径限制(../)来…

量化交易入门(二十四)MTM指标买卖逻辑和回测

MTM指标可以用来指导买卖决策,其基本逻辑如下: 买入信号: 当MTM从负值上穿0线,并向上突破某个阈值(如20)时,表明上升动力充足,可以考虑买入。当MTM在0线上方并持续上升,创出新高时,表明上升趋势强劲,可以考虑加仓或持有。 卖出信号: 当MTM从正值下穿0线,并向下突破某个阈值(如-…

C++中stack的用法及其解析

一、stack的介绍 1.stack是一个容器适配器,它的名字叫做栈 专门用在后进先出的上下文环境中的,它的删除与插入操作只能从容器的一端进行。形象一点,就好像一个容器里放东西,先放进去的就在底部,要想拿出来,…