`
jinnianshilongnian
  • 浏览: 21436722 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405505
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2998097
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631764
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257641
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593311
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249015
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847914
Group-logo
跟我学Nginx+Lua开...
浏览量:698257
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780611
社区版块
存档分类
最新评论

我是如何构建一个持续发展的项目

 
阅读更多

说起项目,每个程序员都应该搭建过自己的项目,而我也搭建过数十个企业级或互联网级项目;在做企业级项目时也抽象了一套通过的开发脚手架ES方便开发,也做过一些通用的代码生成工具来生成通用项目架子或一些CRUD的代码。做这些平台或项目的时候或多或少给我一些启示和原则,而这些启示和原则一直指导着我内心方向,时刻指导我不偏离航线。

 

启示录

  • 心中有原则
  • 代码规范化
  • 代码审查
  • 代码重构
  • 代码注释
  • 代码逻辑抽象
  • 工具类
  • 项目闭环
  • 持续改进
  • 自动化

心中有原则

我认为这是搭建和维护项目的灵魂,失去了灵魂,项目虽然能运行,但是未来是没有方向的。来了需求就接,最后就是修修补补。其实我个人认为心中有原则就是有未来预见性,能根据现有需求预见到未来的需求发展。

 

比如我做过的一个项目是需要依赖数十个系统,那么之前的做法是让所有我依赖的系统在变更时调用我的同步接口把数据同步过来,此处存在这么几个问题:假设IP或域名变了,需要通知所有依赖方;假设我们出问题了,各个依赖方需要自己进行重试;假设数据出问题了,需要通知依赖方再同步一下数据;这种方式产生了严重的耦合。因此在设计新架构时我们要完全摒弃这种方法,改用异步通知+拉取依赖数据的方式,如通过MQ通知我们数据变更了,然后通过依赖方提供的接口拉取数据;这种方式的好处:和依赖方松耦合;假设数据有问题再调用下依赖方接口拉取下数据修复即可。因此这个项目的原则就是异步通知+拉取数据。而如果依赖方不提供这种接口我们就无法满足他们的需求。还有一种特例就是有些依赖方的数据可以一天全量同步一次,那么可以使用定时任务每天跑一次;即定时任务+拉取数据。也就是说最糟糕的情况就是使用定时任务+拉取数据机制。

 

比如我们接到一个需求说需要在你们页面上加一个数据来展示,此时要我们在展示页面时调用他们的接口拿到数据然后展示,此处存在的问题是:我们如果强依赖他们,那么他们的抖动将影响我们页面的体验,虽然可以降级,但是我们也不能容忍一点点抖动;因此我们提供的方案还是异步通知+拉取数据,将数据存储到我们自己这边;或者前端异步加载。

 

心中有原则,即必须有一个或几个中心原则指导我们的架构不偏离航线,否则项目将朝着腐朽的方向发展,越做越烂,最后没有几个人能维护这个项目。也不能因为图一时之省事,而为未来埋坑。

 

代码规范化

在写代码时也要有一些原则或规范化的东西来指导。比如我们的项目也分了什么DAO、Service、Controller;而每个人可能叫的名字/开发时思路不一样,那么我们必须统一起来,如:

1、没必要一上来就抽象什么DAO、Service的接口,我的原则就是就一个实现类,因为我项目90%以上情况不需要接口这个东西,为了接口而接口只能使类的数量暴增;

2、所有类名必须见名知意,不能表达含义的全部重构;

3、配置文件的规范化,其实就是分类,按照功能分类配置;

4、比如spring bean的名字可以带上后缀, **Service、**Dao、**RpcService、**HttpService、**DataSource,见到名字后缀就知道这个功能是什么实现的。

 

不同公司的规范化可能不一样,遵循自己公司的一套规范化让代码朝着好的方向发展。

 

代码审查

代码审查对于一些新人我个人觉得是有必要的,因为新人来了不了解我们的原则、不熟悉我们的代码规范;此时应该通过代码审查机制来纠正或着带领着他们朝着我们一个共同的方向发展。通过代码审查可以纠正一些错误的或者不好的实现,找出一种当前最优的方案;还可以让新人意识到一些他觉得无所谓的问题。

 

代码重构

发现不好的或者坏掉的代码必须重构,因为如果觉得这段代码有问题,只要这个项目活着,未来的某一天肯定会出问题。一个没事或以后改吧可能导致一个重大的线上事故。因此发现不好的代码应该找时间立即重构。重构的目标也是架构原则指导的,不符合原则的就应该重构掉。

 

代码注释

很多人可能不屑于写注释,觉得代码就是注释;那我觉得可能是他没见过变态的业务需求,在我们项目中总是存在一些非常变态或着说是魔法代码,这些代码只有当时写的人理解,如果没有注释,你是不了解他那么做的意图的,会觉得很不可思议,但是实际上那就是业务需求。还有一些是我们依赖别人的接口,而这个接口也是非常不可接受的,但是已经有非常多的部门依赖不可能改的,此时也只能默默接受。对于这些变态的需求或者不可理解的需求写注释吧。

 

代码逻辑抽象

抽象是非常重要的一个过程,把项目中一些共性、经常用到的功能做抽象,抽象成公共代码或基础组件,这样对于这些功能就可以反复使用,这个过程是持续的,发现到共性就考虑重构抽象。这种方式可以提升我们的开发效率,简化业务逻辑实现。比如我们做的消息处理系统,只需要简单配置下就可以工作了。

 

工具类

在项目开发过程中,要带领团队成员使用常见的工具类,如apache commons、google guava等。使用这些工具类可以使得代码bug更少(最常见的如空指针异常)、代码更短、更易懂。

 

项目闭环

我们在做项目时发现有人把一个大项目分拆为多个子系统,然后这些子系统作为独立项目,然后当新人来的时候总摸不着头脑。因此我的做法是使用如Maven构建一个大项目,然后拆成各种子模块,整个项目都在一起的。

 

持续改进

技术每天都在发生变化,因此我们要持续学习,了解目前对于项目来说最优的解决方案,然后适当的应用到项目中,进行项目的持续改进,有时候就是需要革自己命,持续发展;但是一定要有好的回滚策略,任何改进不能牺牲稳定性或增加事故率为前提,这个风险要有很好的把控。

 

自动化

对于一些运维或者业务相关的功能我们需要自动化完成;如果我们经常处理一些问题,那么可以考虑为这些问题构建一个自动化工具,减少我们的重复劳动。

 

 

我个人认为要搭建一个好的项目,就是要有好的价值观,不打破自己设立的原则,自觉自律朝着好的方向发展,不偷懒;任何人破坏我的代码我都要想办法纠正过来。

 

 

 

34
16
分享到:
评论
33 楼 cumt168 2017-01-25  
脚手架 es 编译好了,但是跑不起来啊
tao哥,能不能修复一下 git 的 es 项目?
32 楼 天亮了说晚安 2016-07-28  
47848484 写道
尔今尔后 写道
每次看到程序有大于10行以上的代码或者一个方法中有几十行,几百行的代码.我就想问写代码的人,你是在用心写代码吗?


宝贝 任何的代码都是建立在对业务的了解上 以前读别人代码的时候也骂过 后来了解业务以后 才发现自己才是弱爆了 相信你的团队 相信同事 他们不是SB


养成良好的代码编写习惯是很重要的,业务越复杂越不能写在一个方法里,应该提炼出若干个小方法。
31 楼 天亮了说晚安 2016-07-22  
windlike 写道
zhuaiqilove11 写道
没必要一上来就抽象什么DAO、Service的接口,我的原则就是就一个实现类,因为我项目90%以上情况不需要接口这个东西,为了接口而接口只能使类的数量暴增;
虽然我觉得这样很省事 有时候很乐意这样,但抽象接口很有必要啊。实现类里代码量大,很多私有方法,而接口里就很清晰明了,利于别人阅读,还有抽象出接口方便mock测试。
开涛 哥 我也是京东的 正在努力的跟着你学习。

有些人真的以为有了接口才算得上高大上,为了接口而接口,无语。

确实是,没有必要为了接口而接口,以前还跟同事激烈的讨论过哈。
30 楼 haozaige11213 2016-03-16  
的确为了接口而创建接口真是扯淡 , 我们项目一个DAO接口  实现类  一个service接口  实现类 ,我擦, 到最后成品发布 这接口也没体现任何价值 。 还有人在action  web直接操作上数据库,我就一个小小程序员 ,我说不了他 ,我只想说恶心
29 楼 xiaoliuf4565 2016-01-15  
这些原则其实每个teamleader都清楚明白,可当需求变化太快,赶工期的时候,就顾不上这些原则了,为了尽快交付,偷工减料,最后整个项目百病缠身,无药可医,平时养成良好的开发规范真的太重要了,其次,单元测试真的不能少,少了要人命
28 楼 tracyking1986 2015-10-11  
JDK7运行不起来,也不报错,请问怎么解决呢
27 楼 jinnianshilongnian 2015-09-14  
fuhuijun 写道
代码重构 很是让人头痛,手下的人非常抵触,他们觉得相当于重新把功能做一遍,既然现在能稳定运行,为何要重构。。。
涛ge有没有遇到这种情况?

哈哈,这个还真的看团队文化。
26 楼 开奔驰遛宝马 2015-09-02  
dongjianglake 写道
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:native2ascii-maven-plugin:1.0-alpha-1:native2ascii (execution: default, phase: generate-resources)

ES用Maven3导入有这个错误,有解决办法吗?

同问 删了不知道影不影响 请问你运行起来了吗?
25 楼 fuhuijun 2015-09-02  
代码重构 很是让人头痛,手下的人非常抵触,他们觉得相当于重新把功能做一遍,既然现在能稳定运行,为何要重构。。。
涛ge有没有遇到这种情况?
24 楼 开奔驰遛宝马 2015-08-28  
    还是不能运行啊这个es脚手架,既然分享了,就不能教教如何用吗?
23 楼 shenjianhua1984 2015-08-27  
开奔驰遛宝马 写道
涛ge,能配个详细点的安装图文说明吗?弄到半路就不动了


碰到相同的情况,不知道怎么解决
22 楼 开奔驰遛宝马 2015-08-11  
涛ge,能配个详细点的安装图文说明吗?弄到半路就不动了
21 楼 dongjianglake 2015-08-07  
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:native2ascii-maven-plugin:1.0-alpha-1:native2ascii (execution: default, phase: generate-resources)

ES用Maven3导入有这个错误,有解决办法吗?
20 楼 dongjianglake 2015-08-07  
 
19 楼 jinnianshilongnian 2015-08-06  
michaelyang 写道
1、没必要一上来就抽象什么DAO、Service的接口,我的原则就是就一个实现类
关于这点 我不太认可,必要的层次接口或抽象类 我个人觉得还是需要,尤其是当团队开发时,必要的接口和抽象类、能减少层次之间的耦合度.也利于后期的迭代开发

不能一棒子打死,还是看实际场景。 我就是不爽那种上来就抽象的实现。 对外暴露的服务也是走抽象,而不是具体;而内部自己用的有时候何必呢。
18 楼 ymm8505 2015-08-06  
即将成为京东人   多向tao哥学习
17 楼 michaelyang 2015-08-06  
1、没必要一上来就抽象什么DAO、Service的接口,我的原则就是就一个实现类
关于这点 我不太认可,必要的层次接口或抽象类 我个人觉得还是需要,尤其是当团队开发时,必要的接口和抽象类、能减少层次之间的耦合度.也利于后期的迭代开发
16 楼 ldw1228 2015-08-06  
好好体会,持续改进
15 楼 longying2008 2015-08-06  
关注涛&哥!!!
14 楼 47848484 2015-08-06  
尔今尔后 写道
每次看到程序有大于10行以上的代码或者一个方法中有几十行,几百行的代码.我就想问写代码的人,你是在用心写代码吗?


宝贝 任何的代码都是建立在对业务的了解上 以前读别人代码的时候也骂过 后来了解业务以后 才发现自己才是弱爆了 相信你的团队 相信同事 他们不是SB

相关推荐

    基于集对分析的煤炭建设项目可持续发展评价方法

    基于集对分析的煤炭建设项目可持续发展评价方法,张文霞,石晓波,建设项目可持续发展评价是建设项目评价体系中崭新的内容。本文在建立煤炭建设项目可持续发展评价指标体系的基础上,运用集对分析

    可持续发展视野下的煤炭建设项目经济评价的几点思考

    可持续发展战略的实施对煤炭建设项目经济评价体系提出新的挑战。基于工程寿命周期理论,分别探讨了煤炭建设项目经济评价中的项目寿命期和计算期、评价指标和不确定性分析,并建议增加项目对区域经济增长的贡献评价。为...

    建设项目可持续性研究

    建设项目可持续性研究,王克林,,本文回顾了国内外可持续性指标的研究现状,指出了目前可持续发展的研究进展并不平衡,人们过多的把研究目光投向了宏观和中观领域

    2023化工园区可持续发展大会(公开)PPT汇总.zip

    全方位环境解决方案助力园区可持续发展 生化尾水超净脱氮技术 盛瑞工作法助推常州滨开区践行责任关怀 石化行业低碳发展思考与实践 现代煤化工“静脉产业园”与资源化循环利用 园区废盐双极膜电渗析资源化处理技术...

    持续集成在项目构件化开发中的应用研究

    今行业发展的趋势,因此,本文主要研究如何有效的使用持续集成技术应用于项目构件化开发中,力求解决项目构件化开发中传统集成方式带来的问题,减少项目开发成本,提高开发速度,有效的实现根据业务需求提高产品快速...

    项目建设运营管理方案.docx

    数字乡村建设项目的运营管理方案是一个综合性的计划,旨在确保项目的顺利实施、高效运营和可持续发展。以下是一个详细的运营管理方案: 一、项目组织与团队管理 成立项目管理团队,明确各成员的职责和任务,确保...

    信息系统项目管理师 论文 信息系统项目管理师范文

    工程项目管理的新挑战—可持续发展 37 管理的三化与六法 40 管理项目失败的教训 41 论项目管理中的量化管理 43 浅谈如何实行有效的项目管理 45 浅谈项目管理 46 浅谈项目管理机制 54 浅析软件项目管理中的10个误区 ...

    基于SCORE的企业可持续发展安全管理难题破解

    为破解这一安全管理难题,运用企业可持续发展项目(SCORE)先进实用的理念、方法和工具,剖析企业安全生产主体责任不落实的问题、原因以及解决方案,以提升煤矿企业本质安全化水平,助推企业安全文化建设,促进企业可持续...

    数字化转型升级建设项目方案.docx

    数字化转型升级建设项目方案是一个涉及多个层面的复杂过程,旨在利用数字技术对传统业务模式、流程、组织架构和管理模式进行全面升级、优化和创新,以实现企业的可持续发展和竞争力提升。以下是一个可能的数字化转型...

    土木工程项目管理案例,建筑业管理

    (1)总目标:能源发展战略;水资源的利用;区域电网、电量;抗旱防洪的作用;流域环境与生态平衡。 (2)中层目标:移民安置;项目构成与建设目标;生产管理系统;...项目可持续发展与技术改造目标。

    光伏发电碳排放项目建设方案.doc

    本方案旨在推进光伏发电碳排放项目的建设,以实现减少碳排放、优化能源结构、促进可持续发展的目标。 二、项目目标 减少碳排放:通过建设光伏发电项目,减少对化石燃料的依赖,降低碳排放量,减缓气候变化。 优化...

    水美乡村建设项目解决方案.pptx

    以下是一个水美乡村建设项目解决方案的框架: 一、项目背景与目标 阐述乡村水环境现状、面临的挑战以及水美乡村建设的重要性。明确项目目标,包括改善乡村水环境、促进产业发展、提升乡村居民生活质量等。 二、...

    持续集成自动化构建与测试

    Jenkins 是一个可扩展的持续集成引擎。 主要用于: 持续、自动地构建/测试软件项目。监控一些定时执行的任务。 Jenkins拥有的特性包括:易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。易于配置-...

    项目管理论文

    工程项目管理的新挑战—可持续发展 37 管理的三化与六法 40 管理项目失败的教训 41 论项目管理中的量化管理 43 浅谈如何实行有效的项目管理 45 浅谈项目管理 46 浅谈项目管理机制 54 浅析软件项目管理中的10...

    数字农业建设试点项目建设方案.pptx

    综上所述,现代农业产业园创建项目建设方案是一个综合性、系统性的工程,需要政府、企业和社会各方面的共同努力和支持。通过本项目的实施,将有力推动农业现代化和农村经济的发展,为农民增收和农村可持续发展贡献...

    现代农业产业园创建项目建设方案.pptx

    综上所述,现代农业产业园创建项目建设方案是一个综合性、系统性的工程,需要政府、企业和社会各方面的共同努力和支持。通过本项目的实施,将有力推动农业现代化和农村经济的发展,为农民增收和农村可持续发展贡献...

    乡村特色产业发展项目实施方案.pptx

    乡村特色产业发展项目实施方案是一个系统性的计划,旨在推动乡村地区的特色产业发展,提升当地经济水平,增加农民收入。以下是一个具体的实施方案: 一、项目背景与目标 分析当前乡村特色产业发展的现状、面临的...

    软件项目管理师大全(大纲+论文格式+经典案例)

    工程项目管理的新挑战—可持续发展 37 管理的三化与六法 40 管理项目失败的教训 41 论项目管理中的量化管理 43 浅谈如何实行有效的项目管理 45 浅谈项目管理 46 浅谈项目管理机制 54 浅析软件项目管理中的10个误区 ...

    水美乡村建设项目解决方案.docx

    以下是一个水美乡村建设项目解决方案的框架: 一、项目背景与目标 阐述乡村水环境现状、面临的挑战以及水美乡村建设的重要性。明确项目目标,包括改善乡村水环境、促进产业发展、提升乡村居民生活质量等。 二、...

    论文研究 - 微型水力发电在小矿区附近的可持续发展:喀麦隆的应用案例

    这项工作的目的是表明有可能有效地在偏远地区开采黄金,并通过发展微型水力发电(MHP)为这些地区的可持续发展做出贡献。 喀麦隆东部地区蒂孔迪(Tikondi)的采矿社区是一个实际的案例研究。 这项研究的结果表明,...

Global site tag (gtag.js) - Google Analytics