zoukankan      html  css  js  c++  java
  • 系统设计与规划一点总结

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

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

    上图所列内容完全来源于个人经验,定有许多不足之处,还望补充和指正。

  • 相关阅读:
    第8/24周 覆盖索引 临界点
    理解统计信息(1/6):密度向量
    索引碎片检测
    索引碎片
    索引深入浅出(10/10):创建索引时,键列位置的重要性
    索引深入浅出(9/10):过滤索引
    索引深入浅出(8/10):覆盖索引或列包含
    索引深入浅出(7/10):非唯一列上的非聚集索引
    索引深入浅出(6/10):选择正确并合适的聚集索引键
    索引深入浅出(5/10):非聚集索引的B树结构在堆表
  • 原文地址:https://www.cnblogs.com/qingteng1983/p/1784528.html
Copyright © 2011-2022 走看看