提高项目的可维性:目录组织结构清晰和目录的深度不要多

不使用单一入口的框架开发,代码和目录的数量越来越臃肿,项目维护成本很高

没有反面例子来做借鉴,人的大脑不以为然。下面的截图就是一个中型项目后来变成的目录结构,项目的代码越来越乱,开发人员不愿意去维护这个系统的代码,因为去找代码进行修改,变得很痛苦,代码混乱,目录很众多,找代码会看花眼。

是一套典型是基于discuz的ucenter的系统,随着公司业务量越来越大,随着时间的推移,对系统增加的功能越来越多,后来开发人员越来越多。这样一套系统,维护起来很困难。

具体到里面代码,找代码去修改,特别吃力,很难去定位到这个变量是从哪里来的。程序员在开发的时候,由于使用的不是框架,就不需要遵循放文件的规范。

目录的组织结构可以随意,造成了可以随处丢代码文件,只要include进来就可以使用,代码跑通即可。

下面的根目录可以放很多的文件,只要把核心类include进来仍然可以跑通代码。

因为不是单一入口式的框架,可以随意放很多目录,也放了很多文件

下面的目录已经够多了。

而目录下面还有更多子目录

目录这么多,目录没有规律性,大脑的记忆负担很重。去寻找代码修改,往往看花眼了。做开发的同行会有类似的感觉。

思考:如今深有体会,代码不仅仅是完成功能。而组织结构清晰,其实不是写代码方面。我们做其他事情也需要条理清晰。

从代码的编写,可以看出一个人的条理性。比如,目录分得很有层次性。层级很多,上面拉开都很深的目录。这样看起来的确比较混乱。

目录太多,文件太多,不符合人的大脑清晰阅读的习惯。从文字,从代码其实是可以看出一个人的思路是不是清晰。

其实特别不喜欢phpcms,discuz系统的代码组织方式,比较混乱。多个入口的形式,代码维护起来费力。

由于不是单一入口,所以接手的开发人员可以随便放目录。进行拷贝文件夹,拷贝文件,同名的文件和目录多。很难记忆。

单一入口式框架的代码组织目录的方式会让项目更加清晰

从最外层看项目。public是web资源,可见的。app才是项目的后端代码。

进入到具体的目录下面去

具体到目录里面的代码,看起来也很清晰,找起来很方便。接手的开发人员,要修改一个功能,拉开目录能够猜测到去哪里找。

一个目录下面放二十个代码文件,这个系统都能完成很多的功能了。

上面看,整个项目目录控制在有限的数量内,上面的组织结构,应对的是一个日访问量千万的系统。

即便上面目录文件会比较多,但是有个特点,非常清晰有条理,大脑看起来就很容易知道这个目录下的东西是干嘛的。

静态文件存放的时候也可以非常清晰

css、图片、js文件都是分开目录存放。而有个wap版本涉及到的静态文件,我干脆直接建一个目录算了。其实也可以这样:在css里面建一个wap目录,在img目录里面建一个wap目录,在js目录里面建一个wap目录。

看情况而定。因为本身文件少。所以我干脆分开一个单独的wap文件夹算了。只要符合大脑清晰阅读,条理性,就好。

用户上传的大量图片

可以放到img里面,在里面建一个文件夹,专门区分是什么方面的图片。

1、比如是头像,那么就head_img文件夹。然后文件夹里面按年月日生成文件夹。

2、如果是商品图片,就建立一个goods_img文件夹。

如下,做一个示范:

单独用文件夹命名,看起来也非常清晰。以后迁移图片,也方便直接拷贝这个文件夹里面的图片。

经验积累

一,目录的深度要控制住。层级不能太深。太深的话。找代码修改,找文件。变得比较吃力。看花眼。

在项目初始开发的时候,就规划好目录。这需要经验,能够预料到未来的增长。不过预料不到也没关系,可以模仿其他领域做事的办法,保持清晰和条理性就好了,这样接手的人能够看出项目的清晰结构。

一开始清晰,后面参与开发的成员就会遵循清晰的方式。一开始不清晰,后面每个人就会随便。榜样的力量还是很大的。

不管对其他人有没有明显影响,但是以身示范是非常需要的。连自己都不是那样,周围的人就不会形成正面向上的改进。

二,分类整理。静态和动态文件要分开。项目的静态文件(css,js,图片)都与动态php文件分开存储。

三,共同的部分,要抽出来。避免复制、拷贝相同代码到各个目录去,最后导致项目越来越难以维护,因为很乱,不清晰。

定期重构代码,专门花费时间去做,对于很多公司不现实,因为往往业务方有新的功能总会要求做。所以专门在留时间去做。可能不太现实。

我的思路是,在增加新的功能的时候,发现需要对某部分代码进行重构才能更好的增加现在的功能,那么我就会重构一下。如果不能,那我会先记下来,有时间我就去重构这部分代码。采用逐步替换的方式,摸着石头过河。

随着时间推移,发现其他地方也需要验证手机验证码,那么思考,这一块验证短信验证码代码、生成验证码部分代码,是不是可以抽成共同的部分,封装成两个函数方便其他地方调用。

于是就想抽成一个PhoneVerfiyCode类存这些函数。

我们不是神,无法完全预估到未来的需要,厉害的程序员也不例外,但是我们能够采用定期重构代码的方式来解决。其实在设计模式中也看过类似观点,当发现代码有坏的味道的时候,就要进行清理,重构代码了。

线上的代码在跑,这个控制器有好几处是使用$this->____ValidatePhoneCode($phone_code)的方式进行调用的。

到底是重构代码,还是不重构代码呢?不重构代码,仍然可以正常开发功能。其他地方需要用到相同的验证、生成验证码,复制同样的代码过去?

但是代码会越来越臃肿。冗余、重复的代码会让系统越来越臃肿。维护性越来越差。定期重构代码,能够让系统变得清晰。

所以必须要做。只是什么时间做,如何不影响新功能的开发的前提下、如何修改不至于影响在线上跑代码的前提下去重构一下代码

我的实施方式是:

原来的____ValidatePhoneCode函数不删除,也不注释掉,避免影响到已经调用的代码。而是把这部分代码抽到一个类文件中去。

先在某些地方使用

逐步这样修改,调试完成就与其他功能一起上线使用。下一次可能开发其他功能的时候又修改另外一个调用地方。或者抽空闲时间来做。

最后:等到多个地方都修改成调用封装的类了。就可以把原来的函数注释掉了。第一张图中,那部分几个函数已经注释掉了。所有地方修改后完成后,一定要注释掉或者删除掉代码,不注释掉,会混淆其他开发人员的,以为这里函数可能还是被使用。如果有参考价值,就不删除,只是注释,以便后来可以参考,其他人员知道做了什么。如果完全不需要,就删除掉代码。

思考:如有的同事聊的一样,刚开始的时候,大家开发都比较舒畅,因为项目的功能少,那么目录少,代码量也少,所以没有去关注什么目录规划和代码结构。越到后面,功能多,如果结构不够清晰,代码会越来越臃肿。

发现不好的地方,不利于以后项目维护。要记下来,定期进行优化

目录不能清晰表达意思。

其实可以将wap的模版和pc版的模版放到单独的两个文件夹去:wap和pc

login和index、password目录其实根本就没必要这么分。都是pc页面的模版,统一放到pc文件夹去中

这样找一个模版看起来容易很多。

定期还技术债务,不要等到代码量很多的时候,去整理。那个时候修改的工作量就很大了。因为修改一个地方,要同时改动很多地方。变得不想去修改,不敢去修改。只能继续适应原来的代码结构来编写代码。于是继续这样刹不住车。

时间: 2024-07-29 17:09:28

提高项目的可维性:目录组织结构清晰和目录的深度不要多的相关文章

从头开始写项目Makefile(七):统一目标输出目录

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节我们把规则单独提取出来,方便了Makefile的维护,每个模块只需要给出关于自己的一些变量,然后再使用统一的规则Makefile.这一节我们继续改进我们的Makefile,到目前为止我们的Makefile编译链接输出的目标都在源文件同目录下或模块Makefile同一目录下,当一个项目大了之后,这样会显得很乱,寻找编译输出的文件也比较困难.既然Makefil

如何提高项目成功率

1 概述 古往今来做任何事情都是有成功或失败的概率的,当然做软件项目也不例外.如何降低项目的失败率,提高项目的成功率,确保项目的顺利验收,甚至通过项目运维挖掘新的商机,这也是每一名项目人员共同努力的目标.笔者作为数通畅联的一名技术员工,在工作期间参与了几个项目并且曾负责过公司内部产品前期开发的工作,对项目的把控有一些心得,希望能为大家提供一些参考. 2 预期读者 数通畅联内部员工 IT相关行业从业者 3 阶段分析 沈阳数通畅联软件技术有限公司主要耕耘于应用系统集成领域的专业技术团队,是一个集成产

管理案例:如何提高项目周例会的效率和效果?

案例描述:李工是某互联网公司产品技术部项目经理,李工已拥有近3年的项目管理经验,成功领导了4个小型产品项目的研发工作.2014年5月份之前,李工管理的项目团队都是只有7.8个人左右的规模,他组织召开项目的周例会时,采用的方式如下:周例会一般是半个小时左右的时间,项目组所有成员先各自报告前一星期的工作,然后讨论遇到的问题及解决方案:项目经理李工展示项目组前一星期的工作进展,同时布置本周的工作任务.一直以来,李工对这种方式的项目周例会所取得的效果很满意.2014年6月开始,李工被安排负责一个中等规模

Scrum团队和 PMO协作配合提高项目成功率

在很多公司里,有很多IT项目,特别是在软件公司里,很多开发团队并没有使用敏捷开发来进行项目管理.在某些情况下,尤其在一些公司里IT不是很受重视的,只能作为一个业务支撑部门,敏捷团队面临的主要问题,是缺乏来自高层的有力支持.在这种情况下,基于PMBOK的一些理念,我们需要通过增强项目管理办公室(PMO),来支持项目管理工作的开展. 这里提到了两个团队,一个是负责项目管理的PMO,一个是负责软件产品的Scrum开发团队,他们可以通过目前比较流行的方式方法(XP,Scrum,看板)等进行协作,以提高项

Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

后来我发现在eclipse的Preferences -> Android -> Build中有一项“Skip packaging and dexing until export or launch....”,原来这个选项默认是被勾选的,这个选项的意思是“跳过packing和dexing,直到export或者 launch...”,去掉这个选项即可解决问题. Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

vs2019 指定项目输出目录和指定中间目录

vs2019指定项目输出目录和指定中间目录 vs项目生成的文件默认在和项目同目录下,中间输出的文件在项目文件里面. 因为自己提交git库或者svn库,不方便,所以可以自己把输出文件和中间文件生成的目录指定在项目外. 操作步骤:鼠标右键项目->属性 ..... 弹出如下界面. 修改输出目录和中间目录,我们需要把上面的“配置”和“平台”调到所有配置 因为配置有debug和release,平台有win32和x64.选择所有配置,配置应用.他们都被配置了. 然后点击输出目录的右边不用选项,就会出现向下的

linux运维、架构之路-linux目录结构

1.linux重要目录 重要目录 说明 /etc 存放系统配置文件.服务启动命令的目录 /root 超级管理员的家目录 /sbin和usr/sbin 超级用户命令的目录 /boot 系统引导程序所在的文件目录或分区 /tmp 临时文件目录 /dev 设备目录 /var 变化的目录,一般存放系统日志文件 /home 普通用户加目录 /usr 存放用户程序.数据.帮助文件.二进制命令的目录 /proc 显示内核及进程的虚拟文件系统 2.重要子目录及文件 重要子目录及文件 说明 /etc/syscon

为什么classes目录要放在WEB-INF目录下?

如题,今天项目运行报错 ...NoSuchBeanDefinitionException: No bean named 'shiroFilter' 异常交代的很清楚,web容器没有找到相应的bean.那么,查询后会从两个方面入手: 相应的xml配置文件有问题? 指定的bean没有发现? 然后逐一排查,和同事确认后排出第一个问题,因为同样的代码他的OK运行良好.重点就放到第二项问题了,顺着xml配置查找相应的类文件,都找到了.这下问题就头大了,配置好+文件都在,就是启动不了,难道是需要更换web容

asp.net 创建虚拟目录 iis创建虚拟目录

这几天本人接了个档案管理查询系统的小项目,踩过的坑. 其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以.其中客户要求pdf需要放到其他的盘符,不能和应用程序在一起,这个解决起来非常方便.系统上线了后,因为客户的pdf是分目录放的,如果上百个虚拟目录是手动创建的话,就有点繁琐.因此需要代码实现.记录如下: /// <summary> /// 创建虚拟目录 /// </summary> ///