当前位置: 首页 > news >正文

系统设计与规划--一点总结

有感于目前公司的一个项目产品中遇到的一些问题,结合着自己的设计与开发经历,总结一下系统设计与规划的必要性和知识点,作为将来设计的参考,也与大家一同探讨系统设计中要注意的各方面。

产品简介:该产品是一个WebGIS系统,历经2-3年的开发与实施,目前准备从项目升级为产品,但是在项目实施中暴露出大量问题,使得实施人员和开发人员狼狈不堪,离产品要求还有较大差距,所以领导层意识到问题的严重性,要求进行改造,并让我做一些技术指导和设计上的把关。作为一个未曾参与开发的其它小组成员,以旁观者的身份进行观察,发现

目前存在的一些问题:

1. 系统功能不稳定,很多基本功能都会偶尔冒出问题,搞得实施人员提心吊胆,对产品没信心。
2. 系统中出现一些低级错误,比如分页功能出错,上传文件的功能没有文件类型过滤...诸如此类,有失专业水准。
3. 只支持IE浏览器,但对IE6和IE8不支持,只能强迫用户安装IE7,并且要用兼容模式浏览,使用很不方便。
4. 因为不同项目的需求不同,客户的界面风格喜好不一样,所以为各个项目的修改和定制花费大量精力。
5. 在修正客户所提的bug过程中,时常引入另外的bug,把原本好的功能弄出错误。
6. 对运行环境的测试不充分,遇到64位操作系统或者英文版操作系统,就会出一些问题。
7. 数据库限定太死,目前只支持ORACLE,且限定在特定的版本,如果使用ORACLE的RAC还会很麻烦。
8. 部署太麻烦,手动执行数据库脚本,配置文件有好几个,每次换IP或者数据库发生变动,要手动替换好些字符串,最让人郁闷的是居然把URL地址记录在数据库表里。
9. 没有运行日志记录,所以很难由客户提供运行的异常信息,只能自己调试。

这样的问题其实一直都存在,只是以前我不知道罢了,但实施人员多次反映,客户也一直提出问题,依然得不到彻底的解决,使我更加迷惑。于是通过与开发人员和实施人员的交流,了解到造成困局的一些原因:
1.前期需求不完整,造成后期的变更频繁,开发人员难以应付。
2.数据库访问存在多种方式:JDBC,Hibernate和公司研发的访问组件。
3.最初的项目是在ORACLE上实施,所以一直以此为目标数据库,没有兼顾到其它数据库,也没有测试过RAC环境。
4.由于考虑到一些界面效果,使用了IE7上的特性,造成浏览器不兼容。
5.各功能模块之间的耦合度太高,相互依赖,所以牵一发而动全身,不敢轻易改动。
6.由于缺少测试人员,开发人员只能自己测试,但没有使用单元测试和自动化测试工具,也没有压力测试和运行环境的测试。
7.各个项目同时实施,开发人员身兼各个项目的技术支持和维护,版本维护和代码修改难免出现混乱。

出现这样的局面,其实是多方面的因素:需求分析、过程管理、架构设计、代码质量等。但个人觉得,最主要的还是没有做好系统设计,缺乏整体规划,过早进入编码阶段,使得系统僵化,扩展能力不足,无法灵活应变。所以我才想到了系统设计规划这样一个主题,这个主题也没有什么明确的定义,个人理解是对软件产品和项目的一个分析和评估,考虑系统所涉及的几个重要方面,并做好相应的准备,但不涉及解决方案的细节。同时,系统设计规划也不同于架构设计和详细设计,个人认为后两者更偏向于业务逻辑的分层和模块组织,以及核心类设计,着重于接口定义与封装。根据个人的设计经验,对系统进行分析和评估应该考虑以下几个因素:
1.技术选型
2.分层设计
3.数据库设计
4.技术难点
5.技术标准与行业规范
6.性能设计
7.测试设计
8.调试设计
9.安全设计
10.部署设计

在这所列的10个因素中,前5个是经常涉及的,也是考虑的较多的,但后5个可能考虑的不多。这些因素,每个都是一个很大的主题,背后都有很深的理论知识和丰富的实践素材,没有人能给出一个统一的解决方案。所以,我这里只是用图表的形式进行划分,并列举出每个主题的相关内容和关注点。每个关注点背后也都涉及到很多知识,在系统设计时,需要结合着自身的开发实际和需求进行取舍,并找到适当的应对策略。总之,我的目的是希望在系统设计之初,做好宏观的分析和把握,制定出合适的解决方案,使得系统从容应对后期的需求变更和代码维护。

http://www.jsqmd.com/news/1128814/

相关文章:

  • Kubernetes 系列【1】K8s 完整概述
  • TVA对具身智能领域的核心技术支撑(20)
  • whisper.cpp企业级语音识别部署:架构深度解析与实战实施指南
  • STM32F429NI与LENA-R8的物联网硬件设计与优化实践
  • 003MySQL最常用的数据类型详解
  • Logistic Regression实战:R语言银行营销二分类建模全解析
  • Mi-Create终极指南:免费打造小米手表个性化表盘的完整教程
  • 设计模式——抽象工厂
  • [智能体-636]:AI重构生产价值:从人才红利到数字智能资产的时代更迭
  • 联合类型总解析出 null?Spring Boot 多态 GraphQL 查询的迷失与救赎
  • VLC for Android:打造跨平台全能媒体播放器的终极指南
  • 具身智能体时代,RGB 或将赢下农业 AI 终极战局
  • SSDTTime终极指南:如何用一键工具快速解决硬件兼容性问题
  • 机器学习与模式识别 第十七章 Transformers LLMs 考点压缩
  • TVA对具身智能领域“莫拉维克悖论“的挑战(11)
  • 深耕 XR 安卓底软开发:Framework 定制、渲染优化与系统稳定性实战
  • 3分钟掌握Android投屏神器:scrcpy让你的手机屏幕完美显示在电脑上
  • API网关是微服务架构中的关键组件,位于客户端与后端服务之间,承担统一入口、流量治理和安全管控等职责
  • 魔兽争霸III现代兼容性终极指南:用WarcraftHelper轻松解决闪退卡顿问题
  • 乡村的毛细血管:Nature Trace Farmscapes 2020 Vectorised 数据集
  • 基于51单片机的温度烟雾火灾报警系统—LCD1602显示,ADC0809模数转换
  • CSDN热榜预定!这篇DuckDB教程让我涨粉3000+
  • AUTOSAR VFB介绍
  • [学习方法论]掌握数据结构的长效记忆法
  • Ultralytics:解读C1模块
  • Unity Mod Manager终极指南:3步搞定Unity游戏模组安装与管理
  • TotalSegmentator:如何快速实现医学图像中117个解剖结构的自动分割?
  • OneNote专业迁移指南:终极免费工具助你无损转换到Markdown
  • TVA推动物理AI的具身智能革命(2)
  • AI基础0-人工智能的数学基础