第4章系统设计2第四章系统设计•理解系统设计的基本概念•掌握架构设计•掌握持久化设计•掌握功能设计•掌握界面设计面向对象的技术特征该环节为系统实现设计出图纸,关注系统实现的所有细节细逻辑模,要更多地结合物理实现系统设计做什么4.1.1面向对象的系统设计过程信息系统开发过程主要包括瀑布式(Waterfall)、迭代式(Iterative)和综合了前两者特点的阶段交付(StagedDelivery)式三种开发模型。4.1系统设计概述1、瀑布式开发系统分析系统设计系统实施系统测试自上而下,环环相扣避免逆向过程2、迭代式开发子系统1子系统2子系统3子系统4系统分析系统设计系统测试系统实施系统分析系统设计系统测试系统实施系统分析系统设计系统测试系统实施系统分析系统设计系统测试系统实施子系统1子系统2子系统3子系统4系统首先,进行子系统划分各子系统过程,力求每一个系统直接进入运行状态最后,完成集成。3、阶段交付式开发系统分析高层系统设计子系统1子系统2子系统3子系统4低层系统设计系统测试系统实施低层系统设计系统测试系统实施低层系统设计系统测试系统实施低层系统设计系统测试系统实施子系统1子系统2子系统3子系统4瀑布式和迭代式的结合按照瀑布式做系统分析和高层系统设计按迭代式完成子系统设计,实施和测试。瀑布式:过于理想化,越来越少迭代式:便于分工,便于纠错,频繁的沟通和联系致使既懂沟通,又懂系统分析的人员紧缺。阶段交付式:折中策略,由于上述人员紧缺,就将需求调查和系统分析外包,导致了此种方式的出现。三种方式的比较值得注意的是要避免实际开发过程中的一种“伪迭代式”开发模型。两种最常见的伪迭代症状:①整个开发过程经历了若干次系统分析迭代,若干次系统设计迭代,……,。②经过多次迭代,得到了接近完工的产品,只差最后的测试。两种伪迭代式的开发模型系统分析系统设计系统实施系统测试子系统1子系统2子系统3子系统4系统实施系统分析系统设计系统实施系统分析系统设计系统实施系统分析系统设计系统实施系统分析系统设计系统测试(a)(b)P994.1.2标题下的一段1、类的物理结构,类间联系(核心是上一章的那个模型?)2、数据库的物理设计、输入输出设计3、方案评价4.1.2功能设计的基本任务具备计算机知识和软件开发经营能力,又懂系统分析和系统设计知识。系统分析员在系统设计中不承担主要任务,但是负责对设计结果的评审和修正。4关于系统设计员系统功能设计需要考虑以下几个方面的问题1、寻找到合适的对象(P100第二段)2、决定对象的粒度(P100小标题)同样一个系统,两个设计师给出两种设计。第一个设计有5个类,第二个25个类。这样平均起来每个类所含有的代码行数就有很大的区别,第一种设计中的代码行数平均是第二种设计的5倍。第一种设计是粗粒度的,第二种设计是细粒度的。3、确定对象的接口4.1.2功能设计的基本任务总体的原则是出了问题不要滞留,尽早解决。1、正确性(原分析阶段的业务逻辑是否可以正确执行)2、完整性(结构完整和组成部分)3、可靠性(可靠的系统设计工具)4、类设计的合理性5、接口定义严谨(能私有的不要公有)6、图表文档完备4.1.3功能设计的评价标准4.1.4系统设计的步骤及工作产品或架构设计应用程序数据库业务逻辑数据库表述层持久化设计业务逻辑1实体对象业务逻辑2业务逻辑n关系数据库ORM实现对象-关系映射文件(XML)ORM接口(API)功能设计界面设计:Staff2:login.jsp:Login:Dispatcher:PGCardSpecManagement.jsp:PGCardSpecManagement:PGCardSpecManagement_query.jsp:CardSpec:CardSpecBean登录doBody()doCommand(String)参数:命令类型登录验参数:用户名、口令openURL选择操作类型doBody()显示结果通过request或者session传递命令和参数显示操作界面执行操作(输入关键字)query(CardSpecKey)取得Bean创建生成PGCardSpecManagement.jspsession.jspPGCardSpecManagement_Menu.jspPGCardSpecManagementServlet(/index)html_footer.jspPGCardSpecManagement_edit.jspPGCardSpecManagement_query.jspPGCardSpecManagement_save.jspPGCardSpecManagement_delete.jsPGCardSpecManagement_disp.jsphtml_header.jsp4.2.1系统架构简介1、系统架构的概念系统架构一般特指系统的软件架构(SoftwareArchitecture),也被称作软件体系结构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。但是实际是一种比较形象的描述系统组成的直观图。4.2系统架构设计系统架构的变迁应用程序程序+数据业务逻辑表述层数据库数据库单层架构双层架构三层架构应用程序和数据的分离表述层和业务逻辑的分离P103表述层:提供人机交互界面(GUI)业务逻辑层:实现各种业务逻辑(比如身份验证)数据库:提供数据2、物理分层和逻辑分层P(104)业务逻辑数据库表述层业务逻辑数据库表述层(a)(b)硬件分层系统逻辑分层3、软件分层的特征①层与层之间应该存在且只能够存在自上而下的依赖关系②每层只对上层公开接口,把实现细节封装起来,不为外界所知,即所谓的“透明”③同层组成部分之间应该存在内在的逻辑联系,不要把与本层业务关系较弱的程序包含进来4、分层的优缺点①易维护(当需求发生变化时,只做较小的修改甚至是不修改,就能适应)②可扩展性(增加新的功能,层数越少调整越大)③可重用性(系统中一个模块的重用性)⑤高安全性(层间设立安全机制)④可伸缩性(实际是建立和维持的关系)建立一个数据库连接是一件非常耗时(消耗时间)耗力(消耗资源)的事情。之所以会这样,是因为连接到数据库服务器需要经历几个漫长的过程:建立物理通道(例如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中登记等等。连接池就是这样一个容器:它存放了一定数量的与数据库服务器的物理连接。因此,当我们需要连接数据库服务器的时候,只需去池(容器)中取出一条空闲的连接,而不是新建一条连接。这样的话,我们就可以大大减少连接数据库的开销,从而提高了应用程序的性能。数据池原理软件分层并非百利而无一害,分层的缺点主要包括①过度分层将导致系统运行效率下降(用空间换时间)②分层导致系统设计愈发复杂③运行调试困难④不适合小系统24逻辑架构软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件等等。25逻辑架构26逻辑架构问题,本书的会员卡管理系统,如果设计逻辑模型应该是怎样的?27物理架构软件元件是怎样放到硬件上的下图是一个蓝电变电站信息管理系统解决方案中,就使用了C/S与B/S混合结构的方式,其物理构架如下。28物理架构双层架构的典型代表是C/S架构三层架构的典型代表是B/S架构基于B/S架构的信息系统开发中最常采用的是MVC(Model-View-Controller,模型—视图—控制器)架构模式模型:数据提取和处理(并不是数据持久层)试图:以恰当的形式呈现数据,与用户交互。控制器:控制应用程序流程,协调模型的切换。4.2.2系统架构的选择视图模型控制器视图选择数据状态更新数据状态查询用户请求变更通知书的107页(1)-(5)。不要与三层构架混淆,不适合小型系统系统架构的配置应在系统总体架构确定后应尽快加以明确。系统架构的配置决定了后续开发过程中软硬件资源的分布和配比,也可能根据给定的软硬件资源确定具体采用哪种架构。B/S架构的配置(一般至少两台服务器,数据服务器和web服务器)C/S架构的配置(至少一台数据服务器)4.2.3系统架构的配置系统I/O设计包括两方面内容:一是与用户交互与界面设计,二是业务数据的存储设计,后者在面向对象开发中集中体现为对象的持久化问题。4.3系统I/O设计C/S架构的界面设计比较简单,比如使用VisualStudio拖拽和可视化控件结合少量代码实现。将数据库和数据库管理系统置于服务器,在局域网客户端安装应用程序即可。B/S架构必须借助于web浏览器,把信息系统设置在服务其上打开,客户端可以在浏览器中输入特定网址,来访问信息系统。借助一些特定的语言,比如Asp,Jsp等等。显示:在用户界面上画出按钮图形。事件的触发:生成按钮点击事件。事件的响应:响应按钮点击事件并且做出某种操作。业务处理:进行实际的计算。对象持久化考虑如何将运行系统中的业务数据永久保存。业务对象在内在中无法永久保存,要么导出数据文件,要么存入数据库,否则就会丢失。并非所有对象都需要保存,保存什么主要取决于你的数据建模。4.3.2对象的持久化(❤P113❤)系统功能设计包括系统实体对象设计、系统流程对象设计和系统交互设计三部分。4.4系统功能设计实体对象设计的基本思路是在关系数据库表字段和实体对象属性之间建立映射关系。关于数据冗余:冗余的好处的是可以实现一定程度的备份,缺点却是可能会导致插入、删除和更新存在异常。4.4.1系统实体对象设计一个实体对象可以对应一个数据库表,也可以对应数据库表的一部分,还可以是几个数据库表连接查询后返回的数据集合,即实体对象应该是整个数据模型的某个子集。具体参见(p117,1-4)4.4.1系统实体对象设计实体类的合并,大类可以包含小类,但是如果两个类逻辑比较远可以不合并,制造必要的冗余。某些实体类可能是在流程对象和交互对象设计中发现的,这时需要检查其是否能映射回数据表。所有实体类放在同一包中,命名遵守一定规则。4.4.1系统实体对象设计系统流程指的是系统的业务流程,系统流程设计是对系统分析阶段成果的进一步完善和补充,也是按照整个系统架构设计思路,从物理实现的角度对系统设计进行新的分解和拓展。系统流程对象设计按照以下两个步骤进行:第一步:换名。第二步:对类中的方法进行处理。这一步远比第一步复杂得多,包括以下内容:4.4.2系统流程对象设计①去除不可实现的方法。②增加功能实现必须的方法。③改变方法作用域。④为方法增加参数。⑤改名。①去除不可实现的方法。②增加功能实现必须的方法。③改变方法作用域。④为方法增加参数。⑤改名。P112图4-12——会员开管理功能页面P122调整之后发生的变动流程减少和代码重用(P121第三段)消息参数举例分析以卡类型管理中的查询功能的实现为例,其完整的交互过程如图所示4.4.3系统的交互设计系统交互设计时应该首先作“加法”,即根据系统功能不断向设计中添加新类;当相关的一组功能做完后,再对设计图作“减法”。将功能一样但命名不同的类删除,将功能近似的类利用重构技术加以合并,将密切相关的类组织在一起,减少类的数量,提升类的相关关系和继承层次。