一个众人眼中“牛B”的项目是怎样越做越烂的

最近在维护一个项目,接手之前好多运营同学说:“这个可是个牛B的项目,已经运行10来年了,基本满足了我们的运营需求,但是随着业务的调整,运营力度的加大,未来这个项目将会更加重要,所以需要继续维护新功能。”

其实听到这里心里已经忐忑了,一个项目运行了这么久,必定贴了太多烂代码的补丁,适配了许多非人类的需求了,真的会是好项目吗?但是想想运行了这么多年,应该不会差到哪里吧,不然怎么会跑的这么好,相必之前的架构师一定是个大牛,既来之,上吧。

三天后......

目前是维护这个项目的第四天,今天只新增了一个js控制远程接口数据的下拉框的需求。但是已经有点招架不住了,“好戏”带我娓娓道来。

但是也是见识到了这个项目的“牛B”之处。

js,Js,JS!!!

javascript是个好东西,在我每次开始做一个新的web项目的时候,我都最喜欢写js代码,认为它是我的好朋友,我们愉快的将一个产品思维中的无形之物焕然世间之上。

javascript是一个坏东西,当它出现在一个维护N久的项目中,被太多的“调教师”调整之后,我完全被js困在它的牢笼之中,难以摆脱。

因为项目诞生了近10年,可以想见他从最开始的javascript作为胶水语言偶尔出现在asp混编之中;

当web2.0之后JavaScript第一次开始在web前端比重加大,也引入了ajax的使用,开始慢慢重要。

08,09年随着jquery等js库和js-ui的出现,开始在项目中出现各种js库文件;

慢慢随着前端比重越来越重,js mvc,mvvm等框架的出现,不同编程方式的引领潮流,于是项目中出现了各种对于js面向对象的封装和改良,各种class,module,es5,require等等,每次调试总有种穿越百货商场的感觉。

于是为了达到控制dom元素和样式的方式只能在后面不停的增加js代码判断dom状态,修改css样式。

解决方案:

所以以后新项目中,强烈建议引入前端开发框架,不管是knockout,angular,backbone起码整个js代码结构有迹可循,不会像无头苍蝇到处乱撞浪费时间,js代码需要有组织有纪律,这些框架会很好的帮助我们。

多源数据源

第二个问题是太多的数据源头,从之前的单机应用中,数据直接来自于后端,通过循环拼接html元素显示在前端。

而后开始接入其他系统的数据和服务,于是出现了webservice,restful-api,jsonp等。

在加上某些特殊配置的js文件作为数据源。

现在的系统中已经很难找到统一的数据管理源头,需要再不停的判断,不停的截流,再作补贴与修改。

解决方案:

一定要做前后端分离,或者进行统一数据源的管理,服务端可以单独建立一个层进行服务端及外部api的统一封装,前端界面需要建立对应的js工程文件进行数据源的管理,道理就是统一且唯一。

硬编码,白名单

修改了几天,经常有不同的运营同学提交bug,说同样是运营账号为什么会显示不同的界面,结果查看一下是因为系统里面出现了硬编码账号控制,可恶的是硬编码账号会出现在xml配置文件中,服务端代码中,数据库中,js文件中。

一个个改过来都是新需求,结果被运营定位成bug心里甚是难受,bug和需求能是一样的吗?bug对于程序员是多大的伤害啊。

解决方案:

建立白名单,最初开发同学不要相信运营或者产品同学的“肯定”,“确定”的话语,比如“放心,肯定不会改了”,结果换了一个产品照样改,为了不吭自己人,兄弟建立白名单吧。

一定要有产品介入

这个项目的特点是直接运营同学和开发同学对接,运营同学的需求和疑问会直接交给开发同学,最后的问题就是运营根本不知道这个项目和数据在哪里产生,将要去哪里结束的。

举个例子,运营希望在所有的页面都有发红包的功能,开发跟他确认了半天,确定吗?他们会一样吗?数据会正确吗?这样真的好吗?

“确定,确定”

结果后来说,这个页面好像得控制一下账号,但是不是权限;每个页面发送红包的金额应该可以控制的,其实好多活动在这个页面是不需要发红包的。

其实他都不知道在创建红包的时候做配置就可以控制在不同界面上的展示了,但是他看不到整个系统数据的流转。

这个时候就体现了产品同学的作用,他会将运营或者无技术思维能力用户的需求进行加工和确认,对多个需求点进行规划和总结,同时有效调整整个数据业务流程让多方需求都能有效在系统中流转起来。

但是没有产品的结果就是沟通太费劲,开发同学又当客服,又当产品,又当顾问,时间就这样非常不宝贵的浪费了。

每当这个时候突然意识到产品同学的作用了,原来大家是相爱想杀啊。

当没有专门懂业务的产品,有多需求有说不明白的运营提需求,有为了省事轻易相信需求的开发,有没有通过工程及框架限制代码风格而是幼稚的相信开发人员的架构师和技术经理共同造成了这个“牛B”的项目一步步越来越烂。

本文分享自微信公众号 - 服务端技术杂谈(ITIBB2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

20件程序员必须知道的事

38270
来自专栏阮一峰的网络日志

Android,开源还是封闭?

满大街都在谈论Android。 它是当红炸子鸡。许多人觉得,iPhone将受到它的强力挑战。 ? 我也曾经对它充满了期待,但是后来的事态发展,令我改变了看法。前...

36570
来自专栏人人都是极客

计算机的基本组成

严格来讲计算机从诞生到现在经历了很多阶段,已经发展成为一种自动地、高速地、精确地进行信息处理的电子设备,也是20世纪的重大发明之一。

16120
来自专栏SDNLAB

SDN实战团分享(五):基于VCS技术 + NSX 控制平台实现SDDC网络架构

1.数据中心和新的网络架构需要软硬件一体化 看到前面的兄弟关于NSX架构的分享,感到收获良多,Vmware力争实现的平台是一种和硬件解耦,把大部分问题在虚拟化架...

43360
来自专栏Hongten

不使用 Ruby 的十个理由

请注意:这是一篇主观意识的文章。它的目的并不是要说服你使用或者不使用Ruby,或者其他任何技术。这篇文章所涉及到的环境是 Web 开发,而不是通用的编程。我想...

2.8K10
来自专栏带你撸出一手好代码

做游戏与web的区别 - 服务器篇【1】

在一间游戏公司的两个部门待过, 前一个部门以做web开发为主,后一个部门做游戏开发,我在两边都是做后端的。

30220
来自专栏杨建荣的学习笔记

从问题的处理方式感悟学习方法 (r4笔记第39天)

有时候当你碰到一些问题一筹莫展的时候,如果能够看到某个帖子的问题和你碰到的刚好一致,那种欣喜的感觉真是难以形容。 但是有些问题尽管发生的错误一致,处理的方式却不...

32150
来自专栏假装我会写代码

如何打造一个破千 Star 的开源项目

14540
来自专栏花叔的专栏

“公众号数据助手”小程序真的出现了

额,老早之前花叔就想做一个公众号管理相关的小程序,然而微信今天就推出了一个类似的小程序,好了,我不用做了。 回归正题,介绍一下这个小程序吧,通过长按以下二维码能...

541110
来自专栏HBStream流媒体与音视频技术

DirectShow捕获+mencoder+ffmpeg+sox 打造小巧的音视频制作、加工软件

42270

扫码关注云+社区

领取腾讯云代金券