




免费预览已结束,剩余38页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
dwz4j架构标准规范目录概述3ui规范3界面规范总体原则3采用w3c标准规范html,css代码目的3ui组件化的思路4三层系统架构6表示层6业务层6整合spring7简化spring 配制7系统升级以及易回滚性7持久化层8数据库设计9服务器架构10开发流程12需求分析阶段12设计阶段12编码阶段13测试流程14单元测试14集成测试14功能测试15压力测试15测试人员的职责:15版本控制16版本控制基本流程:16项目实施版本控制分为4个步骤:16svn版本库布局16分支与标记17merge18其它注意事项19文件的删除、移动与重命名19提交的时机19数据备份20mysql备份策略大概可分为4种:20数据备份分为三步:20crontab 定时任务管理20常用工具21java profiler21firebug21tamper data22selenium ide23html validator24loadrunner25apachebench - apache 专用的压力测试工具25alexa sparky25searchstatus26ietester26ie developer toolbar27office 中带的脚本调试器27附录29附录一 (mysqlfullbackup.sh)29附录二 (ftpdownload.sh)30附录三 flex风险评估31附录四 概要设计文档模板32附录五 详细设计文档模板33附录六自定义异常的原则33概述dwz4j框架是基于hibernate + spring + struts基础上封装的一套java快速开发框架。框架封装了一个configuration,是一个系统配制文件信息的封装,支持xml和properties文件。需要给系统增加一个配制文件时只需在 app-config.xml中加入新配置文件路径即可,无需再写java代码去读配制文件,框架可以自动加载。表示层用struts,将jsp页面上需要的数据放到model中,jsp中页面只有标签,没有任何java代码。业务层在spring的基础上封装了一个businessfactory。 businessfactory 可得到businessobjectmanager 和 configuration。一个businessobjectmanager管理一个或多个business object。简化spring 配制,businessobject由businessobjectmanager 来管理。数据层hibernate+dao的设计模式封装持久化层。开发人员不需要写具体的dao实现类。由spring aop 产生dao实现。ui规范界面规范总体原则1) 以用户为中心。设计由用户控制的界面,而不是界面控制用户。2) 简单且美观实用。界面应该很简单(不是过分单纯化)、易于学习、并且易于使用。每个页面简单明了,用户一看就能大概明白如何操作,不要有太多干忧用户视线的东西。3) 清楚一致的设计。界面的风格保持一致,具有相同含义的术语保持一致,且易于理解。4) 较快的响应速度。5) 遵循w3c标准,提高界面灵活度,降低界面和程序的耦合度。6) ui组件化。组件分为功能组件和布局组件。7) 规范化css样式文件。将css文件划分为css文件和子模块css文件。核心css中定义系统核心样式和公共样式。子模块css在核心css的基础上进行扩展,可以调整样式风格,并定义本模块特有的css。采用w3c标准规范html,css代码目的1) 改变页面布局和样式时只修改css,而不用改任何html代码就能实现。2) 把各种界面布局和样式相关的,都由css来处理。(比如一个列表显示,可能是一列,二列,n列,程序不做任何控制,只改css)3) 解决主流浏览器兼容问题.4) 降低界面和程序的耦合度。ui标准示例代码ui_core经上传到svn,可以作为参考.ajax和界面特效使用jquery. flex现在还不建议用,不是很成熟,但可以用flex做业务原型.(见附录三 flex风险评估)ui组件化的思路ui组件分为2大类:1) ui环境 (ui整体修饰, 这个思路和windows xp 系统theme主题风格相似.当禁用theme时,windows xp 界面就和windows 2000差不多, 没有圆角和渐变色等)2) ui组件 (表单, 导航条, 对话框, 提示框, 信息列表, tab等)组件化思路:1) 最大限度的减化html代码,html代码只基本的信息,然后css 和jquery去修饰页面. 因为html与后台程序关联相对较多,改界面时最好是不用修改html代码就能把界面风格换了这样对后台程序没有影响.2) 构建功能型表单loginemailpasswordsubmit 整理jquery表单验证和ajax表单提交通用方法, 简化前台代码.表单验证只需在form上加class=required-validate ajax 提交只需在form上加onsubmit=return validatecallback(this, logindone); 表单字段一般都有一个label和一个input, label上自动加for属性,点激label后相应的input获得焦点. 表单输入框获得焦点和鼠标经过样式修饰.3) 列表信息隔行加背景色和hover加亮.4) 在工作过程中进一些完善界面组件库. 整理一套完整的组件, 比如表单、导航条、对话框、提示框、信息列表、tab等等.5) 把以上提到的做成一个通用的js库. 以后可以在其它项目中引入这个js库.三层系统架构 图2-1 三层系统架构图表示层jsp 提供与用户交互的界面. jsp页面不写java代码,将页面上需要的数据放到model中。jsp页面只有标签(html标签,jsp标签,自定义标签)action 根据用户指令调用业务层的接口, 并将数据传递给业务层, 操作完成后把数据返回给用户.业务层在spring的基础上封装了一个businessfactory. businessfactory 可得到business object manager 和 configuration.一个business object manager管理一个或多个business object. businessobjectmanager是业务的核心,业务逻辑基本都在businessobjectmanager中.configuration是一个配制信息的封装,支持xml和properties文件.需要给系统增加一个配制文件时,只需在 app-config.xml中加入路径即可,无需再写java代码去读配制文件了.整合spring1) 在web-inf/web.xml加入一个监听器appcontextinitlistener. 负责在系统启动时初始化spring和载入配制信息.public void contextinitialized(servletcontextevent event) servletcontext context = event.getservletcontext();string home = context.getinitparameter(home);configuration config = new configuration(new classpathxmlapplicationcontext(spring.cfg.xml);try config.load(context.getrealpath(home + etc_file); catch (configurationexception e) event.getservletcontext().log(configurationexception:,e);2) 在spring配制文件中加入各模块的businessobjectmanager3) businessfactory 得到businessobjectmanager简化spring 配制businessobject由businessobjectmanager 来管理. businessobject不需写到spring配制文件中, 只要把businessobjectmanager写到spring配制文件中.业务逻辑都从businessfactory开始,先取取到某个businessobjectmanager,再由businessobjectmanager来操作业务对象.系统升级以及易回滚性:系统的每次升级都会修改相应的配置文件,对于某个businessobjectmanager的升级,我们需要提供新的实现,这样不需要更改原有实现,仅需要在配置文件中配置新的实现,就可以完成升级,如果升级出现问题,那么,将配置文件中的新配置还原回原来的配置,则可以完成回滚。图2-2 系统business object演化图图2-3具体的business object与其manager之间的关系持久化层采用hibernate实现dao的设计模式封装持久化层。可以指定不同的session factory, dao封装可以支持多个数据库.不需要写具体的dao实现类.由spring aop 产生dao实现,程序员开发时不需要写dao实现类了.spring dao 配制示例daoadvisordwz.persistence.daos.sysuserdao数据库设计各模块数据库表加上前缀.在能保证业务需求的前提下,尽量简化表结构.表结构设计根据具体的业务需求再去设计.最重要的是把屋一个原则,用最简单明了的表结构和关系记录用户数据.其实只要能满足业务需求,那应该是越简单的方法越好.不管是从用户体验,可维护性和性能来说都是这个原则.服务器架构假设是一个企业建站平台. 平台可创建多家企业,每家企业能在这个平台上管理他自己的业务. 大致考虑2个问题:1) 用户统一登录问题. 各评估系统是否需要统一登录? 2) 性能问题. 用户访问和报表生成,可以分开到不同的server上,或者是用其它的方式. 不管用什么方式,其目的只有一个,就是在生成报表时不能影响到用户访问. 平台起初可能只使用一台服务器, 但是用户量的增加, 服务器压力越来越大,就要用到集群或负载均衡.所以在设计时要考虑以后如果要加机器时,能比较方便的加上,而不影响现有的功能.负载均衡主要有2个作用:1) 分担压力2) 容灾解决方案多台服务器做负载均衡主要问题是解决各服务器之间的session共享问题. 可能需要把session存到内存数据库,hsqldb, mysql等. 自己实现一套session管理机制.负载均衡网络架构规化:图3-1 网络架构从服务器功能来分可分为几种:1) static 是静态服务器,负责所有静态文件的存和取. 和生成报表.2) 前台展示和业务处理服务器. 3) 系统管理服务器 admin对全局系统设置, 管理企业. manager 管理本企业用户,管理本企业界面风格,查看本企业业务统计报表.所有从客户端发过来的请求,全部交给load balance来处理load balance来决定将请求发给哪台服务器开发流程需求分析阶段需求分析阶段在对需求调研和分析后,出来需求文档和用户界面ui。需求文档必须能明确的描述业务流程,画出业务流程图。其目的是:1) 有助于每个项目组成员能很快的理解需求。2) 有助于和用户达成一致,保障项目能满足需求。用户界面ui 所的业务都是为了满足用户需求。用户并不关心系统架构和服务器架构等,用户只是关软件是否好用,是否满足需求。用户直接和ui打交道,ui对用户来说是非常重要的。而ui又直接软件的设计。建议在这个阶段能把ui做出来(尽量做和最终的ui流程和风格一致)。很快把ui做出来让用户看,有什么反馈有意见可以马上修改。设计阶段软件设计原理: kiss(simple but not simpler简单实用)。体系结构, 研发过程始终短小精悍。设计目标:1) 所有设计力求简单, 但不过于简化 (simple but not simpler).2) 从基本结构到多次优化.3) 系统易于理解和维护, 必要的文档说明.4) 优美的设计通常简单而不繁琐.5) 不等于快速草率(not quick and dirty).产品质量的各个方面:从工程设计角度:1) 一致性(是指在有一组函数时,比如说一个接口的方法,对方法名字和参数的设计应该具有一致性。项目组各成员写出来的代码风格基本一致。遵循一致性设计的程序,会大大增加程序的可读性与编程效率。)2) 可靠性3) 性能4) 可维护性5) 功能可扩展性6) 规模可扩展性从用户界面角度:1) 方便2) 效用3) 吸引力4) 满意程度设计阶段的主要工作1) 定制任务优先级和时间表。2) 定义接口, 业务层接口定义完后开会review一下。3) 写概要设计文档:重点在于将模块分解为对象并阐明对象之间的关系。(附录四 概要设计文档模板 )4) 写详细设计文档:重点在于对模块进行实现,将模块的对象分解为属性和方法,并阐述如何实现。(附录五 详细设计文档模板)编码阶段编码阶段的主要工作1) 编写接口实现类2) 编写单元测试3) 编写显示层代码测试流程单元测试单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为.用junit4做单元测试。创建一个命名为test的source forder,与src中的包名一一对应。在test中放的是src中业务对象测试类,test中的包名和src中的保持一致。集成测试集成测试的目的是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。它所测试的内容包括单元间的接口以及集成后的功能。使用黑盒测试方法测试集成的功能。并且对以前的集成进行回归测试。junit 测试套件功能比较强大, 可以把整个项目的全部测试用例串起来. 也可以单独跑每个模块的测试套件.添加junit 测试套件步骤:1) 每个模块加一个测试套件test suite,把模块中的各junit测试类串起来。2) 加一个总的测试套件,把各模块的测试套件串起来测试套件示例:runwith(suite.class)suiteclasses( testsuite.class, testsuite2.class, testsuite3.class )public class alltestsuite extends testcase beforeclasspublic static void init() runwith(suite.class)suiteclasses( usertest.class, producttest.class )public class testsuite extends testcase beforeclasspublic static void init() 测试类示例:public class usertest testpublic void testcreat() testpublic void testdelete() 功能测试1) qa人工测试2) 测试工具录制测试脚本(selenium,loadrunner等)压力测试1) apachebench 2) loadrunner录制测试脚本,设制访问用户数,和并发数量。测试人员的职责: 在项目的前景、需求文档确立基线前对文档进行测试,从用户体验和测试的角度提出自己的看法。 编写合理的测试计划,并与项目整体计划有机地整合在一起。 编写覆盖率高的测试用例。 针对测试需求进行相关测试技术的研究。 认真仔细地实施测试工作。 进行缺陷跟踪与分析。 提交测试分析报告。当然具体到某个角色的职责又有所不同,一般测试组内有测试经理、测试员、技术支持三个角色。测试经理:组建测试组;协调测试组内部的沟通;代表测试组与其他角色组进行沟通(其他角色是指项目经理、开发人员);编写测试计划;测试报告分析。测试员:编写测试用例(有很多情况测试用例是由测试经理来编写的);实施测试用例;执行测试。技术支持:为测试工作提供技术支持。版本控制程序员编写程序的过程中,每个程序都会有很多不同的版本,这就需要程序员很好的管理代码,在需要的时间可以取出需要的版本,并且每个版本都有一个完整的说明。使用sub version(简称svn)作为版本管理工具。在多个程序员管理同一段代码的过程中,版本的管理显得尤为重要,使用svn可以方便的进行分支、合并,记录下所有的版本。把版本划分为主线trunk 和分支branch和标记tag。主线最干净的版本,是线上运行的稳定版本。开发新功能从主线切出分支后,在分支上开发,开发结束并测试通过后才提交到主线上。tag的主要作用是可以快速的回退到某一个稳定的时间点.严格控制branch的数量,保持trunk版本的稳定,branch开发完成上线后merge回trunk,branch消除。有冲突解决机制,由冲突当事人仔细核对,敲定最终版本。branch merge到trunk由专人负责,避免错误修改提交到trunk。trunk稳定后, 上线时做一个tag. trunk 上线后, 可能会有不尽人意的地方,也许需要回退到先前的一个版本. 这时就可以回退到前几次上线时做的tag.trunk 和tag 由专人负责, 开发人员只能往branch中提交代码, trunk 和tag对开发人员只有读的权限.版本控制基本流程:1) 各开发小组建立自己的分支,并在此分支上开发2) 各开发小组把分支合并到主干上并形成较为稳定3) 各个小组重新从主线上建立新的分支,在此分支上开发(即回到第一步)4) 循环往复,直到工程结束。项目实施版本控制分为4个步骤:1) 开发版本develop, 如果有几个小组同时开发,可以切出多个分支。2) 内测版本alpha,开发完成后转为alpha版本,做内部测试。3) 公测版本beta,内部测试通过后转为beta版本,对外公开测试。4) 上线版本production,测试全部通过后转为production版本,并合并到主线上svn版本库布局一个版本库包含多个项目,通常按分支来安排布局:/trunk/project1/trunk/project2/branches/project1/branches/project2/tags/project1/tags/project2或者按项目:/project1/trunk/project1/branches/project1/tags/project2/trunk/project2/branches/project2/tags如果项目不是密切相关,而且每一个是单独被检出,那么按项目布局是合理的。对于那些你想一次检出所有项目,或需要将它们打成一个分发包的相关项目,按分支来布局通常比较好。这种方式你只要检出一个分支,而且子项目之间的关系也比较清楚。分支与标记版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对主干线干扰。当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线).版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。这个过程被称作标记。subversion 没有用于建立分支和标记的特殊命令,但是使用所谓的cheap copy来代替。cheap copy类似于unix里的硬连接,它意思是代替一个版本库里的完整的拷贝,创建一个内部的连接,指向一个具体的版本树。结果分支和标记就迅速被创建,并且没有在版本库里占据任何额外的空间。merge当程序到达一个比较稳定的阶段,就需要把分支合并到主干上,下面讲述一下合并的流程。1) term1 从trunk切出branch (term1_090420), term2 从trunk切出branch (term2_090420)2) term1与term2分别修改自己分支上的代码.3) term1先把主干check out到本地。然后在主干的目录上右键选择term-merge,弹出如下窗口:此对话框的含义是把from指定的分支版本到to指定的分支版本之间的差异合并到主干上。在这里分支选的是term1_090420。然后直接点击merge进行合并,你也可以通过dry run来看是不是两者之间有差异。由于没有其它人修改主干,所以合并的很顺利,合并完毕之后,由xb对主干进行提交。4) 将term2_090420分支合并到主干,解决冲突.term1合并完毕之后,term2要将他的分支合并到主干上去,方法同上。但是由于term1已经修改过主干,所以产生了冲突,会弹出一个冲突对话框。双击对话框中的产生冲突的文件名,就可以调出工具对此文件进行合并。其它注意事项文件的删除、移动与重命名你可以重命名、移动或删除你的文件或文件夹,但请使用svn进行这些操作,否则之前的版本信息会丢失。使用svn删除、移动与重命名文件夹的方法是在文件/文件夹上点右键进行svn操作,或直接在资源浏览器中使用右键拖放(会弹出svn选项)。文件的删除、移动与重命名之前,必须保证工作目录是最新的版本;进行这些操作之后,需要进行提交。提交的时机每个工程会有很多个小模块,当某个模块达到稳定的时候,你就需要提交一次,以免写下个模块代码的时候出现不可恢复的错误。每一次提交需要前,需要通过java编译检查,保证是一个编译没有错误的版本。当提交比较稳定的版本的时候,同时要修改你的版本号。提交的时候要添加注释,若多人共同修改同一段代码我们就需要为注释添加上更加详细的说明数据备份mysql备份策略大概可分为4种:1) 直接拷贝数据库文件(不推荐)2) 使用mysqlhotcopy备份数据库3) 使用mysqldump备份数据库 4) 使用主从复制机制(replication)(实现数据库实时备份)一般mysqldump使用比较广泛,操作也方便,下面就具体描述mysqldump备份策略。数据备份分为三步:1) 从服务器上备份数据库到ftp 服务器 (linux shell 脚本 + crontab)附录一:mysqlfullbackup.sh2) 备份到本地(linux shell 脚本 + crontab)附录二:ftpdownload.sh3) 定期刻录光盘 (人工操作)crontab 定时任务管理crontab -e01 03 * * * /var/proftpd_data/backup/bin/mysqlfullbackup.sh10 04 * * * /var/proftpd_data/backup/bin/ftpdownload.sh前五个字段的整数取值范围及意义是:059 表示分123 表示小时131 表示日112 表示月份06 表示星期(其中0表示星期日) 常用工具java profileryourkit java profiler是业界领先的java剖析工具。cpu,内存,sql语句执行效率等的剖析在线文档/docs/index.jspfirebugfirebug is implemented as a firefox extension . firebug integrates with firefox to put a wealth of development tools at your fingertips while you browse. you can edit, debug, and monitor css, html, and javascript live in any web page.tamper datatamper data is implemented as a firefox extensionuse tamperdata to view and modify http/https headers and post parameters.selenium ideselenium ide is an integrated development environment for selenium tests. it is implemented as a firefox extension, and allows you to record, edit, and debug tests. selenium ide includes the entire selenium core, allowing you to easily and quickly.html validatorhtml validator is a mozilla extension that adds html validation inside firefox and mozilla. the number of errors of a html page is seen on the form of an icon in the status bar when browsing.the extension can validate the html sent by the server or the html in the memory (after ajax execution)loadrunnerloadrunnner这一强大的性能测试工具, 可以录制脚本,设并发数后去跑流程.apachebench - apache 专用的压力测试工具在阿帕奇服务器的套件中,有一个叫做 ab (apachebench) 的工具。apachebench 主要是用来测试阿帕奇服务器执行效率用的.apachebench 可以针对某个特定的 url 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 apachebench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据做为调整服务器设定或程序的依据. alexa sparky查看网站全球排名的firefox插件searchstatusdisplay the google pagerank, alexa rank, compete ranking and seomoz linkscape mozrank anywhere in your browser, along with fast keyword density analyser, keyword/nofollow highlighting, backward/related links, alexa info and more.ietester主要是用来调试ui在ie各个版本中的兼容性问题.ietester is a free webbrowser that allows you to have the rendering and javascript engines of ie8, ie7 ie 6 and ie5.5 on vista and xp, as well as the installed ie in the same process.ie developer toolbar相当于firefox下的firebug插件.office 中带的脚本调试器打开添加/删除程序-添加/删除 windows 组件,然后可以看到一个“脚本调试器”在word中,选择工具宏microsoft 脚本编辑器命令附录附录一 (mysqlfullbackup.sh)#!/bin/sh# use mysqldump -help get more detail.# 定义变量,请根据具体情况修改# 定义用于备份数据库的用户名和密码user=rootuserpwd=123456# 定义备份数据库名称dbname=acirs_v1# 定义备份目录databackupdir=/var/proftpd_data/backup# 定义邮件正文文件emailfile=$databackupdir/log/email.txt# 定义邮件地址email=# 定义备份日志文件logfile=$databackupdir/log/mysqlbackup.logdate=date -d now +%m%d%yecho date -d now +%y-%m-%d %h:%m:%s $emailfile# 定义备份文件名dumpfile=$databackupdir/db/$dbname-$date.sql.gz# 使用mysqldump备份数据库,请根据具体情况设置参数mysqldump -u$user -p$userpwd $dbname | gzip $dumpfileif $? = 0 ; thenecho database backup success! $emailfileelseecho database backup fail! $emailfilefi# 写日志文件echo = $logfilecat $emailfile $logfileecho $dumpfile $logfile# 发送邮件通知cat $emailfile | mail -s mysql backup $email附录二 (ftpdownload.sh)#!/bin/bash# 定义变量date=date -d now +%m%d%yfilename=acirs_v1-$date.sql.gzftpserver=03ftpuser=zhhftppasswd=*remotedir=/backup/dblocaldir=/home/hhzhang/backup#开始ftp操作/usr/bin/ftp -niv !open 03user $ftpuser $ftppasswdbinarycd $remotedirlcd $localdirmget $filenamebye!附录三 flex风险评估flex优势:1) flex界面表现能力一流. 因为flex编译后的格式是flash的swf格式,flex继承了flash强大的的界面表现能力,如果对比其他web开发工具,flex的强项之一就在一界面的表现能力,用flex我们可以实现非常华丽和具有动态效果的应用程序表现界面,flex默认的界面样式就已经够美观了,如果对界面要求很高的话,的可以结合flash实现你所能想象到的界面外观,真正做到能限制你的就只有你的想象力了,而且,flex的界面效果不是跟一般html页面一样,使用图片组合拼凑成的,而是由flash player渲染出来的,所以不怕放大了有毛边等等问题,我们可以在不需要使用任何图片制作工具的情况下就可以制作出一个非常具有美感的应用系统。2) 便于实施一个离线的系统用于数据录入和生成报告,在连接到服务器的情况下,可以上传数据,进行数据搜索、lodgement和第三方人员进行质量管理3) flex中有多种图表工具, 生成图表比较方便.4) flex可以调用摄像头实现视频,而且视频本身就嵌入在flex应用中,由flex player直接播放。flex缺点:1) 开发人员现在对flex还不熟悉, 需要一个学习过程.2) 企业级级应用还很少, 多数企业都没有用这种技术,只有部分开发者感兴趣才深入研究,而且部分开发者对flash做企业级应用还迟怀疑态度。ajax 在各方面相对成熟一些.3) flex 绝大多数文字都无法复制, 通过system.setclipboard(text); 可以把某个组件中的文字复制出来. 4) 要想把flex中的内容通过打印机打印出来,需要通过专门的打印组件. 而且打印效果没有打印html页面好.5) air 棹面应用需要先安装air运行环境/cn/air/6) 需要安装flash player 97) flex builder需要购买us$249 (有破解版)flex 浏览器前进后退问题. flex历史记录管理器可以对当前程序的视图和模式状态进行保存,因此可以在程序执行过程中,通过导航命令按钮直接返回到程序指定视图模式. 查对ie支持有一些问题,无法实现导航命令按钮的动态响应.总结flex的界面效果比较好,生成图表方便,降低ui工作量, 便于实施一个离线的系统.但flex作企业级的应用还有一定风险:一. 技术风险:1) flex企业级的应用还不是很成熟, 企业级应用成功案例很少,可能存在不可预测的风险.2) 没有flex开发经验, 需要一个学习过程. 影响开发进度和维护成本. 调试比较麻烦.二. 用户体验风险:1) flex 中文字复制和打印支持没有html好.2) air棹面 应用需要先安装air运行环境, 需要安装flash player 9附录四 概要设计文档模板 xxx概要设计概要设计重点在于将模块分解为对象并阐明对象之间的关系一. 概述描述本文的参考依据、资料以及大概内容。二. 目的描述本文的编写目的。三. 模块概要设计引用架构设计说明书中的模块图,并阐述对于模块进行设计的大致思路。3.1. 设计思想(阐明概要设计的思想,概要设计的思想通常是涉及设计模式的)3.2. 模块a3.2.1. 概要设计根据该模块的职责对模块进行概要设计(分解模块为对象、描述对象的职责以及声明对象之间的接口),绘制模块的对象图、对象间的依赖图以及模块主要功能的序列图,分别加以描述并相应的描述模块异常的处理方法。3.2.2. 模块接口实现阐明对于架构设计中定义的模块接口的实现的设计。附录五 详细设计文档模板 xxx详细设计(详细设计重点在于对模块进行实现,将模块的对象分解为属性和方法,并阐述如何实现)一. 概述阐述本文的参考依据、资料以及大概内容。二. 目的阐述本文的编写目的。三. 模块详细设计3.1. 设计思想阐述对模块进行详细设计的思想。3.2. 模块a3.2.1. 详细设计根据模块概要设计详细描述对于模块内对象的实现,包括对象的职责、属性、方法、对象内功能的流程图、对象关联的类、对象的异常。(需要绘制的主要为类图)附录六自定义异常的原则 “本文是exception处理的一篇不错的文章,从java exception的概念介绍起,依次讲解了exception的类型(checked/unchecked),exception处理的最佳实现: 选择checked还是unchecked的几个经典依据 exception的封装问题 如无必要不要创建自己得exception 不要用exception来作流程控制 不要轻易的忽略捕获的exception 不要简单地捕获顶层的exception关于异常处理的一个问题就是要对何时(when)和如何(how)使用它们做到了然于心。在本文中我将介绍一些关于异常处理的最佳实践,同时我也会涉及到最近争论十分激烈的checked exception的使用问题。作为开发员,我们都希望能写出解决问题并且是高质量的代码。不幸的是,一些副作用(side effects)伴随着异常在我们的代码中慢慢滋生。无庸置疑,没有人喜欢副作用(side effects),所以我们很快就用我们自己的方式来避免它,我曾经看到一些聪明的程序员用下面的方式来处理异常:public void consumeandforgetallexceptions() try .some code that throws exceptions catch (exception ex) ex.printstacktrace(); 上边的代码有什么问题么?在回答以前让我们想想怎样才是正确的?是的,一旦程序碰到异常,它就该挂起程序而“做”点什么。那么上边的代码是这样子的么?看吧,它隐瞒了什么?它把所有的“苦水”往肚里咽(在控制台打印出异常信息),然后一切继续,从表面上看就像什么都没有发生过一样,很显然,上边代码达到的效果并不是我们所期望的。后来又怎样?public void somemethod() throws exception上边的代码又有什么问题?很明显,上边的方法体是空的,它不实现任何的功能(没有一句代码),试问一个空方法体能抛出什么异常?当然java并不阻止你这么干。最近,我也遇到类似的情景,方法声明会抛出异常,但是代码中并没有任何“机会”来“展示”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025自考专业(计算机信息管理)复习提分资料附参考答案详解(夺分金卷)
- 2025年一级建造师测试卷及完整答案详解【易错题】
- 2025年房地产营销顾问项目启动指导合同
- 2025年度汽车车身贴膜与防护服务合同
- 2024年收银审核员试题预测试卷附参考答案详解【综合题】
- 中班音乐教案及教学反思
- 施工安全员a证考试及答案
- 鹿城区安全员证考及答案1
- 2024年自考专业(金融)自我提分评估含完整答案详解(典优)
- 2025年汽车机修考试题及答案
- 创伤记忆的集体性遗忘-洞察及研究
- 浙江科技大学《高等数学Ⅱ》2025-2026学年期末试卷(A卷)
- 13 唐诗五首《钱塘湖春行》课件
- (高清版)DB11∕T 2456-2025 消防安全管理人员能力评价规范
- 胎心监护及并发症处理
- 锁骨骨折术后护理
- 酒店餐饮部主管考试题库
- 产业策划投标方案(3篇)
- 眼科常见疾病及其用药
- 脑疝患者的急救及护理
- 2025年广西专业技术人员继续教育公需科目(一)答案
评论
0/150
提交评论