框架,公共模块,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实现的关键,发送异步请求.接收服务器端的响应以及执 ...
随机推荐
- ural 1219. Symbolic Sequence
1219. Symbolic Sequence Time limit: 1.0 secondMemory limit: 64 MB Your program is to output a sequen ...
- 武林[HDU1107]
武林 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 让ORACLE LIKE 时不区分大小写
select * from t_resource_base where xdkm_id = '08975DBC-953B-42DC-AA01-65F168891CEE' and regexp_like ...
- 解决xubuntu的thunar第一次启动慢
装了Xubuntu后,一直都挺好,只不过就是有一个问题老困扰我,就是每次开机打开thunar都是极慢的.... 一直没注意,原来也一直找不到问题,后来今天一搜,唷呵...找到了. 解决方法 thuna ...
- BZOJ1196: [HNOI2006]公路修建问题
Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...
- Linux压力测试工具
1 http_load:http://www.oschina.net/p/http_load 命令行输入man http_load 或者 http_load -h可以看到工具的使用方式: 参数说明: ...
- PTS PCR DTS 详解
一.引言 MPEG-2系统用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中.在ES层,与同步有关的主要是视频缓冲验证VBV(Video Buffer Verifier),用 ...
- Add Customerlize Button in More Button List In Odoo
There're two commen type of actions in odoo: ir.actions.server,ir.actions.client_multi 1.Using ir.ac ...
- c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗? c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗 ...
- PHP 错误与异常 笔记与总结(10)错误处理器测试
关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...