zoukankan      html  css  js  c++  java
  • 探索:分析一下别人的项目开发经验

    例1:

    开发某个项目里某个模块,通常都遵循一个指导,并有一个一般化的流程,在做任何事情之前,有个规划和原则是明智的,无论是核心代码基础设计,还是界面基础设计,以及遍布整个开发生命周期各个阶段的各种约定,规则,这些都是基础。

        建立核心代码基础架构是一些细小而相关的任务的集合,它提供一些整个模块都需要基础服务,全局变量配置服务,安全基础服务,数据访问服务,调试跟踪服务,日志记录服务,错误处理服务,以及其它一些通用的服务,之所以把这些功能称为服务是因为你在写以后的业务编码的时候可以以松散耦合的方式来使用这些服务,你在设计基础架构的时候要尽量做到这一点,这使你的架构变的灵活,在以后修改架构的时候不至于过多的牵连到其它层次的代码,并且这些写出的架构有很好的可扩展性,在你的架构不支持某项新业务的时候可以在基础架构里添加一个服务来支持它。架构不易写的过于细致,造成过渡设计,也不应该写的过于简单,没有什么实际作用,不要走这两个极端,关于这方面的争论足可以写一篇长篇大论的文章。在ASP里主要就是写一个通用的函数,放在某个固定的文件夹里,在使用某项架构服务的时候把它包含进去,然后调用里面的函数。在ASP.NET里就是写一个或几个独立的类库,供使用的时候调用。关于建立架构大家可以参考一些其它的书籍,推荐看一下《asp.net电子商务高级编程》里使用的那个基础架构和《.net企业应用高级编程》里的那个架构,它们会给你相当多的指导,这两个架构一个适用于小型的电子商务平台,一个适用于中等规模企业的应用平台,后者使用了很多企业应用技术(比如说remoting,性能计数器等)来支持企业级应用的开发。

        界面基础设计,提供一些界面显示的重复元素(导航,脚注等),以及提供软件界面一致性的功能。Web开发里常用css来保持整个站点风格的一致性,然后写一个HTML模板或者输出HTML代码的函数以供多个页的重复调用,在ASP.NET里可以有更多的选择,用户控件,服务器控件等,总之,这些都是一些客户端的技术,需要对xml,xslt,css,javascript,html等技术有个了解。关于如何提高软件的用户体验可以参考其它一些文章,推荐微软出的《windows用户体验》(《windows user experience》)一书。如果你开发的是WinForm程序,建议看看office 2003系列软件的界面和易用性设计,如果你是开发WebForm程序建议看看微软的官方网站,并思考一些东西。

        各种约定和规则包含的方面有很多,有编码约定,命名规则,文件夹设置,命名空间约定,以及各种文档约定等。在设计开发之前尽量确定它们,几乎各种语言都有自己的编码和命名约定,比如说在表示常量的时候都用大写字母,私有变量用下划线开头(类c的语言,如果使vb的话,私有变量可以用下划线结束)。也许你公司内部的各种约定和厂商和标准组织提供的约定有所冲突,但是建议还是使用你的开发小组已经习惯了的命名规则,因为强制学习另外一种规则需要时间。尽量保持这些规则在同一个项目的各个模块里遵循一种原则,保持一致性。文件夹设置也有一套规则,比如说Control目录里放置用户控件,Style目录里放置样式表文件,一个项目分配一个子目录等。类库命名空间用“公司名.产品名.项目名开头”,为每个项目分配有意义的名字空间可以增强程序的可维护性。

        开发流程也非常重要,它来保证你在开发中有条不紊并提高开发效率,避免走弯路。在做完需求后,我们按一下流程来完成开发。首先使目标陈述和问题描述,这包括罗列要实现的功能,权限描述,画用例图,写用例描述等。这个过程的结果为后面的工作提供指导,在开发过程中要经常看看你在这个过程写的东西,并在必要的时候修改更新,因为客户的需求常常也会更新增加的。因为我做的一般都是小工程,我们的项目也不可能遵循大型项目开发流程,不必画完整的UML图,也不遵循RUP,XP,FDD里面的过多规则,一切出自于一种经验。

        描述完功能后开始设计数据库设计完数据库后设计界面,设计完界面后根据界面知道来确定需要的编码,接下来编码,最后测试运行程序。我认为一个能让客户满意的程序最少要满足以下几点:完成主要的功能;安全;界面友好,易用性强;这也是衡量一个软件是否成功的最低标准。

        这一切是一个简化的过程,我无法把他写的过于细致,也没有必要,每个人都有自己的开发习惯,而且这个流程和指导也会随着个人的经验而改动更新。

        下面是我写的一个OA里的一个模块的开发过程,我试图使用我写的以上这些经验。

        工作计划搜索模块

        问题陈述

        1.按部门查看工作计划,指定部门名称;

        2.按人员查看工作计划,指定人员名称;

        3.查看日工作计划,指定起始日和终止日;

        4.查看周工作计划,指定起始周和终止周;

        5.查看月工作计划,指定起始月和终止月;

        6.查看年工作计划,指定起始年和终止年;

       

        权限描述:

        1.管理员,总经理,董事长可以查看所有部门员工已提交的工作计划;

        2.各部门经理,主管可以查看本部门所有员工已提交的工作计划;

        3.每个员工可以查看自己的工作计划,包括已提交和未提交的;

       

        角色设置:

        1.管理员

        2.董事长

        3.总经理

        4.部门经理

        5.员工

       

        部门设置:

        1.市场部

        2.技术部

       

        工作计划表【log】

        【ID】编号

        【UserName】添加用户

        【Title】标题

        【Content】内容

        【AddDay】填写时间

        【Dept】添加用户所在部门

        【Class】工作计划类型,day,week,moth,year分表表示日计划,周计划,月计划,年计划

        【State】计划状态,0为默认值,表示计划未提交,1表示计划已提交 

    例2:阅读代码

    1.阅读分析代码可以从需求逻辑层,业务逻辑层,目录结构层,包结构层,类结构层,方法结构层,代码结构层,方法实现结构层,语法结构层
    2.单页的代码结构 所属包,导入文件和包,公共类(属性,方法),类
    3.理论和实践以及实例相结合,首先通过分析当前所涉及项目中所涉及到的知识点(如果不知道知识点的具体位置,可以通过所看到的文件中寻找关键字,并通过搜索关键字寻找可能关联到的知识点),之后通过实际运作运行观察效果试验分析它的作用
    4.通过观察,分析以及理论和实际运行效果结合去理解和构建对象模型
    5.只需要理解不需要记忆,但是需要将辅助自己理解的信息和让自己理解的对象进行保存,并便于自己今后快速索引并取回来进行回忆
    6.首先分析一个项目中涉及到的知识点,之后寻找和这个知识点相关的系统化的教程资源,首先宏观的化的理解对象系统化资源,之后再去阅读项目根据项目的运行效果和项目的上下文逻辑关系分析
    7.工程化,系统化,层次化,管理型思维
    8.不停的在实践学习研究当中思考观察并总结经验同时将思维过程和思维方法以及经验记录下来
    9.不断在实践过程中更新工程和方法
    10.基于大脑的思维层,基于思维的思维层,基于对象的思维层,基于对象的思维模型层,基于对象的模型层
    11.辅助信息获取方式:@qq好友@qq群@csdn论坛@myeclipse自动提示(代码提示和手册自动索引)@JDK@百度谷歌搜索引擎@身边的编程高手
    12.编程过过程已经要注意程序和工程的易于理解性,可读性,可复用性,可扩展性
    13.通过广撒网获取全面的知识点,之后再根据项目需求确定可能涉及到的知识点,之后再去分析可能用到的知识点,最后再去学习研究能用到的知识点和知识结构
    14. 程序内部知识结构不需要完全学会,只需要知道对象知识的结构以及作用,之后将用到的信息做好记录和备份和存储并做好索引,为今后碰到类似的需求时再次调用提供方便
    15.研究性思维研究性学习,见一个没见过的例子或者项目代码,可以先根据代码的表面意思以及结合上下文进行推测,
    16.首先分析所接触的知识点是否是长久性使用的,如果不是长久性使用的就
    17.当看到一段不明白意思的代码时可以首先结合上下文推测意思,之后实际运行这段代码,最后再去搜索代码中的核心关键字寻找其所关联的知识点,之后根据所有得到的信息确定代码的含义

    实际上在项目开发场景中所遇到的问题远远不止这些,项目逻辑层次上的设计和部署层次上的设计是项目开发的重点;具体场景的问题还需要花更多的时间去探索......

  • 相关阅读:
    windows的80端口被占用时的处理方法
    Ansible自动化运维工具安装与使用实例
    Tomcat的测试网页换成自己项目首页
    LeetCode 219. Contains Duplicate II
    LeetCode Contest 177
    LeetCode 217. Contains Duplicate
    LeetCode 216. Combination Sum III(DFS)
    LeetCode 215. Kth Largest Element in an Array(排序)
    Contest 176 LeetCode 1354. Construct Target Array With Multiple Sums(优先队列,递推)
    Contest 176
  • 原文地址:https://www.cnblogs.com/monion/p/4997952.html
Copyright © 2011-2022 走看看