框架,公共模块,unified思想
最近两周一直在加班加点refactor代码,贡献了2014年最后一个周末和2015年元旦三天假期,终于赶在了sprint结束之前完成。
可见,这个sprint做的并不理想!
项目逻辑本身并不复杂,从数据库取数据,进行相关分析计算,然后在前端以图表的形式呈现结果。用的是Django框架,前端图形采用jqplot实现。
项目有三个平行的模块,各模块都要实现数据呈现,报表导出,图片下载功能,但各模块之间互不相关,额外的要求是三个模块都要有很强的可扩展性,以便以后增加新的查询选项,能快速实现。
三个人分别负责一个模块,而且在plan meeting的时候,确保了每个人都了解自己模块的功能需求。
大家都开始了自己模块的设计与实现,第一个星期:基础架构和核心代码实现,第二个星期:前端数据呈现和下载图表实现,第三个星期:互相测试和code review,第三个星期三开始:推倒,重构。。。
就是这么的无奈,在功能都实现了的前提下,又几乎重新编写了后端代码和重新修改前端template。
问题出在了unified思想上:
三个人分别在三个层次实现了unified:template数据呈现一致性,View层数据处理一致性,modle层参数化查询数据库一致性。
每一个模块都为了自己的unified实现做了相应的代码架构,别的模块想复用其代码很麻烦,甚至到了后期,因为命名不一致,连js代码都没法重用,只能眼睁睁的看着非常好的实现无法移植到自己模块中,从而,没法能够做到整个项目的unified。甚至,以后维护代码反而增加了复杂度,如果三个模块添加同样的查询条件,反而要分别进行三套不同的实现,而且因为不同的template元素id,同样的逻辑要写好几个功能相同的js方法。
为什么出现如此结果:
团队成员分布在不同的城市,没有及时沟通机制,交流不畅肯定是造成问题的一个原因。
在项目plan的时候对如何实现并不是很清楚,也没有人发表意见和建议,进行深入的讨论,导致摸着石头过河,每个人都按照自己的想法摸索,以完成功能为主,并未重复考虑,特别是整体考虑项目的架构和可扩展性。
三个人当中有一个比较熟悉项目逻辑,可是没有能够站出来主动负责承担公共代码实现,比如统一呈现数据的前端实现,相应的js验证代码,从而导致前端实现五花八门,甚至没有统一的命名规范。
总之,问题很多,没有及时有效的交流,没有做到充分的思考,没有搭好框架,没有公共处理模块的统一控制。。。
不是敏捷团队,但是按照敏捷的模式去推进,可是没有sm,没有daily stand up meeting等机制保障,只是靠着user story,靠着task去跟进项目,只会导致代码实现杂乱无章,大家只focus在自己的user story上,缺乏体眼光,只快速完成task,没有考虑集成。最终导致了代码的大量重构和返工,同时也增加了软件的熵。
框架,公共模块,unified思想的更多相关文章
- Java-单机版的书店管理系统(练习设计模块和思想_系列汇总)
介绍: 本软件系列到此,我已经全部写完了. 项目练习目标 : 1.Java应用程序基本分析 2.培养面向对象编程的基本思想 3.Java基本设计模式综合应用 4.掌握分层和接口的基本设计 5.构建合理 ...
- Thinkphp5笔记六:公共模块common的使用
common模块属于公共模块,Thinkphp框架,默认就能调用. 实际用处:任何模块都可能用到的模型.控制.事件提取出来放到公共模块下. 一.公共事件 apps\common\common.php ...
- Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)
今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> ...
- Util应用程序框架公共操作类(七):Lambda表达式公共操作类
前一篇扩展了两个常用验证方法,本文将封装两个Lambda表达式操作,用来为下一篇的查询扩展服务. Lambda表达式是一种简洁的匿名函数语法,可以用它将方法作为委托参数传递.在Linq中,大量使用La ...
- Atitit 图像处理 公共模块 矩阵扫描器
Atitit 图像处理 公共模块 矩阵扫描器 1.1. 调用说明对矩阵像素遍历处理调用1 2. 矩阵扫描器主题结构1 2.1. 主要说明 从像素点开始填充矩阵1 2.2. 得到模板中心点所对应的图像坐 ...
- Util应用程序框架公共操作类
随笔分类 - Util应用程序框架公共操作类 Util应用程序框架公共操作类 Util应用程序框架公共操作类(五):异常公共操作类 摘要: 任何系统都需要处理错误,本文介绍的异常公共操作类,用于对业务 ...
- (三):C++分布式实时应用框架——系统管理模块
C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...
- 谈谈CommonsChunkPlugin抽取公共模块
引言 webpack插件CommonsChunkPlugin的主要作用是抽取webpack项目入口chunk的公共部分,具体的用法就不做过多介绍,不太了解可以参考webpack官网介绍: 该插件是we ...
- jQuery系列 第八章 jQuery框架Ajax模块
第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...
随机推荐
- POJ2699 The Maximum Number of Strong Kings(最大流)
枚举所有Strong King的状态(最多1024种左右),然后判断是否合法. 判定合法用网络流,源点-比赛-人-汇点,这样连边. 源点向每场比赛连容量为1的边: 如果一场比赛,A和B,A是Stron ...
- intro.js 页面引导简单用法
下载地址:http://pan.baidu.com/share/link?shareid=1894002026&uk=1829018343 <!DOCTYPE HTML PUBLIC & ...
- Remove Duplicates from Sorted List II leetcode java
题目: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct ...
- WordPress折腾日记
安装环境: 我开了个虚拟机xp....用xampp的整合包..下载地址https://www.apachefriends.org/zh_cn/download.html 跟着安装就行了.最后打开xam ...
- JBPM表达业务流程(流程定义语言)
业务流程包括三部分: 活动 Activity / 节点 Node (有很多种,不同的类型有不同的功能,必须要有一个Start Activity) 连线 Transition / 转移 (从一个Acti ...
- 4.用文本编辑器输入课堂上练习的Hello.java,并在JDK环境下编译和运行。请将程序编译、运行的结果截图,填入下框中。
一开始报错是因为在文本框了的:用的是中文下的,应该用英文下的;
- SSH+Oracle10G抛Disabling contextual LOB creation as createClob() m
在使用Oracle10G时候,实体类使用了CLOB字段,结果抛了Disabling contextual LOB creation as createClob() method threw error ...
- visio studio2008 删除最近的项目
visio studio2008 删除最近的项目 创建move.bat: @echo off @REG Delete HKCU\Software\Microsoft\VisualStudio\9.0 ...
- JLINK SWD下载模式引脚
SWD接4个脚就可以 RESET可以不用接
- PROTEL99SE封装说明
PROTEL99SE封装说明 路板上的焊盘间的距离也就是300mil(因为在电机领域里,是以英制单位为主的.同样的, 对于无极性的电容,RAD0.1-RAD0.4 也是一样:对有极性的电容如电解电容 ...