- 博客(66)
- 收藏
- 关注

原创 Java 虹软人脸识别SDK:基于虹软人脸识别SDK的Java项目集成指南
通过在 Java 项目中使用 arcsoft-sdk-face-3.0.0.0.jar,开发者可以轻松集成 虹软人脸识别SDK ,从而实现高效的 人脸识别 功能。该 SDK 为 Java 开发者提供了完整的 人脸识别SDK 接口,使得 虹软人脸识别 在各种场景中得以应用。无论是身份验证还是安防场景,使用arcsoft-sdk-face-3.0.0.0.jar,开发者可以利用强大的虹软SDK来构建Java项目,充分发挥虹软人脸识别SDK的优势。人脸识别SDK的强大功能,让Java项目中的人脸识别更加精准高效。
2024-09-02 17:22:11
2445
原创 56 | 观察者模式(上):详解各种应用场景下观察者模式的不同实现方式
观察者模式是一种行为型设计模式,用于处理对象之间的交互。它建立了一对多的依赖关系,当一个对象状态发生变化时,所有依赖它的对象都会自动收到通知。本文详细介绍了观察者模式的原理、实现方式和应用场景。观察者模式因其灵活性和可扩展性,广泛应用于实际开发中。文章讨论了同步阻塞和异步非阻塞的实现方式,以及在进程内和跨进程的应用。此外,观察者模式常用于邮件订阅、RSS订阅和基于消息队列的系统中,帮助实现代码和系统的解耦,提升架构设计的灵活性。
2024-11-18 15:59:11
1247
原创 55 | 享元模式(下):剖析享元模式在Java Integer、String中的应用
本文讨论了享元模式在Java中的实际应用,尤其是在Integer和String类中的体现。通过缓存常用的对象,Integer类在-128到127范围内避免了频繁创建新对象,提升了内存效率;而String类通过字符串常量池实现了相同字符串的复用,减少了内存占用。然而,享元模式对垃圾回收不友好,享元对象在没有使用时可能无法被及时回收。文章建议开发者在实际项目中合理使用享元模式,避免过度使用,尤其在确保其能带来显著内存优化的场景下。最后,文章还提出了一些改进思路,帮助更好地管理和回收不再使用的享元对象。
2024-10-18 11:07:10
810
原创 54 | 享元模式(上):如何利用享元模式优化文本编辑器的内存占用?
本文详细介绍了享元模式的原理和实现,重点通过棋牌游戏和文本编辑器的例子展示了该模式在内存优化中的应用。享元模式通过复用对象,减少内存消耗,适用于大量重复对象的场景。在棋牌游戏中,享元模式通过共享棋子的属性信息,实现棋盘内存优化;在文本编辑器中,享元模式用于复用相同的字体格式,从而节省内存。文章还对享元模式与单例、缓存、对象池等概念进行了对比,帮助读者更好地理解其独特性与应用场景。总体而言,本文为开发人员提供了在实际开发中使用享元模式进行内存优化的实用参考。
2024-10-18 11:05:35
740
原创 53 | 组合模式:如何设计实现支持递归遍历的文件系统目录树结构?
本文介绍了组合模式的原理及其在文件系统中的应用。组合模式是一种结构型设计模式,它允许将对象组合成树形结构,从而统一处理单个对象和组合对象的逻辑。文章以文件系统为例,展示了如何通过组合模式设计文件和目录类,利用递归遍历实现统计文件数量和大小的功能。此外,还提到了组合模式在OA系统中部门与员工管理中的应用场景。文章通过具体案例说明了组合模式的优势,特别是在处理具有层次结构的复杂系统时。最后,文章提出了优化递归统计函数执行效率的思考点,鼓励读者进一步探索。
2024-10-16 10:21:31
1255
原创 52 | 门面模式:如何设计合理的接口粒度以兼顾接口的易用性和通用性?
门面模式是一种重要的设计模式,旨在提供统一的接口,简化子系统的使用。通过封装系统底层实现,该模式能够隐藏复杂性,提供更易用的接口,解决易用性和性能问题。此外,门面模式还可用于设计新接口,实现多个操作在一个事务中执行,解决分布式事务问题。文章强调了接口设计的重要性,指出接口粒度设计需权衡可复用性和易用性,允许提供冗余的门面接口来提供更易用的接口。总的来说,门面模式在接口设计和系统优化中具有重要作用,能够帮助开发者解决多方面的技术挑战。
2024-10-16 10:21:01
773
原创 51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?
适配器模式是一种结构型设计模式,主要用于解决接口不兼容的问题。本文详细介绍了适配器模式的两种实现方式——类适配器和对象适配器,并分析了其应用场景,如封装有缺陷的接口设计、统一不同类的接口、替换外部系统依赖等。通过Java日志系统中的应用示例,文章展示了适配器模式如何提高代码的灵活性和可维护性。除此之外,本文还对比了适配器、代理、桥接、装饰器模式,帮助读者更好地理解这些模式的区别及适用场景。整体而言,适配器模式在解决接口兼容性问题中具有重要作用,是开发者提升代码扩展性的重要工具。
2024-10-15 10:45:25
1603
原创 50 | 装饰器模式:通过剖析Java IO类库源码学习装饰器模式
本文通过剖析Java IO类库源码,详细介绍了装饰器模式的设计思想和应用场景。文章首先解释了Java IO类库的复杂性及其在基于继承设计中的问题,随后引入装饰器模式作为解决方案。装饰器模式通过组合替代继承,允许动态地为原始类添加增强功能,且支持多个装饰器的嵌套使用。文章还比较了装饰器模式和代理模式,强调装饰器专注于与原始类相关的功能增强。通过分析Java IO中的装饰器类实现,如FilterInputStream的继承方式,文章帮助读者深入理解了装饰器模式的实用性及其在实际开发中的作用。
2024-10-15 10:44:24
1662
2
原创 49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?
桥接模式是一种结构型设计模式,旨在将抽象与实现解耦,使它们可以独立演化。本文通过JDBC驱动和API接口监控告警的例子,深入阐述了桥接模式的应用场景。文章重点解释了桥接模式的原理及其在实际开发中的两种理解方式。在第二种方式中,通过组合关系将不同渠道的消息发送逻辑独立出来,创建专门的消息发送类,避免了类结构的复杂性。桥接模式的核心在于灵活性,它能够有效减少代码耦合,读者应重点掌握其原理及实际应用,以优化系统设计。
2024-10-14 10:06:01
949
原创 48 | 代理模式:代理在RPC、缓存、监控等场景中的应用
本文介绍了代理模式及其应用。代理模式通过引入代理类,在不修改原始类的情况下附加功能,从而实现业务代码与框架代码的解耦。文章以性能计数器为例,展示了如何利用代理模式优化系统设计。此外,还详细讲解了动态代理的原理,通过动态生成代理类,避免了手动编写多个代理类的繁琐工作。代理模式常用于处理非功能性需求,如日志记录、监控、鉴权、缓存等,在RPC调用和性能优化等领域也广泛应用。通过代理模式,开发者可以更好地分离业务逻辑与附加功能,提升代码的扩展性和可维护性。
2024-10-14 10:05:23
1515
1
原创 47 | 原型模式:如何最快速地clone一个HashMap散列表?
本文深入介绍了原型模式的应用场景和两种实现方式:深拷贝和浅拷贝。通过一个HashMap散列表的例子,生动阐述了对象创建成本较高且差异不大时,利用原型模式可以节省创建时间的优势。文章重点讲解了深拷贝和浅拷贝的区别,以及在实际应用中需要注意对象的引用关系。此外,还提出了两种深拷贝的实现方法,并探讨了在特定应用场景下如何选择合适的拷贝方式。总的来说,本文内容丰富,对于开发人员快速了解原型模式具有一定的参考价值。
2024-10-13 21:48:08
840
原创 46 | 建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式
本文深入探讨了构造函数、set方法和建造者模式三种对象创建方式,并阐述了它们的优劣势及适用场景。通过资源池配置类的例子引出了建造者模式的应用场景,分析了构造函数和set方法可能存在的问题,并指出了建造者模式的优势,如避免无效状态、集中校验逻辑、创建不可变对象等。文章还对比了工厂模式和建造者模式的区别,强调了理解模式设计的本质和灵活应用的重要性。总之,本文内容简洁明了,对于读者快速了解建造者模式的概念和使用具有很高的参考价值。
2024-10-13 21:47:33
912
原创 45 | 工厂模式(下):如何设计实现一个Dependency Injection框架?
本文深入探讨了依赖注入(DI)容器的设计原理和实现方法。首先,比较了工厂模式与DI容器的差异,指出DI容器相当于一个大型工厂类,负责整个应用中类对象的创建、配置解析及生命周期管理。接着,详细介绍了DI容器的核心功能:配置解析、对象创建与生命周期管理。文章还介绍了实现简单DI容器的步骤,包括原型设计、执行入口和配置文件解析,并通过示例代码展示了其使用方式与执行流程。重点分析了BeansFactory类的createBean()函数及循环依赖问题,提供了相应解决方案。本文对DI容器的底层原理提供了重要参考。
2024-10-12 09:11:58
700
原创 44 | 工厂模式(上):我为什么说没事不要随便用工厂模式创建对象?
本文介绍了工厂模式的三种常见类型:简单工厂、工厂方法和抽象工厂,重点分析了简单工厂和工厂方法。简单工厂通过一个工厂类创建不同对象,提升了代码的可读性和灵活性;而工厂方法模式则将对象创建延迟到子类中,更符合开闭原则。文章还探讨了简单工厂的两种实现方法及其对开闭原则和多态的影响,指出工厂方法更符合开闭原则,但在某些场景下,简单工厂更为合适。抽象工厂模式适用于有多种分类方式的复杂场景,能够减少工厂类数量。通过代码示例和对比分析,文章帮助读者理解工厂模式的应用场景和选择原则。
2024-10-12 09:11:40
866
原创 43 | 单例模式(下):如何设计实现一个集群环境下的分布式单例模式?
本文深入探讨了单例模式在集群环境中的设计与实现。首先,强调了单例模式的唯一性范围,包括进程内唯一和线程内唯一。文章详细介绍了线程唯一单例的实现,通过使用HashMap和ThreadLocal来确保线程内单例对象的唯一性。在集群环境中,单例对象需要序列化并存储在外部共享存储区,并利用分布式锁保证进程间只有一个实例。此外,文章还介绍了多例模式的实现,如限制实例数量和基于类型创建多个实例的方式。这些设计对于开发分布式系统的工程师具有重要的参考价值。
2024-10-11 11:06:26
1169
原创 42 | 单例模式(中):我为什么不推荐使用单例模式?又有何替代方案?
单例模式虽然常用,但存在一些问题,因此有人认为它是一种反模式。首先,单例模式不支持面向对象编程的抽象、继承和多态原则,限制了代码的扩展性。其次,它隐藏了类之间的依赖关系,降低了代码的可读性和可测试性。文章提出了几种替代方案,如使用静态方法、通过init()传参、在getInstance()中传参或使用全局变量。这些方法虽然部分解决了单例模式的不足,但根本上可通过工厂模式或依赖注入(IOC)容器来实现更好的全局管理。合理使用单例模式是关键,文章还探讨了重构以提升代码可测试性的思路。
2024-10-11 10:55:31
887
原创 41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?
本文详细介绍了单例模式的应用与实现,解释了其确保一个类只能创建一个实例的特点。文章首先阐述了单例模式的必要性,通过实际案例展示了其在多线程环境中避免资源冲突的问题,例如在Logger类中,单例模式有效防止了多线程访问冲突。此外,IdGenerator类的例子展示了单例模式在全局唯一类中的应用。文章进一步讲解了单例模式的实现方法,包括饿汉式、懒汉式、双重检测、静态内部类和枚举,并分析了每种方式的优缺点及适用场景。通过实例和详细解释,本文帮助读者理解如何在实际开发中灵活应用单例模式,具有较高的指导价值。
2024-10-10 10:26:44
1579
原创 40 | 运用学过的设计原则和思想完善之前讲的性能计数器项目(下)
本文探讨了通过设计原则优化性能计数器项目的过程。首先,针对ConsoleReporter和EmailReporter的代码重复问题,通过重构提高了可测试性,特别是优化了EmailReporter的时间计算逻辑。文章还完善了功能需求,包括统计信息的接口设计、显示格式、终端设置及统计触发方式和时间区间的管理。最后,提出了版本3中待实现的功能,如被动触发统计、自定义终端和显示格式的设计。本文通过代码示例和分析,展示了如何运用设计原则改进项目,提升了性能、扩展性和容错性。
2024-10-10 10:26:16
1039
原创 39 | 运用学过的设计原则和思想完善之前讲的性能计数器项目(上)
本文介绍了通过重构和设计原则改进性能计数器项目的过程。作者回顾了项目第一个版本中Aggregator类和ConsoleReporter、EmailReporter类的问题,并在版本2中通过重构解决了这些设计缺陷。Aggregator类的重构提高了代码的可读性和可维护性,而ConsoleReporter和EmailReporter类的优化解决了代码重复、职责不单一和可测试性差的问题。通过这些改进,项目功能更加完善,满足了设计需求。本文以项目迭代为线索,展示了如何运用设计原则提升代码质量,具有较高的参考价值。
2024-10-09 14:35:20
608
原创 38 | 总结回顾面向对象、设计原则、编程规范、重构技巧等知识点
本文系统介绍了面向对象编程的核心概念,包括四大特性、与面向过程的对比以及面向对象的分析、设计和编程方法。文章深入讨论了接口与抽象类的区别、基于接口编程的优势,以及“多用组合、少用继承”的设计理念。同时,介绍了贫血模型与充血模型,强调了SOLID原则中的单一职责和开闭原则。还解析了KISS、YAGNI、DRY、LOD等编程规范与重构原则,并探讨了重构、单元测试、代码可测试性和解耦的关键技巧。通过这些内容,文章为读者提供了丰富的编程规范与设计思路,帮助提高代码质量与设计水平。
2024-10-09 14:33:14
1296
原创 37 | 实战二(下):重构ID生成器项目中各函数的异常处理代码
本文核心内容是重构ID生成器项目中的异常处理代码。首先,文章探讨了generate()函数中主机名获取失败时返回NULL值的合理性,并提出了抛出受检异常的改进方案。随后,文章对getLastFieldOfHostName()和getLastSubstrSplittedByDot()函数进行了重构,增加了异常处理逻辑。通过这些改进,文章强调全面合理的异常处理有助于减少bug,提升代码健壮性。重构后的RandomIdGenerator代码展示了具体的异常处理优化,提供了实际的重构思路。本文通过简单的ID生成器代
2024-10-08 10:03:58
890
原创 36 | 实战二(上):程序出错该返回啥?NULL、异常、错误码、空对象?
本文深入探讨了函数异常处理的各种情况和处理方式,为程序员提供理论知识与实际指导。首先,文章分析了函数出错时返回的几种数据类型,如错误码、NULL值、空对象和异常对象,并详细讨论了各自的优缺点。接着,介绍了空对象设计模式与抛出异常对象的方式,并对不同编程语言中抛出受检异常或非受检异常的选择提供了建议。文章还总结了处理函数异常的三种方法。整体而言,本文涵盖了异常处理的理论与实践,为程序员在设计函数时应对异常提供了有价值的参考。
2024-10-08 10:03:33
1173
原创 35 | 实战一(下):手把手带你将ID生成器代码从“能用”重构为“好用”
本文介绍了通过逐步重构将ID生成器代码从“能用”提升为“好用”的过程,提出了四次重构计划,分别提升可读性、可测试性、编写单元测试及添加注释。文章详细阐述了第一轮重构步骤,分析了接口和实现类的命名改进。第二轮重构中,作者将generate()函数定义为普通函数,并优化了访问权限和注释。第三轮重构为代码补全了单元测试,着重测试复杂逻辑。最后,文章讨论了函数功能的定义,并针对功能编写了单元测试。通过实际案例,本文展示了重构技巧和过程,强调代码质量、设计演变和细节处理的重要性,为开发者提供了宝贵参考。
2024-09-29 09:37:40
733
原创 34 | 实战一(上):通过一段ID生成器代码,学习如何发现代码质量问题
本文总结了一段ID生成器代码的重构过程,介绍了为每个请求分配唯一ID以便日志追踪的需求背景。首先展示了一份基本的实现,指出了其中的不足之处,如代码质量低、可读性差和缺乏异常处理等问题。接着,文章通过分析通用关注点和业务需求,详细评估了代码的设计问题,涉及可测试性、异常处理不当和依赖注入不合理等方面。最后,文章提供了发现代码质量问题的清单,并讨论了如何优化Logger对象的依赖注入。整体内容通过实际案例分享重构思路,帮助读者提高代码质量意识。
2024-09-29 09:37:04
804
原创 33 | 理论五:让你最快速地改善代码质量的20条编程规范(下)
本文总结了20条编程规范,旨在帮助程序员提升代码质量。重点包括将代码拆分为小单元,避免函数参数过多,以及设计单一职责的函数。作者强调模块化和抽象思维的重要性,建议将复杂逻辑提炼成类或函数,以增强可读性。此外,文章提供了解决函数参数过多的方法,如拆分成多个函数或封装为对象,并警示不要用布尔标识参数控制逻辑,而应拆分成独立函数。最后,通过示例展示如何实现单一职责,强调移除深嵌套和使用解释性变量的重要性。这些实用的编程规范和技巧能显著改善代码可读性与质量。
2024-09-27 14:35:18
985
原创 32 | 理论五:让你最快速地改善代码质量的20条编程规范(中)
编程规范对代码质量至关重要。本文总结了20条编程规范中的6个重点,帮助读者提升代码质量。首先,类和函数的代码行数应适中,避免过于复杂,确保易读性。其次,一行代码应控制在IDE的显示宽度内,以便于维护。此外,使用空行分隔代码块和合理缩进能提升可读性。关于大括号位置和类内成员排列顺序,尽管存在争议,但团队统一遵循规范至关重要。总之,本文提供实用建议,强调代码风格的重要性,鼓励团队统一风格并与业内规范保持一致,从而提升协作效率。
2024-09-27 14:27:09
805
原创 31 | 理论五:让你最快速地改善代码质量的20条编程规范(上)
本文总结了编程规范中命名与注释、代码风格和编程技巧的关键内容。首先,命名需准确且可读,符合项目统一规范。其次,注释的目的是提升代码理解度,应涵盖功能、原因、实现方式,并针对复杂类和接口提供使用说明。此外,适度控制注释数量,通过合理命名、函数提炼和解释性变量,增强代码可读性。总体而言,这些规范有助于改善代码质量,提高可读性和可维护性。
2024-09-26 18:15:10
951
原创 30 | 理论四:如何通过封装、抽象、模块化、中间层等解耦代码?
解耦是软件设计与开发中的核心工作,旨在通过封装、抽象、模块化及引入中间层等方式,提高代码的可读性、可维护性和可测试性,实现高内聚、松耦合的设计。判断代码是否需要解耦,可以通过评估修改是否影响其他模块或绘制依赖关系图来衡量。常见的解耦方法包括封装与抽象、引入中间层、模块化,以及应用单一职责原则、依赖注入、基于接口编程、组合优先于继承等设计原则。解耦的应用在实际开发中广泛存在,如Spring框架中的AOP和IOC,成功实现了业务与非业务代码及对象构建与使用的解耦。
2024-09-26 18:08:41
1332
原创 29 | 理论三:什么是代码的可测试性?如何写出可测试性好的代码?
本文探讨了提高代码可测试性的方法,特别是在编写可测试代码时遇到的挑战及解决方案。通过一个复杂的交易类代码实例,作者提出了六个测试用例,并分析了在测试过程中遇到的问题,如对外部服务的依赖和网络通信带来的不确定性。文章详细介绍了如何通过依赖注入和mock技术来隔离外部依赖,增强单元测试的稳定性和效率。作者还强调了良好的代码设计原则对提高可测试性的重要性,鼓励开发人员在日常编码中关注代码的可测试性。
2024-09-23 14:31:26
883
原创 28 | 理论二:为了保证重构不出错,有哪些非常能落地的技术手段?
本文介绍了单元测试在软件开发中的重要性及其对代码质量提升的作用。单元测试不仅可以有效发现代码中的问题,还能揭示设计上的不足,是集成测试的有力补充。文章指出,编写单元测试的过程也是代码优化和重构的过程,有助于提高代码的可维护性和可读性。作者分享了编写单元测试的经验,包括如何控制测试耗时、提高覆盖率以及选择合适的测试框架。文章还分析了单元测试难以实施的原因,如编写复杂、团队认知不足和开发进度紧张等问题。通过这篇文章,读者可以更好地理解单元测试的重要性及其在软件开发中的实际应用。
2024-09-23 14:29:59
1504
原创 27 | 理论一:什么情况下要重构?到底重构什么?又该如何重构?
本文深入探讨了重构在软件开发中的重要性和实践方法,重构的目标是优化软件内部结构,提高代码质量而不改变其外部行为。文章区分了大规模高层次和小规模低层次的重构,涵盖系统设计和代码细节的优化。持续重构被视为开发过程中不可或缺的一部分,以避免代码质量恶化。重构不仅保证了代码的可维护性和灵活性,还为应对未来需求变化做好准备,同时促进工程师的技术成长和能力提升。本文为开发者提供了关于重构的技术指导和实践建议。
2024-09-21 11:47:22
1836
1
原创 26 | 实战二(下):如何实现一个支持各种统计规则的性能计数器?
本文介绍了如何实现一个支持多种统计规则的性能计数器,强调逐步迭代的开发模式。作者通过多个版本逐步完善框架,在v1.0版本中,先实现了数据采集、存储、聚合统计和显示等基础功能,将更复杂的功能放到后续版本中优化。文章详细讲解了面向对象设计步骤,包括职责划分、类识别和接口设计。通过对MetricsCollector、MetricsStorage、Aggregator、ConsoleReporter、EmailReporter等类的设计,展示了如何构建灵活、可扩展的代码。整体上,本文为读者提供了逐步迭代开发和性能计
2024-09-21 11:46:52
985
原创 25 | 实战二(上):针对非业务的通用框架开发,如何做需求分析和设计?
本文探讨了非业务通用框架开发的需求分析与设计,聚焦于统计接口调用信息并支持多种输出格式的框架构建。首先,文章分析了功能性需求,如接口统计信息类型、显示格式和统计触发方式等,及非功能性需求,包括易用性、扩展性和容错性。接着,作者介绍了框架设计的核心思路,建议通过聚焦简单场景和实现最小原型,逐步推进复杂系统的设计。同时,文章分享了产品线框图、系统设计图等实用技巧,强调产品设计思维对技术开发的影响。整体上,本文为读者提供了系统化的开发指导。
2024-09-20 09:29:07
1109
2
原创 24 | 实战一(下):如何实现一个遵从设计原则的积分兑换系统?
本文介绍了实现积分兑换系统的代码开发过程,重点讲解了接口设计、数据库设计和业务模型设计的核心环节。作者详细讨论了数据库和接口设计的关键性,以及如何通过分层开发提升代码复用性、隔离变化、确保可测试性,并有效应对系统复杂性。文章建议将积分系统独立开发,以实现模块化和解耦。同时,文章还介绍了VO、BO、Entity的设计思路,以及数据对象之间的转换方法,帮助解决代码重复问题。整体而言,本文为读者提供了业务开发的实用指导与设计思路。
2024-09-20 09:28:40
1044
原创 23 | 实战一(上):针对业务系统的开发,如何做需求分析和设计?
本文介绍了业务系统开发中的需求分析和系统设计,强调了技术人员在整个开发过程中的关键作用。通过积分兑换系统的开发实例,文章详细展示了从需求分析到上线维护的全流程。作者建议技术人员应积极参与产品设计,借鉴其他产品的经验,并细化业务流程。在系统设计阶段,文章强调了面向对象设计的四个步骤,并探讨了模块划分、交互关系设计、接口、数据库、以及业务模型设计。整体来说,文章突出需求分析和系统设计对业务系统开发成功的至关重要性。
2024-09-19 17:36:21
1014
原创 22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?
本文介绍了迪米特法则(Law of Demeter)及其在实现“高内聚、松耦合”代码中的作用。该法则强调类应只与直接关联的对象交互,避免不必要的依赖,从而降低耦合度。文章通过两个案例,展示了如何通过重构类之间的依赖关系和引入接口来优化代码设计,使代码更具灵活性和可维护性。通过这种方式,可以实现模块的独立性,减少修改带来的影响。本文还讨论了迪米特法则与其他设计原则,如单一职责原则和接口隔离原则的关系,帮助开发者更好地理解和应用这些原则。
2024-09-19 17:26:08
1077
原创 21 | 理论七:重复的代码就一定违背DRY吗?如何提高代码的复用性?
本文深入探讨了提高代码复用性的关键原则和方法。通过实际代码示例,分析了逻辑重复与功能语义重复对DRY(Don't Repeat Yourself)原则的影响,并提出了具体的解决方案。文章强调了统一实现思路、将功能抽象成细粒度函数,以提高代码的可维护性和可读性。为了实现高代码复用性,文章提出了减少代码耦合、遵循单一职责原则、模块化设计、业务逻辑与非业务逻辑分离等方法。此外,还介绍了继承、多态、抽象、封装以及设计模式在提高复用性中的应用。文章同时提醒,避免为复用而过度设计,遵循“Rule of Three”原则
2024-09-18 10:09:12
1529
原创 20 | 理论六:我为何说KISS、YAGNI原则看似简单,却经常被用错?
本文探讨了KISS(保持简单)和YAGNI(你不会需要它)两大原则在软件设计中的应用。作者通过对比三种检查IP地址合法性的方法,强调代码简洁不仅指代码行数,还涉及逻辑复杂度和可读性。KISS原则要求避免复杂的实现,如KMP算法尽管高效但适合特定场景。文章还讨论了如何在项目开发中避免过度设计和不必要的优化。YAGNI原则则提醒开发者不要编写暂时不需要的功能代码。文章为编写简洁、实用的代码提供了具体的指导与建议。
2024-09-18 09:57:38
1516
原创 19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
本文深入探讨了控制反转(IOC)和依赖注入(DI)在软件开发中的应用。控制反转将程序的控制权交给框架,而依赖注入则通过构造函数或参数传递依赖对象,提升代码的扩展性和灵活性。文章通过具体例子解释了这两个概念的区别与联系,并介绍了Spring框架中的IOC与DI,帮助读者理解其实际应用。还探讨了依赖注入框架和依赖反转原则,为读者提供了全面的技术背景和知识体系。整体内容丰富,适合开发者深入学习和掌握这些核心概念。
2024-09-15 12:05:21
924
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人