架构设计和制定开发计划

SSM基于WEB的心理测评系统52223 在线测试 它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。:Spring MVC是Spring框架的一个模块,属于Spring Web Flow的一部分,用于构建基于Web的应用程序。Spring框架旨在解决企业应用开发的复杂性,通过控制反转(IoC)和面向切面编程(AOP)等机制,提高应用的模块化和可维护性。独立设计,修改设计和修改论文,中期检查。 阅读详情

完成需求搜集,在正式进入写代码之前,需要花一段时间设计软件高层架构和制定开发计划。这是一个准备阶段。这个阶段的主要任务是设计一个初步合理的软件架构,对具体开发任务进行人员分配,以及制定落实到比较小时间单位的(比如周)开发进度计划,让之后的软件实现工作进行地更合理、更有条理。

 

软件高层架构设计的主要任务是合理分割整个软件系统,使软件结构更自然、更易扩展,更能适应不断的变化,同时也为开发团队今后进行有效的并行开发创造条件。

对软件高层架构设计,要遵循真正的面向对象的分析和设计(OOAD)原则。正确的面向对象分析设计,强调以三个不同层次的视角(Perspective):概念层(Concept),接口层(Specification),实现层(Implementation),来认识整个系统。在不同阶段用不同的视角来分析系统,可以使我们获得更合理的系统抽象;在不同阶段以不同的视角来处理不同的系统细节,可以使我们在某个特定阶段必须处理的信息量合理地大大减少,从而让我们有限的思维能力和记忆能力更有效发挥功用。此所谓好钢用在刀刃上。提高我们做出正确决定的机会。特别是对于一个比较复杂的软件系统,如果没有合理的思维层次,如果我们从一开始就必须处理所有的实现细节,势必极大地增加我们思考的难度,就会导致“一叶障目”,“只见树木不见森林”的情况。

 

我们分析整个系统,应该首先从概念层入手。概念层是最高的视角。所谓概念,就是对软件功能进行合理的抽象,把软件功能在最大结构上,合理地映射到我们的软件架构中。创造合理的概念,对软件系统进行最自然的分割。在概念层,我们看到的是命名的类和类之间的交互关系。类名代表了类的责任(Responsibility)。这个阶段设计的类是最粗略的、最大结构的。只要把系统最本质的责任分配好、把这些最基本类之间的关系定义清楚,就行了。不要过早的陷入各个类的接口和实现细节。在概念层,我们回答的是系统要做什么(What)。

在设计系统有哪些类以及类之间的关系时,“高内聚低耦合”是衡量我们的类结构是否合理的重要原则。高内聚低耦合的类结构,具有更好的可扩展性和可读性,从而具有更强的生命力。

高内聚(High Cohesion)是指一个类所具有的责任和功能要高的相关性,从而一个类的改动尽量源于单一原因。高内聚的反面是低内聚(Low Cohesion),如果一个类承担了多个不相关或者关联性不强的责任,话句话说,管的事太多,特别是管的相互无关的事太多就造成低内聚。其结果是这个类的实现不容易稳定下来,因为有很多潜在的原因触发它被改动。又由于关联性不高的代码绞在一起,每次修改都充满风险。经常是改好了一个功能的Bug,却给其他功能引入了新的Bug。

低耦合(Loose Coupling)是指一个类不需要跟不必要的类交互来完成其责任。低耦合降低类的可见性,从而使系统的变动和扩展限制在尽量小的范围内,避免不必要的牵一发而动全身的改动。相反,高耦合(Tight Coupling)的类结构让类之间充满不必要的千丝万缕的联系,当遇到不可避免的改动,很难找到优雅、简单的修改解决方案,使整个系统的可扩展性大大降低。

设计模式(Design Pattern)是前人经验的总结,是真确的OOAD原则,如从概念层入手、高内聚低耦合等原则在特定场景的经典应用。通过学习、研究、和应用设计模式可以让我们领略到真正面向对象系统的设计之美。而且设计模式被赋予了众所周知的名字,如Factory, Observer, State, Bridge, Adaptor等等,逐渐成为软件设计领域的“行话”。使用这些“行话”可以极大地方便交流和讨论。所以在软件开发活动中,特别是在软件大结构设计中,多参考设计模式,多使用设计模式的名字来注解我们设计的类结构可以极大地提高交流的效率。

在考虑一个软件系统的可扩展性时,要注意不要走极端。换句话说,要注意平衡类结构的灵活性和由此带来的额外代价,避免不必要的灵活性和可扩张性。应该依据我们对系统的理解,对整个系统可能的演化方向做出合理的预测。对发生概率极小或者根本不会发生的扩展性,我们不能想当然地认为应该加入系统。中国古代的中庸哲学或许是做取舍的最好态度,记住过犹不及。

 

完成概念层的设计后,我们进入接口层。根据类所承担的责任,设计其接口。所谓接口就是类的公有方法(Public Method)。在设计接口时,我们也可以遵循一定的思维层次,首先确定其方法名。方法名要尽量清晰的表示这个方法的功能。至于每个方法的详细输入输出参数和返回值,如果对于表示大结构不是必须的,也可以忽略。在接口层,我们回答的是系统如何做(How)。除了公有方法,其他私有方法和属性可以暂缓考虑,可以不出现在架构设计阶段的类图中。

 

实现层视角是关于如何把我们设计的类和功能通过编写特定编程语言的程序加以实现。下一章将讨论软件实现的问题。

 

关于软件架构设计,最后必须指出,尽管我们在需求搜集阶段对软件功能有了较深理解,又经过了对软件大结构的设计,但是我们这时获得的认识可能还不是完全正确的,在今后的具体实现过程中,当所有细节都跃然出现时,可能有些软件结构还需要做调整。所以对待这个阶段架构设计的态度应该是,既不要因为预计到现在的设计不一定完全正确而一直长时间地停留在设计阶段,也不要因为想到今后会再调整而不认真对待,要做到恰到好处。还是中庸的态度。

 

在目前这个开发准备阶段,另一个重要任务就是制定开发计划,包括确定模块开发顺序,分配开发任务和安排开发进度。

 

确定模块开发顺序:

前面的软件架构设计,分割了系统,为我们制定合理的、支持并行开发的模块开发顺序,创造了条件。确定模块开发顺序的原则一般是底层模块先开发,重要功能的模块先开发。底层模块先开发为上层模块提供开发支持,否则上层模块的开发者需要自己搭建假的底层模块,费时费力。重要模块先开发是遵守“做最重要最紧急事情”的原则。一个软件的所有功能不可能都同等重要的,一定有对用户来说更重要更经常用到的功能,对这样子的功能,我们要首先安排人力物力实现。其实在迭代的开发模式中,每一次迭代周期需要完成的功能,都应该是按照“最重要最紧急”的原则来挑选,使得用户最关心、对用户最有价值的功能,在早期被开发出来。这样做至少有一个好处,当预计的项目开发时间用完了,不得不以减少功能来加快软件发布时,砍掉的功能都是相对不太重要的,因为最重要的在项目早期或者前期已经实现。这样使我们到了项目后期安排、调整开发计划更灵活,而不会到了末了才发现用户最需要的,或者软件的最大卖点没有实现,那样项目延期就成了唯一的选择。

 

人员安排:

开发人员安排的原则是根据项目需要和开发者个人的爱好,给每位开发者安排尽量平均的与其能力相适应的开发任务量。另外,为了在整个开发过程中进行有效的代码审查,最好成对的安排开发任务。所谓“成对”就是每一个具体功能除了一位主创人员,还要一位副创人员。主创人员负责该功能的设计实现,副创人员审查主创人员的设计实现,副创人员最后要到达对该模块跟主创人员相似的熟悉程度。我们都知道代码审查的好处,但是要进行真正有效的代码审查,审查者需要具备相当程度的模块知识才能使审查不致流于形式。让开发人员结成相对固定的开发和审查关系,就可以使审查者从一开始就对要审查的模块具有相当的知识,从而保证了审查的效果。

 

制定详细的开发计划:

开发计划应该详细到比较小的时间单位,比如周。开发计划应该保证整个开发周期有一个比较好的节奏。好的开发节奏对开发过程很重要。整个开发周期将以迭代的方式组织。具体的迭代形式,在后面相应章节介绍。按照迭代周期,设定多个里程碑,作为整个开发周期的检查点。

在这个阶段的开发计划要与开发人员一起制定,最后制定的计划一定要得到开发人员的认可,也就是要得到开发人员的承诺,大家都认可这个计划是现实的。

最后还需要指出,跟软件架构设计一样,这个阶段的开发计划会随着开发的进行不断调整。调整的依据是每次迭代的真实完成情况。

2、嵌入式软件开发计划:从基础到实践 本文详细探讨了嵌入式软件开发计划的制定与实施,强调了书面开发计划的重要性,并介绍了开发计划的核心要素,包括需求分析、架构设计、测试与评审、风险管理及成功标准。文章还提供了开发流程图、风险管理策略及动态调整原则,帮助开发者制定科学合理的开发计划,以提高项目成功率和软件质量。 阅读详情

相关推荐

车载电子电器架构 —— 电气架构开发计划

### 车载软件计划概述涉及对车辆中使用的软件系统的全面规划和管理。车载软件计划不仅关注软件的开发和集成,还涉及软件的生命周期管理、安全性、性能、可靠性、可维护性和用户体验等多个方面。 ### 车载软件计划概述是一个综合性的过程,涉及车辆中使用的软件系统的全方位规划和管理。在当前的汽车行业中,随着智能化、网联化的发展,车载软件的重要性日益凸显。因此,对车载软件进行全面、系统的规划和管理,对于确保车辆的安全、性能和用户体验至关重要。

Soly_kun的博客 394

如何制定软件开发计划

计划的重要性相信各位读者都不会忽略,事情不论大小都有提前计划的必要。晚上约吃饭,要准备一下着装,找餐厅,揣摩邀请的说辞;对于软件开发这样一个高度复杂的脑力劳动来说,清晰、可执行的计划当然是必不可少的。这篇文章我会分享一下我在制定软件开发计划中的一些心得,有些计划是做在整个项目之前的,有些计划是做在项目进行中,对于新feature的开发而制定的;完善的计划给我带来了很多好处,比如清晰的时间预期,减少了

Clifnich 6787

详细解读文字识别工具———Tesseract-OCR

   在尝试破解12306验证码的时候,提前了解了一下应对各种验证码的解决方案,这里主要是学习到了面对文字图片验证码,例如亚马逊、豆瓣等平台的登录时会遇到的情况,效果还不错。 一、工具介绍 ​    Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition...

别看我只是一只羊 2万+

架构设计——架构知识体系

1、什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。 我们主要针对互联网服server系统(类似网站)来定义架构:架构是系统的骨架,支撑和链接各个部分,包括组件、连接件、约束规范,以及指导这些内容设计与演化的原理。 组件:类似应用服务,独立模块、数据库、nginx等等、 连接件:分布式调用、进程间调用、调用...

weixin_34413103的博客 3596

室内无人机自主定位:融合Mid360激光雷达与光流传感器的无GPS导航实践

本文详细介绍了室内无人机自主定位技术,通过融合Mid360激光雷达与光流传感器实现无GPS导航。文章分析了技术挑战、硬件配置、算法优化及实战调试,展示了在复杂室内环境中如何实现厘米级定位精度,为仓库巡检、隧道勘测等场景提供可靠解决方案。

weixin_30500105的博客 532

PADS安装教程(超详细)

声明:个人实践 一、工具准备 pads9.5完整破解版百度网盘提取码【wjx9】 链接:https://pan.baidu.com/s/1pIP6BJO435ssmF7Hjwyz8A 提取码:wjx9 安装环境:win10 64位 二、开始解压安装 关闭杀毒,exe以管理员身份运行 点击【skip】,不然又得licese 点击【agree】 点击【modify】 设置安装的工具、路径及工程路径 设置完成后,开始【install】 在之后注册。 将Crack复制到PADS安装目录

qq_42057393的博客 5万+

项目开发计划制定

制定一个项目的开发计划,提前要做很多工作,需要先把这些内容明确清楚,然后再制定。具体工作整理如下: 明确项目时间 项目开始前,首先明确了解项目的里程碑时间节点需求,此处很重要,要根据时间倒逼着做工作,如果严格按照软件工程的学术要求走的话,项目实施是无法正常运行的。毕竟中国的项目有中国的特色,很多情况要看用户的要求。否则如果按部就班的做调研、整理需求文档、进行设计,在开发,这个时间是远远不够的。所...

tooler的博客 1万+

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

直播软件搭建计划制定,明确思路更有开发头绪

制定直播软件搭建的开发计划,提前要做很多工作,需要先把这些内容明确清楚,然后再制定。 具体工作整理如下: 明确项目时间 直播软件搭建开始前,首先明确了解项目的里程碑时间节点需求,此处很重要,要根据时间倒逼着做工作,如果严格按照软件工程的学术要求走的话,直播软件搭建实施是无法正常运行的。毕竟中国的项目有中国的特色,很多情况要看用户的要求。 否则如果按部就班的做调研、整理需求文档、进行设计,在开发,这个时间是远远不够的。所有很多工作其实是按敏捷的思路开展,先把主要的问题明确了,有个总体方向性的设计,就可以先制

m0_58374018的博客 295

从零构建Elasticsearch MCP代理:自然语言查询背后的技术揭秘

本文深入解析如何从零构建Elasticsearch MCP代理,实现自然语言查询的技术架构与实战应用。通过MCP协议与Elasticsearch的结合,系统能够将自然语言转换为精确的DSL查询,提升非技术用户的数据查询效率。文章详细介绍了核心架构、DSL生成引擎、端到端系统搭建及生产环境最佳实践,为开发者提供全面的技术指南。

lll78的博客 877

TSmaster CANFD配置避坑指南:为什么你的PCAN盒不支持最新版本?

本文针对TSmaster配置PCAN硬件进行CANFD通信时的常见问题,提供了详细的避坑指南。重点解析了CANFD配置中TSEG1等关键参数的理解误区,并深入探讨了TSmaster新版本与PCAN硬件驱动之间的兼容性变化,帮助工程师快速定位并解决连接失败或无法发送CANFD报文等问题。

alpha的博客 542

经验帖:个人开发时请不要忽视前期业务逻辑和项目架构的设计

个人开发虽然自由度高,但也容易因为缺乏规划而陷入困境。通过我的经验教训,我深刻体会到前期业务逻辑梳理和项目架构设计的重要性。花时间梳理业务逻辑,绘制流程图,识别潜在矛盾。设计模块化、可扩展的架构,记录架构设计。制定清晰的开发计划,设定阶段性目标。通过原型和小规模测试验证设计,尽早发现问题。希望我的经验能给其他独立开发者一些启发。开发过程中,技术问题可以通过学习解决,但设计上的缺陷却可能让你事倍功半。让我们从一开始就重视前期规划,为项目的成功打下坚实基础!原创作者: RTower。

weixin_40462877的博客 24

安装Codex时出现无法下载此应用和Microsoft Store初始化失败的解决方案

本文主要介绍了安装Codex时出现无法下载此应用和Microsoft Store初始化失败的解决方案,希望能对使用codex的同学们有所帮助。 文章目录 1. 问题描述 2. Windows 解决方案 3. Mac解决方案

weixin_43178406的博客 7万+

前端项目负责人在项目初期需要做什么?

点击上方关注前端技术江湖,一起学习,天天进步前言本篇写一下前端项目负责人在项目初期需要做什么?主要分四个方面项目相关这一部分可能看起来没那么重要,但是做项目对于项目的关键信息还是要了解的...

zz_jesse的博客 608

如何将 Fiori Elements Object Page Header 工具栏里按钮用 JavaScript 代码设置成禁用状态

本文介绍了如何在SAP Fiori Elements应用中动态控制Object Page工具栏按钮的可用状态。通过UI5 Inspector工具分析发现,这些按钮的enabled属性都双向绑定到/ui/enabled模型字段。在StatusExt.controller.js中,通过获取按钮ID前缀拼接完整控件ID,使用setEnabled(false)方法即可禁用按钮。关键点包括:1)使用extensionAPI获取视图ID前缀;2)注意事件回调中的this上下文绑定;3)通过修改模型字段可同步更新所有绑定

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 372

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

分享由AI制定一个商城网站的开发计划及推荐的开发语言

本商城网站开发计划旨在创建一个功能齐全、用户友好的在线购物平台,为顾客提供商品浏览、搜索、购物车管理、订单跟踪、在线支付等服务。Python:Python 是一种简单易学且功能强大的编程语言,拥有丰富的 Web 开发框架(如 Django、Flask)和库(如 SQLAlchemy、Pillow),适合快速开发商城网站。Vue.js/React/Angular:这些前端框架提供了丰富的组件和工具,可帮助开发者快速构建复杂的单页面应用(SPA),提高开发效率。以上是一个商城网站的开发计划及推荐的开发语言。

513

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

项目开发计划模板

软件开发计划。

Zsd 2079

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

btop项目管理:开发计划与发布周期管理

在开源系统监控工具领域,btop作为bashtop和bpytop的C++继任者,面临着多平台支持、性能优化和功能迭代的复杂项目管理挑战。如何在一个活跃的开源社区中制定清晰的开发计划、管理发布周期,并确保代码质量,是每个成熟项目必须面对的核心问题。 本文将深入分析btop项目的开发管理模式,从版本规划、发布策略到社区协作,为开源项目管理者提供实用的参考框架。 ## btop项目架构与技术栈 #...

gitblog_00587的博客 701
上一篇: 敏捷原则
下一篇: 需求搜集
xiaohaige
博客等级 码龄25年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值