大半夜来这一份总结,心中夹杂着各种各样的心情,酸甜苦辣都有,今天为止,整个项目终于完结了,对于这样一个本可以正而八经吃吃薯片,看看毛片就可以完成项目,最后演变成一个一月之内连续加班105个小时的项目,有自己经验的不足,也有能力不足,写下这样的一份总结,让自己沉下心来反思在一下自己的足与不足,也希望大家可以借鉴和探讨 。

一,项目背景:

我一年工作经验小菜鸟,同事四年工作经验,入驻客户办公室三个月开发周期......

二,项目简介:

常用的办公系统,结合工作流,可惜当时我自己没有看到其中的亮点是某什么内容,一直以为就这样随意的处理,无非就是增删改查,新增表单,自己定义一些常用的工作类来处理就可以了,Ok,那出一个悲剧一号版本

功能点例子:故障相关,可以完成故障单的申请,故障单的处理,故障单的结案。

比如故障申请页面(BreakDown)(一宗罪:思维定势),无非是这样做就可以了:

Add.aspx->故障申请页面,完成故障单的新增内容

Update.aspx->故障单状态变更页面,完成故障单的状态的变更 。

Close.aspx-> 故障单状态的流程终结,完成故障单的生命周期结束。

一个页面各种动作相应的处理简就可以了,同事这样做的,这多么简单,看来我这吃吃薯片,看看毛片,不用加班,就可以把这个project轻轻松松的copy edit处理完就可以了,OK ,拿出代码生成器,你不是五个功能点么,实体层,写出一个内容,直接设计五张表,一下流畅的处理,后面的几个月时间都可以玩过去了,想想都有点小激动的样子。

和同事分配任何后,一个星期过去了..........

正当高高兴兴的提交代码后,我正想着今晚去哪看电影来着,客户业务人员过来问了一下情况,我立马和同事乐呵乐呵的演示代码,业务人员惊叹声中,哇,你们写代码的速度的好快呀,不愧为有经验的人员,可是,我自这个故障单要有不同的角色人员的才能处理,不是任何人都可以这样的做的呀。我冷汗一冒- -!,当时压根就没有考虑这个问题(一宗罪:自以为是。),要不然我改好之后给你看新增的功能。

五个功能点,各种单据的状态对应的人员角色不同,处理的流程不同,那相应的改代码量就是^&*&&*#@$_%$()...........,当时只想着无非就是改代码嘛,大家分工又一个星期过去,Ok,改完了,咱硬编码嘛,无非就是if else 多一点处理.(一宗罪:不知悔改.),就这样处理完结。

终于又可以给业务妹妹演示了,当时的演示的样子我是这样的:

一个流程接着一个流程的演示,

突然业务妹子又提了一个问题,咦,你们这些流程都是写好的,那如果中间要是流程的变动呢

然后我的心情变成这样了

这个.......灵机一动,貌似以前的级联操作就是可以通过节点的操作达到效果,通过下一节点,下一节点就可以达到循环的处理,oh yeah~~~~~无非就是表单设计来进行处理这个流程的变动嘛。(一宗罪:不懂变通)

-----------------------------------------硬代码编码中-----------------------------------------

经过自己和同事的辛苦配置后,终于实现一个类似工作流的小型可配置的流程处理系统了,怀着激动的心情,终于又可以演示了:

当时我的心情是这样的:

突然业务妹子(你妹的能不能一次把话都说完呀!),提出一个问题,那这样的流程能不能实现分支流呢,就是满足什么样的条件,去什么样的流程,满足什么样的条件,去另外一种流程。。。然后我的心情变成这样了,

当时我的表结构如下

Nodeid(节点ID)

PreNodeId(上一节点ID)

NextNodeId(下一节点ID)

NodeName(节点名)

NodeRoleID(当前节点的角色持有人)

以现有的表结构在我现有的基础上无法达到条件的选择和角色的待办和已办功能,我直接&*(%^&%^&%*(**&(&(&(0,,,,,,,,.....

后来加入客户这边的工作流,关于分支流,角色的功能全都可以实现了。。。。

三,总结项目得与失:

1.绝对不要指望同事能承担所有的事情,自己一定要做到充足准备,即使你们之间协调了任务,你也要对他做的东西有所了解。

项目刚开始一个功能点我最初的打算就是一个页面处理:根据传入不同的参数来处理不同的操作行为。而同事的做法一个功能点对应一个文件夹,一个文件夹内对应的就是各种行为下的页面,比如故障功能点:

BreakDownApply.aspx -> 故障申请页面

BreakDownCheck.aspx-> 故障初核页面

BreakDownAccept.aspx-> 故障审核通过页面

......(有多少流程,就有多少页面)

这样做非常不得当,可耻的是我竟然同意他的这种代码,没有在一开始就明确的反对。

在开始写代码之前,一定要明确代码风格,一个项目里面绝对不可以有两种不同的风格存在,又或者自成一派的行为,就是这种看似很小的细节,导致我和他的风格都参杂在一个项目里面,没有任何的代码约束与规范,项目改动难度大,而且冗余代码看的简直要人吐血,有的时候,容忍就是在给自己挖坑!

2.经不住逻辑推演之前的功能和表的设计,就不要写一行代码

在设置这个自己的工作流的时候,发现自己写实现的起来是多么的巧妙,多么的好,疏不知自己设计的类似工作流的东西根本就是功能有限,解决当时的需求是可以的,但是当有更高的拓展性的时候根本就是无解的。(这是导致我的不停加班的重要原因之一.....)

3.任何代码尽量不要做到硬编码,做到可配置

比如文件夹的上传路径,你没有看错,之间我都是写在固定的文件夹之下的。像很多种的代码请遵循能配置就在配置里面的原则,虽然当时看起来有点麻烦,可是事后还是能省下你不少的功夫的,比如如果我在第二次的流程做到可配置 就不会第三的次的返工了。

4.一定要时刻和客户需求人员沟通,不合理的需求都一概否决,决不让步。

一般来说,很多时候自己一些变态的功能设计都是被们程序员给惯出来的,都是自已一步一步的让步导致自己一步一步的无路可走,有些功能在合理的时间内是可以完成的,超出了自己的能力范围或者压根就不合理,没必要自己绞尽脑汁的去实现,也许,业务上的小小变动一下,可以节省你更多的宝贵时间 ,当然,对于合理的需求,一定要深度的挖掘,这样可以有效的避免二次,三次,又或者四五六次的返工。

5.项目建立之初,一定要确定一个统一的风格

风格不仅仅局限于文件夹的摆放习惯,类的命名,以及前台的一些命令,这样的命名方式可以提高整体的阅读性,至少看起来不会凌乱,注释,等等就不一一的阐述了。

6.对于项目的周期一定不要硬着头皮硬上

项目有既定的周期,如果超出周期那加班就成了理所当然的事情了,那反过来,为什么加班是一件理所当然的事情?是因为自己本身的不足导致的,还是说因为需求变更所导致的,如果是因为需求变更所导致,那不要自己憋在心里,一定要拿出来进行说明。

项目总结(一)->项目的七宗罪的更多相关文章

  1. 【MSP是什么】MSP认证之项目集与项目群的关系和区别

    项目群和项目集都是一个意思,翻译时没有统一口径造成的.只要能与项目组合区别开就可以了. 项目集与项目群的区别,不在于那些项目自身,而在于管理者的思想,管理者对待项目的态度.项目集与项目群,首先都是多个 ...

  2. eclipse中 将java项目转换为web项目

    来自:http://jadethao.iteye.com/blog/1331308 eclipse中 将java项目转换为web项目 1.找到项目工作空间目录,打开.project文件,并修改文件,  ...

  3. Android Studio项目转Eclipse项目

    Android Studio项目的目录结构和Eclipse项目不同.如何转换? 以FloatingAction 项目为例:实现向上滑动隐藏悬浮按钮,向上滑动显示悬浮按钮. GitHub 地址:http ...

  4. Java web项目引用java项目,类型找不到

    Java web项目引用java项目,类型找不到 错误信息: java.lang.ClassNotFoundException: org.codehaus.jackson.map.ObjectMapp ...

  5. web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception

    错误信息 项目背景: 一个web项目引用一个java Project,项目中添加了引用,但是打开页面访问,总报500错误.提示:servlet初始化错误. 环境:Eclipse luna JDK: 1 ...

  6. TFS 2010 使用手册(二)项目集合与项目

    1.项目集合 1.1 项目集合创建 打开TFS管理控制台,点击“团队项目集合”. 图1点击“团队项目集合” 图2 点击“创建集合” 然后按照向导一步步完成项目集合的创建. 1.2 项目集合的删除 选中 ...

  7. Android小项目练习之一 项目简介

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

  8. Java_maven构建项目(多模块项目)

    在eclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入ne ...

  9. 【P3O是什么】P3O认证之项目组合、项目群和项目办公室

    如何区分项目组合办公室与项目群和项目办公室? P3O®(Portfolio,Programmed and Project Offices-项目组合.项目群和项目办公室)是由英国商务部 OGC 于200 ...

  10. eclipse中 将java项目转换为web项目 博客分类: Tomcat

      1.找到项目工作空间目录,打开.project文件,并修改文件, 修改如下:      找到:<natures> </natures>代码段,在代码段中加入如下内容并保存: ...

随机推荐

  1. 【PHP后台】接入支付宝

     我使用PHP主要是为客户端做后台使用,并不会做前端网页.   这两天因为公司项目需要,必须接入支付功能,而支付宝当然首当其冲,考虑迭代版本的需要,首先接入支付宝功能,其他的支付功能以后迭代版本的时候 ...

  2. Android学习笔记_66_图片处理专题

    1.图片缩放:不解析整个图片信息. public class DemoActivity extends Activity { @Override public void onCreate(Bundle ...

  3. Kong Api 初体验

    请查看原文: https://www.fangzhipeng.com/nginx/kong/2016/07/11/kong-api-gateway/ Kong是一个可扩展的开源API层(也称为API网 ...

  4. c# 分析SQL语句中的表操作

    最近写了很多方向的总结和demo.基本包含了工作中的很多方面,毕竟c#已经高度封装并且提供了很多类库.前面已经总结了博文.最近2天突然感觉前面的SQL分析阻组件的确麻烦,也注意看了下.为了方便大家学习 ...

  5. 你不知道的javaScript笔记(4)

    类型: JavaScript 有7种内置类型 空值 (null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(string) 对象(object) 符号(sy ...

  6. zepto 基础知识(5)

    81.width width() 类型:number width(value) 类型:self width(function(index,oldWidth){....}) 类型:self 获取对象集合 ...

  7. Vue+Electron实现简单桌面应用

    之前一直使用C#编写桌面应用,也顺带写一些Web端应用.最近在看node时发现常用的vscode是用electron编写的,一种想吃螃蟹的念头就涌了上来. 在网上找了找electron的资料,也研究了 ...

  8. Linux下安装google拼音输入法

    首先安装fcitx,前几天看了很多在ubuntu上能够使用的输入法,有人推荐是搜狗输入法,毕竟是国产嘛,但是会有意外发生,比如说安装之后会产生输入的字符乱码,是一堆看不懂的东西,我就是因为遇到了,然后 ...

  9. css实现下拉菜单功能(多中实现方式即原理)

    引导思路: 1.需要用到的元素:position hover (z-index)  或(overflow)或(display)等等. 关键点就是div的溢出部分的处理. 2.实现过程: 2.1:就是要 ...

  10. js-scroll判断页面是向上滚动还是向下滚动

    原理:那当前的scrollTop和之前的scrollTop对比 如果变大了,表示向下滚动(scrollTop值变大): 如果变小了,表示向上滚动(scrollTop值变小). 方法一:js代码: $( ...