面向对象和应用软件系统设计
设计方法的分类: 1. 结构化设计(自顶向下)——没有提供适当的方法解决并发性问题。 |
面向对象的本质:抽象、封装、多态、继承。第一要着的抽象是不确定的,它具有层次,可以排列成为一种层次。 |
框架——软件复用的发展方式:程序主体反主为客,并让辅助组件反客为主,即控制反转。如果一个程序库负担了整个应用程序来于运行的主干算法,并实现了主动的事件循环、事件处理机制、控制流程。则为框架。 |
所谓的应用架构的外在本质是把“技术问题和业务问题分离”,而其内在本质是抽象,把一个系统抽象为技术和业务。以达到技术的复用。任何一个系统都存在技术问题,虽然他们的业务问题可能不一样。 技术层面上,建立一个应用架构从宏观层面来看第一要著是使系统结构化,结构化的途径有三个:分层,管道和过虑,黑板。
因此开发一个应用系统,分层成为设计的首先。以下将详细讨论分层模式下的抽象机制: |
(图1) |
数据访问逻辑层采用domain model,同时使用object/relational mapping pattern的Data mapper pattern和active record pattern向上提供数据访问服务。而在Data mapper和active record中进行concurrency pattern进行并发性控制。 |
业务逻辑层分成三个部分,如下图: (图2) 基础: 1. 业务实体由实体集和实体组成,这些来自数据访问逻辑层。 2. 业务规则定义了对业务实体内部关系,以及业务实体间的关系。 3. 业务外观把业务实体和业务规则统一起来。 中级: 1. 考虑一个业务规则,其有严格的限制,联系到多个业务对象,同时其关系成网状,例如:一个实体的方法实现必须满足多个实体的状态值,大量的条件判断不可避免。当系统复杂性提高时,网状的关系将不可避免。此时采用以上简单的方法不能满足要求。这时采用扩展有限状态机来实现将可以解决问题。 高级: 1. 业务规则和业务外观的外在本质上是一个控制系统。业务规则实现状态的转换,而业务外观委派状态的行为。 |
表现层: 基础: 表现层作为系统用户界面层,有两个工作:1.界面转换控制;2.用户交互数据收集及其完整性与有效性验证。 1. 界面的转换控制: 当系统的转换复杂化后,对转换的控制变的难以接受,系统将出现多个控制器,对系统的行为变的不可把握。因此在这一层可以采用扩展有限状态机来作为控制系统,这样可以保证系统的行为在可控制范围内,同时可以实现分布式协调控制。 2. 用户交互数据收集及其完整性与有效性验证: 用户界面另一个重要工作。对其的验证包括:1. 对数据的有效性如格式,系统可接受范围检查;2. 数据收集的完整性,例如:1.一些数据用户必填;2. 当用户选择某个选项后,另一些数据成为必填。 高级: 表现层为一个交互应用系统,要解决的最大问题保持内核独立于用户接口,解决方法有三种:MVC和PAC。
|
然而根据已知,抽象还同时具有不确定性,因而从技术的另一个角度看一个应该架构的抽象还可以如下排列。 技术问题——本质上是一个控制系统的抽象排列:
对应这些抽象技术问题,一个应用架构中必须包含如下服务中心: 1. Core中心。提供核心服务和运行环境。采用组件配置模式和接口模式 2. Name中心。 3. Auth中心。提供验证服务和注册服务。 4. Service中心。提供应用服务。 5. Pesistence中心。提供统一的持久化服务。 6. UIForm中心。提供界面载入服务。 7. DataRule中心。提供交互数据收集的完整性和有效性验证。 8. Community中心。提供通讯服务。 9. Concurrency中心。提供同步和并发接口和服务。 10. EP中心 11. BizRule中心。 12. WorkFlow中心 |
No silver bullet |
不要过度设计或者过度工程。不要为不存在的扩展做设计。因为代码一旦存在,通常代码并不会被删除,因为那样很麻烦,容易导致问题,而你期待着它将在某个时候被使用。于是代码随着系统增长变的冗长,变得需要更多的人来维护。不幸的事,当更多得人加入时,分工产生了,于是代码被重复,系统再一次增加。当新人加入,每个人都必须读懂旧的代码,尽管它没有用。 |
软件开发的第一特性是可操作性。在面向结构时代,算法是可操作性的代表,可以通过一个阶段的重复性操作得到问题的解。在面向对象时代,模式则为代表。从这个意义上看,模式和算法是一致的,它们反映了人们对世界可操作性的认识。 |
然而有什么理由认为:所有的东西都具有可操作性的?这样的观点我们证明过吗?当我们将这种理论推广到“世界所有的东西都是对象”的时候,我们对于理性、可操作性的过分信任已经让我们陷入了狂妄和自大。 |
软件开发的可操作性的主体——需求。我们存在的需求电阻。需求不存在或者需求不正确时,我们失去了操作主体。 |
面向对象和应用软件系统设计相关推荐
- 从哲学的角度来看面向对象中的主体客体思维
01 为什么面向对象难以理解? 面向对象是应用软件设计比较好的方式,可以指导用计算机解决现实中的业务问题,因此是软件开发中的一种主流方式. 不过,用好面向对象则比较困难,即使有数年经验的软件工程师也难 ...
- 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则
我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...
- 软件工程之面向对象分析与设计
文章链接:https://codemouse.online/archives/2020-05-15124035 面向对象的基本概念 对象:一组属性以及这组属性上专用操作封装体. 消息:对象间通信手段, ...
- 「武汉理工大学 软件工程复习」第四章 | 面向对象 UML建模
目录 [对象.属性.方法] [面向对象分析与设计] 专有名字的缩写 面向对象的分析 OOA 面向对象的设计 OOD UML介绍 [面向对象设计原则] SOLID原则 OO设计时需要注意的一些问题 CR ...
- 企业级的应用软件开发和运行的环境
前言 在企业间的商业竞争越来越激烈的今天,如何快速实现客户需求,如何快速便捷的开发.修改.更新.维护软件项目系统功能,如何降低软件研发的成本,如何降低公司人员流动对软件开发项目造成的影响.如何提 ...
- 面向对象设计的七大原则
面向对象设计原则简介 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充. 设计原则名称 设计原则简介 单一职责原则(Single Responsibility Prin ...
- 软件工程结构化建模的方法和工具_2020年6月——北京大学《软件工程》笔记
1软件工程概述 一.软件的定义 计算机系统种的程序及其文档. 程序:计算机任务的处理对象和处理规则的描述. 文档:为了便于理解程序所需要的阐明性资料. ●软件是无形的.不可见的逻辑实体 ●软件是设计开 ...
- 哈工大软件过程与工具复习5——第9讲 软件设计
目录 一.结构化设计 二.面向对象设计 1. 面向对象设计概述 2. 系统设计 3. 包的设计 4. 对象设计 5. 面向对象设计总结 三.数据库设计 1. 数据库系统及关系数据库简介 2. 数据库逻 ...
- [架构之路-177]-《软考-系统分析师》-17-嵌入式系统分析与设计 -2- 系统分析与设计、低功耗设计
目录 1 7 . 4 嵌 入 式 系 统 开 发 17.4.1 开发平台 1 . 交叉开发环境 2 . 交叉编译环境 17. 2 开发流程 1. 过程模型 2 . 分析与设计方法 17.4.3 软硬件 ...
最新文章
- 干货丨从起源到具体算法,这是一份适合所有人读的深度学习综述论文
- php学数据结构,PHP 程序员学数据结构与算法之《栈》
- 软件项目管理0817:一夜项目管理——把任务进度计划分配给负责人
- 2.2.2 操作系统之进程调度的时机(主动放弃与被动放弃)、切换与过程(广义与狭义)、方式(非剥夺与剥夺)
- 系统升级页面html,页面访问界面升级
- MySQL 优化实战记录 1
- 【算法竞赛学习】金融风控之贷款违约预测-建模与调参
- pubmed显示服务器不稳定,你的pubmed又不能显示影响因子了,因为 ……
- 算法设计与分析(第二版)上机实验题——Java实现
- HackerRank [Algo] Matrix Rotation
- VC 2012 编译出错,避免运行老代码
- wps qt linux,小试牛刀 WPS for Linux beta1文字试用
- 斯坦福NLP名课带学详解 | CS224n 第6讲 - 循环神经网络与语言模型(NLP通关指南·完结)
- IDEA+EmmyLua配置
- 机器学习(周志华) 第十六章强化学习
- mp3中不可缺少的音乐
- r语言alasso的系数怎么看_R语言用msgps包做adaptive lasso,系数怎么提取啊?
- 你的ChatGPT是不是和别人的不一样?——让ChatGPT学会cosplay
- input框不可编辑的三种方法
- overflow内容溢出处理