框架,公共模块,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,没有考虑集成。最终导致了代码的大量重构和返工,同时也增加了软件的熵。

时间: 2024-08-07 16:15:58

框架,公共模块,unified思想的相关文章

Java-单机版的书店管理系统(练习设计模块和思想_系列 四(2) )

说明: 本博客为补全上篇-Java-单机版的书店管理系统(练习设计模块和思想_系列 四(1) )的,所以如果不懂,请先看上一篇. 本系列都是我一步一步学习来的, 所以,可能比较适合初学设计模块的人来学. 现在补全我目前写的所以代码: 公共类: 用户类型枚举:UserTypeEnum类 package cn.hncu.bookStore.common; /** * 功能:用户类型的枚举!<br/> * 定义在公共模块.<br/> * 变量:<br/> * ADMIN(1,

auth模块 + 插拔式思想

auth模块 + 插拔式思想 一.auth模块 ? django为方便实现用户功能,包括登陆注册注销修改信息等,提供了auth模块,实现操作简单化. 1.1 常用方法 ? 超级用户: # run manage.py Task: createsuperuser ? authenticate():用户认证,认证成功会返回User对象,不成功返回None from django.contrib import auth def login(request): if request.method == '

Node.js笔记(0003)---Express框架Router模块学习笔记

这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: Map logic to route parameters. 大概意思就是路由参数的映射逻辑 这个可能一时半会也不明白其作用,尤其是不知道get和param的执行顺序 再看看源码里面的介绍: Map the given param placeholder `name`(s) to the given callbac

Util应用程序框架公共操作类(十二):Lambda表达式公共操作类(三)

今天在开发一个简单查询时,发现我的Lambda操作类的GetValue方法无法正确获取枚举类型值,以至查询结果错误. 我增加了几个单元测试来捕获错误,代码如下. /// <summary> /// 测试值为枚举 /// </summary> [TestMethod] public void TestGetValue_Enum() { var test1 = new Test1(); test1.NullableEnumValue = LogType.Error; //属性为枚举,值

SSH框架分模块开发

------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring 核心配置文件」 2.把 Spring 核心配置文件中的一部分配置放到单独的 配置文件中,再在 Spring 核心配置文件中引入单独的配 置文件即可 3.一般情况下,建议把 Action 对象的配置放到单独的 配置文件中 「因为其它的配置基本不变,只有 Action 对象的配置在 不断重复」 如: u

python+selenium,如何把登录模块设计为公共模块?

周末又到了,好开心,又可以休息两天了!最近都忙着买电脑的事情,在这里告诉大家,尽量别去买惠普的电脑吧,我买的才不到一年,现在基本就是个废铁了.心痛我的钱钱! 最近有几个测试伙伴问我,说自己用python+selenium开始写完登录和注册模块的代码了,后面准备写其他模块的时候,发现很多模块都是先登录才能执行的,所以就问我,要是每个模块都把登录写进去, 那不是太麻烦了,应该可以写个公共的模块的.答案是肯定的.但这个公共模块是否就是把登录的执行成功了就可以了哦?这里就看下我的代码是怎么写的,如下图:

【转】前端工程化-公共模块的依赖和常用的工作流

题记: 一个人的项目,还有工程化的问题嘛? 我们在推进模块化和组件化的过程中,肯定会不断的沉淀出我们项目的模块和组件.对于这些沉淀出的模块和组件怎么管理?另外怎么依赖也是个问题? 你真的想这样嘛? var BreadCrumb = require(‘../../../../uikit/breadcrumb’); //真心ugly. 之前也尝试了很多的不同的解决方案,最终发现npm2.0的local module是最简单的,而且最符合模块化思维,我们可以把我们的模块按照功能进行划分. 比如: ui

Vue设置导航栏为公共模块并在登录页不显示

1.公共模块的内容可以放在App.vue中但是通常登录页面是不需要导航的,那么就需要规避登录页这时,就可以采用keep-alive结合$route.meta来实现这个功能.keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染.$route.meta则可以选择让需要的页面才展示.修改App.vue,如下: <template> <div id="app"> <div v-if="$route.meta.kee

MVC框架三大模块

1.Routing模块 Routing机制与MVC5的URL解析处理流程基本是相同的,很多的接口和类像IRouteHandler.IHttpHandler.IController .RouteBase.RouteTable.RouteDictionary.DefaultControllerFactory以及AreaRegistration名称是相同的功能是类似的,也可以是看做MVC5路由机制的简化版本或者是Artech MVC5书中路由实例的强化版本.在Web项目的启动阶段,设置的路由模板(包括