代码重构实践之分层重要性

对于大型软件(有效代码量在10万以上)分层很重要。很多人也知道在软件开发中需要分层,但是因为每个人见识不同,差异很大。

软件分层,到底依据什么进行分层最合适呢?根据业务逻辑?还是根据软件的功能点?还是根据对接外部的或者提供给外部的接口进行分层?其实这些都不是重点,我觉得最重要的是首先根据需求。如果一个软件离开了具体的需求,具体的应用场景,可能都是空谈,都是海市蜃楼。每种软件都会有其特定的应用场景,有的基于某种业务逻辑的抽象,有些是着重于某个应用的中间件,有些是提供一种平台。但是我现在说的不是这些,我想说的是具体某种应用开发的分层。

首先软件分层有什么好处?软件分层,可以清晰地划分各个功能模块和接口,可以达到比较高的代码复用率,并且提高了整体软件的可维护性、灵活性和健壮性,并且提高了开发效率(并行开发)。就好比一个公司,分为业务部、产品部、采购部、财务部、前台等,各个部门各司其职,有条不紊,老板也很轻松,只需要抓各个部门关键负责人就可以了。如果没有这样的划分,业务部插手产品部的生产,采购部插手财务部的报表成本核算,就会造成各个部门之间扯皮,责任划分不明确;到时候出现问题,追究责任(就是定位bug),就很难。

特别在大型或者超大型软件的开发中,肯定有多人协作开发,更需要分层的架构。分层有时会牺牲一些性能,例如数据拷贝或者访问数据库的频率可能会高些,使用的内存会多些,也可能出现一些代码冗余。

一般来说,软件分层是比较直观的。像我们的软件,不是消费类软件,是面向企业、事业单位的,与音视频设备管理相关的,并且还会涉及到第三方设备集成的需求。对于这样的软件,也是采用服务器-客户端架构。并且根据客户需求和行业发展趋势,我们的架构也在不断演进。前几年,我们采用C/S架构,后来随着智能设备的流行,客户需要在移动端上也能操作,所以我们采用B/S架构,这样的好处就是省略了移动端App的开发和维护。同时,前端的架构采用Html5规范,并且为了支持网页上流媒体播放,我们也重构了服务端的视频格式,输出标准的H264或者jpeg图片。

服务端采用C++、Java、Mysql、Tomcat和Spring的架构,这是考虑到性能、历史架构和未来扩展的需求统筹考虑的。我需要强调的是,很多人忽略了软件可维护性的设计,也是通俗来说就是打印日志的功能设计。日志分很多类别,例如:Error、Warning、Info、Performance、Trace等,有的需要保存为文件,有的只需要在控制台打印;有的还需要支持一些调试命令和可视化页面进行展示或者搜索等。好的日志还具有问题解决向导的功能,在出现什么问题时,会自动提示解决方案。

所以,需求不断变化、新技术不断涌现、维护人员不断变动、代码量不断增加的情况下,我们的软件也在不断地演进,到达一定程度时,就需要新的分层和架构。它就像人的身体,是不断成长的。如果在成长过程中,没有给它充足的营养和规范,那么它的身体和精神就会容易出问题,最终就无药可治了。

以上只是我的一些个人感受,如有不对之处,还望不吝赐教。下一篇,我将说说程序员都遇到的问题,Bug!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值