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

LightGBM参数调优实战:从基础到高级技巧 本文深入探讨了LightGBM参数调优的实战技巧。文章从理解其Leaf-wise生长策略的核心逻辑出发,系统性地介绍了分层调参策略:首先调整控制模型结构的参数(如num_leaves),其次优化学习能力参数(如learning_rate),最后通过正则化与随机化参数提升泛化能力。文中还提供了从建立基线到最终微调的完整实战流程与高级避坑指南,帮助读者高效提升模型性能。 阅读详情

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

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

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

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

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

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

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

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

【AVRCP】规范精讲[19]: 媒体属性全解析,让你的蓝牙设备显示完整歌曲信息 AVRCP协议中的媒体属性是蓝牙音频设备传输歌曲元数据的关键,包含标题、艺术家、专辑等32位ID标识的键值对信息。规范要求字符串属性必须使用UTF-8编码,但乱码问题频发(如中文显示异常),主因是设备未遵循编码标准或使用GBK等非规范格式。常见问题包括信息不全(仅显示标题)、封面缺失(因带宽限制或格式不支持)及更新延迟(通知机制未启用)。解决方案包括强制UTF-8编码、优化封面大小(如300x300像素JPEG)、主动请求缺失属性。Android示例代码展示了通过广播接收器解析媒体属性的方法。 阅读详情

相关推荐

LLaVA-1.5:多模态视觉问答新突破

LLaVA-1.5在多模态视觉问答(VQA)任务中取得了显著进展,主要得益于视觉-语言连接器的优化和特定任务数据集的增加。通过将连接器升级为两层MLP,模型在处理视觉与语言关系时表现更佳。同时,引入如OKVQA、OCRVQA等数据集,增强了模型在复杂视觉推理任务中的能力。在11个基准测试中,LLaVA-1.5超越了现有方法,展示了其强大的多模态能力。此外,模型通过提升输入图像分辨率、扩展语言模型和改进多语言能力,进一步提升了性能。尽管在短格式回答任务中初期表现不佳,但通过调整提示格式和微调,其性能显著提升

weixin_57060548的博客 945

代码分层介绍

这样可以使得代码结构清晰、可读性强,并提供了更好的可维护性和扩展性。- 支持代码的可扩展性:当需求发生变化时,可以通过增加、修改或替换某个层次的代码来实现功能扩展,而不会对整个系统产生过大的影响。通过将代码按照职责和功能进行划分,每一层都有明确定义的责任和接口,实现了代码的解耦和模块化。代码分层是一种软件架构的设计模式,将代码按照不同的职责和功能进行划分和组织,使得代码更加可维护、可扩展和可测试。- 提高代码的可维护性:不同层次的代码分离,使得修改和维护更加方便,一个层次的变化不会影响其他层次的代码。

2080

别再死记硬背公式了!用ADS手把手教你仿真一个4GHz镜像抑制混频器(附完整工程文件)

本文详细介绍了使用Keysight ADS软件设计和仿真4GHz镜像抑制混频器的完整流程。从理论分析到实际工程实现,涵盖分支线耦合器设计、二极管建模、噪声系数仿真及性能优化等关键步骤,帮助工程师摆脱公式死记硬背,掌握实用的射频电路设计技能。附完整工程文件,可直接应用于实际项目开发。

weixin_28683391的博客 495

项目重构-项目代码分层的意义

项目重构-项目代码分层的意义 分层设计是什么?有什么好处? 分层设计将软件划分成若干层,每一层只解决一部分问题,通过所有层的协作来完成整体的目标。一个复杂的问题通过分解成一系统子问题,这样就有效的降低了每个子问题的规模与复杂度。 分层设计带来的好处: 降低了系统软件的复杂度。将一个复杂问题通过分解,分而治之。 功能的复用和封装。 项目分层的目的 保证多成员参与的项目保持视觉一致性; 迭代与交接可以更加无缝; 减少设计出错率; 提升团队工作效率; 直接目的是约束设计行为,最终目的是确保设计合理统一 如

CoLiuRs 1376

Reality Capture控制点修复/合并模型

通过增加控制点/修改对齐设置参数来修复模型被分为两个部分的解决方法

草履虫建模的博客 5241

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

为什么要做代码分层架构?

软件分层架构是通过层来隔离不同的关注点(变化相似的地方),以此来解决不同需求变化的问题,使得这种变化可以被控制在一个层里。对于功能性需求,将复杂问题分解为多个容易解决的子层问题;对于非功能性需求,可以提升代码可扩展性。总结来说,代码分层架构是一种软件架构设计方法。从软件的功能性需求角度看,分层是为了把较大的复杂问题拆分为多个较小的问题,在分散问题风险的同时,让问题更容易被解决,也就是我们常说的解耦。从架构(非功能性需求)角度看,分层能提升代码可扩展性,帮助开发人员在相似的变化中修改代码。其实,

我乐了的博客 1321

保姆级CVE-2018-17066漏洞复现 DLink命令注入漏洞(更新完结)

之后按照之前复现的方式一样 我们丢到kali中执行binwalk解析。之后为了模拟 可以在kali里安装qemu-mipsel。在bin目录下可以尝试将goahead的环境搭配好。固件官网可以进行下载。

weixin_51339377的博客 882

3.设计模式之分层思维:为什么要做代码分层架构?

设计模式之分层思维

卜卦的博客 2838

发那科机器人编程软件fanuc roboguide授权补丁_工业机器人离线编程与应用:ROBOGUIDE V8.3版本的工程文件创建...

欢迎关注我们ROBOGUIDE是发那科机器人公司提供的一个离线编程工具,可模拟现实中的机器人和周边设备的布局,通过虚拟TP示教来模拟机器人的运动轨迹,同时可以验证方案的可行性和准确的周期时间。ROBOGUIDE是一款核心应用软件,具体的还包括搬运、弧焊、喷涂等其他模块。以最新的8.3版本为例进行讲解,对于未注册的版本将有30天的免费使用期限。开始菜单击开始菜单中的HandingPRO启动程序,第一...

weixin_39791446的博客 2924

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

Airtest进阶篇,主要分享如何提高脚本稳定性+如何批量运行脚本生成测试报告!

程序员小杨哥的博客 2569

浅谈单片机程序设计中的“分层思想”

“分层思想”并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。 参考了市面上各种各样的嵌入式书籍,MCS-51,AVR...

xiaogu0322的博客 506

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

常见代码重构技巧(非常实用)

为什么要重构 项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。 造成这样的原因往往有以下几点: 编码之前缺乏有效的设计 成本上的考虑,在原功能堆砌式编程 缺乏有效代码质量监督机制 对于此类问题,业界已有有很好的解决思路:通过持续不断的重构将代码中的“坏味道”清除掉。 什么是重构 重构一书的作者Ma

a1405的专栏 2273

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

非常实用的代码重构技

发表于广东多年开发经验,专注软件开发、架构;推送 微服务,分布式,Spring全家桶,Redis,Linux,Nginx等技术,欢迎一起学习、探讨。394篇原创内容公众号关于重构代码的坏味道如何重构质量如何保证1、为什么要重构项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。

竹林幽深 266

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

常见代码重构技巧

目录 常见代码重构技巧 关于重构 为什么要重构 什么是重构 代码的坏味道 坏代码的问题 什么是好代码 如何重构 SOLID原则 单一职责原则 开放-关闭原则 里氏替换原则 接口隔离原则 依赖反转原则 迪米特法则 合成复用原则 设计模式 代码分层 命名规范 约定俗称的惯例 类命名 方法命名 重构技巧 提炼方法 以函数对象取代函数 引入参数对象 移除对参数的赋值 将查询与修改分离 移除不必要临时变量 引入解释性变量 使用卫语句替代嵌套条件判断 使用

琦彦 1157

新来个技术总监,给公司项目引入了全新的业务架构,堪称最佳实践!

大家好,我是不才陈某~本文开始前,问大家一个问题,你觉得一份业务代码,尤其是互联网业务代码,都有哪些特点?我能想到的有这几点:互联网业务迭代快,工期紧,导致代码结构混乱,几乎没有代码注释和文档。互联网人员变动频繁,很容易接手别人的老项目,新人根本没时间吃透代码结构,紧迫的工期又只能让屎山越堆越大。多人一起开发,每个人的编码习惯不同,工具类代码各用个的,业务命名也经常冲突,影响效率。大部分团队几乎没...

码猿技术专栏 179

javaweb java代码写在哪里_写了10年JAVA代码,为何还是给人一种乱糟糟的感觉?

接触过不少号称写了10多年代码的程序员,可经常还是会发现他们的代码给人一种乱糟糟的感觉,那么如何才能写出让同事感觉不那么乱的代码呢?一、为什么要写这篇文章在开篇之前先说明下为什么要写这篇文章?在Java的世界里MVC软件架构模式绝对是经典的存在(PS:MVC是一种软件架构方式并不只有Java有),如果你是在最近十年前后进入Java的编程世界,那么你会发现自己这些年似乎从来没有逃离MVC架构模式的牢...

weixin_39630735的博客 226

怎么样来提高自己的代码质量

说起代码质量,脑子里会冒出很多词,命名规范、格式规范、日志规范、单元测试覆盖率… 但我觉得,代码质量总结起来就两个:好看和好用。 好看是指代码可读性好,容易理解、容易维护,别人接手了不骂你;好用则指代码健壮,不容易出错,机器跑着不骂你。即使出错,也容易定位,容易止损和恢复。 为何需要提高代码质量? 以下是我认为的几点: 提升代码的可维护性,降低新人接手的成本 促进知识共享,降低团队间应用流转的难度 建设写好代码、做好设计的团队氛围 如何才能拥有高质量的代码 有两种途径: 第一种途径:先有好的设计—>.

C语言C++学习俱乐部:765860056 522

【1024程序员节三行代码】:揭秘顶尖工程师高效编程的底层逻辑

auto-generated

FuncFun的博客 991

app让代码彻底容易复用------剥离activity和fragment

野路子、外包、速成项目:不这么干正经公司、长期维护的项目:必须这么干你现在的思路 =行业通用最佳实践如果你愿意,我可以按你现在写代码的风格,

176

5年经验之谈 —— 如何编写有效的接口测试?

要保障系统线上运行稳定,质量保障手段必不可少。虽然现在有很多自动化的保障手段,但接口测试依然是最基本的和最重要的保障手段之一。如能做到持续保障接口测试覆盖度和有效性,很大程度上会降低线上bug的产生,开发同学也会更有积极性去重构代码。

测试界的彭于晏的博客 139

字节8年经验之谈 —— 如何编写出色的接口测试用例?

简介:在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则?测试代码的结构应该是什么样的?接口测试有哪些实践技巧?本文分享作者在接口测试上的实践总结。

2301_77709772的博客 921

学TP的感想

TP刚刚开始学习,刚开始敲代码,一点也看不懂,就跟着老师的教程开始做,执行的时候呢还会遇到自己敲的时候拼写方面的错误。现在还是没怎么看懂代码的意思,不过已经比开始好很多了,学到现在感觉最深的有三个: 一 代码的规范以及必要的注释 public function insert() { $message = ''; ...

weixin_33834628的博客 146

free-programming-books技术债务:代码质量与维护成本平衡

在开源项目的生命周期中,技术债务(Technical Debt)是一个无法回避的现实问题。free-programming-books作为GitHub上最受欢迎的资源库之一,拥有超过27万星标和数千名贡献者,其技术债务管理策略为我们提供了宝贵的经验教训。 技术债务就像金融债务一样,短期内可以加速开发,但长期不偿还会导致维护成本指数级增长。对于free-programming-books这样的大型...

gitblog_00754的博客 954
上一篇: 代码重构实践之复用改造
下一篇: Bug?!
pstrunner
博客等级 码龄19年 50粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值