`
hyj1254
  • 浏览: 340086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码分层、分模块的好处

阅读更多
   第一条,也是最根本的一条:抽象出了代码的整体框架、脉络,同时也隔离了具体的变化。没有分层,把逻辑都写在一个方法里面的代码就好比是一本没有目录的电子书,要找哪一章哪一节全得凭感觉,得点进去看,得结合上下文来分析。
   良好的代码层次结构则相当于给这电子书创建了目录,而且按住Ctrl+鼠标就能点进去。它可以让维护人员迅速地掌握代码的整体架构,因为它把功能点都显式地列出来并很好地组织在一起了。要维护代码首先就得理解它,因此从维护的角度讲,分层极有必要。
   一本书的目录是不会经常变的。这就相当于抽象出了代码的整体架构,一盘散沙、群龙无首的局面宣告结束;比较抽象的说法是:固定出了不变的部分;可不是么,整体架构是随随便便就能换的吗?假如这本书是一份系统说明文档的话,它的具体内容可能会经常变,比如某处出现了排版错误、或是错别字,或是描述欠妥当;但改完之后目录一般是不用变的,变的只是具体的内容。代码在这方面更彻底,无论具体内容怎么变,整体架构都是不用变的;这就是隔离了具体的变化,它影响不了上层的抽象结构。
   在这里,系统分层、分模块体现的是依赖倒置原则:目录的各层级永远都只是提纲挈领性的抽象描述,具体内容要点进去才知道。即使这个目录下的内容再少,哪怕就一句话,也要想办法用一个更高层次的概念来概括它,而绝不能直接把它做为目录。道理显而易见,具体的东西是经常变化的,抽象的才能固定下来。依赖倒置原则的作用就在于固定不变逻辑,隔离变化逻辑。
   而对于代码而言,狭义上的抽象指的仅仅是抽象类、接口,实际上,即使把代码重构为一个private方法也可以看成是一种抽象。代码此时也有一个从具体到抽象的嬗变,这个私有方法也可以看成是“目录”。另外所谓ioc也可以看作是依赖导致原则的一个体现,高层依赖的只能是抽象类、接口或普通父类,否则ioc便没有意义;它的优势是在解耦方面做得更彻底,在代码层面上彻底消除了对具体实现类的依赖。
   第二条,有利于代码复用。假如要复用某段逻辑,前提就是要把它单独放在一个模块里;显然,铁板一块的代码无法使其任何一个子逻辑被复用。这也要求模块的封装非常彻底,不能与其他模块过多地耦合,否则就不能“一处定义到处使用”。
   代码的合理封装是这一切的基础。只有封装才能产生层次结构,进而实现固定不变隔离变化,也只有封装才能实现代码复用。
   个人经验之谈,不足之处请不吝赐教。
分享到:
评论
1 楼 ameryzhu 2014-04-07  

相关推荐

    代码分层了解下.zip

    代码分层是软件开发中的一个重要概念,特别是在嵌入式系统如STM32的开发中,它对于保持代码的可读性、可维护性和模块化至关重要。STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统。在STM32的...

    当当网代码分层设计不错的例子

    在这里,我们将深入探讨当当网代码分层设计的一些关键点,并结合“dangdang.v7”这个压缩包中的内容进行分析。 分层设计通常包括以下几个层次: 1. **表现层(Presentation Layer)**:这一层主要负责与用户交互,...

    DDD分层架构参考代码目录结构

    其分层架构模型是DDD的核心设计模式,它将系统分为用户接口层、应用层、领域层和基础层,旨在清晰界定各层职责,促进模块化和可维护性。本文将深入探讨这四个层次的职责与功能,并结合微服务代码模型,展示如何在...

    001_android文件夹分层结构

    在Android开发中,理解应用程序的文件夹分层结构至关重要,因为这是组织代码、资源和配置文件的基础。"001_android文件夹分层结构"很可能是一个示例或教程,用于帮助开发者了解Android项目的目录结构。这个结构通常...

    算法文档无代码分层图思想及其在信息学竞赛中的应用

    综合来看,算法文档无代码分层图思想在信息学竞赛中的应用是多方面的,其优势不仅在于提升算法本身的可理解性和可操作性,而且对于教学、团队协作以及文档的管理都有明显的好处。它是一种将复杂算法问题化简为清晰、...

    c++多模块web项目实践方案-项目分层骨架

    这是博文 【c++多模块web项目实践方案【cmake+cppcms+boost+fmt】】附带的项目源代码骨架。笔者主要提出了自己对于c++项目如何分层,如何做一个简单的网站的见解。具体文章地址在:...

    A7108 无线收发模块STM32代码

    11. **软件架构**:代码可能遵循分层或模块化设计原则,包含驱动层、应用层等不同部分,便于维护和扩展。 12. **固件升级机制**:如果A7108支持固件更新,代码中可能包含固件更新的流程和安全机制。 综上所述,这...

    SpringBoot项目分层思路、代码层级依赖,规范化管理模块分布学习参考项目源码

    主要目标 熟练掌握SpringBoot项目分层思路,丝滑拆分...熟悉代码层级依赖,规范化管理模块分布 手把手实战学习,理论实践相结合 使用人群 对于Springboot熟悉但是不知道合理分层小白 有自己分层思路可以互相分享学习

    分层的结构

    此外,通过实践分层结构的设计,学生能更好地掌握软件工程的原则,如代码重用、模块化和设计模式。 综上所述,分层结构是IT行业中一种重要的系统设计原则,它在提升软件质量和可维护性方面发挥着关键作用。无论是...

    云计算背景下多路数据流分层模块化建模与设计.pdf

    云计算背景下多路数据流分层模块化建模与设计的研究, 重点探讨了在云计算环境下对多路数据流进行有效管理和处理的技术手段。随着云计算技术的不断发展, 如何在云计算体系中高效处理大规模多路数据流成为了一个重要...

    单片机模块化编程的分层设计经验.doc

    通过以上知识点,我们可以看到,单片机模块化编程的分层设计有助于提高代码的可读性、可维护性和复用性,是构建大规模单片机系统的有效方法。遵循这些原则,开发者可以更高效地组织代码,降低项目复杂性,提高工作...

    单片机程序设计里的“分层思想”

    “分层思想”是一种非常有效的程序设计策略,它可以帮助开发者更好地组织代码,提高代码的复用率,并简化复杂系统的设计过程。 #### 一、什么是“分层思想” “分层思想”是指将程序按照不同的功能和职责划分成多...

    分层次分模块的可逆模十加减计数器

    总结来说,"分层次分模块的可逆模十加减计数器"是一个高效、灵活的数字逻辑设计,它利用分层和模块化的方法简化了复杂性,同时具备可逆的加减计数功能,适合在多种应用场景下使用。通过对Basys2开发板的控制,我们...

    asp.net购物车分层含代码

    ASP.NET购物车分层设计是一种常见的软件开发模式,它将应用程序的不同部分——数据访问层、业务逻辑层和用户界面层——分离,以提高代码的可维护性和可扩展性。在这个项目中,"asp.net购物车分层含代码" 采用的是C#...

    MPLAB代码配置器说明.pdf

    MPLAB代码配置器还支持模块化架构、集成软件库、灵活的引脚管理以及简便配置集成开发板等特性。它内置了自举程序生成器、通信协议栈(包括LIN、TCP/IP Lite和USB)和mTouch®技术。用户可以利用外设引脚选择(PPS)...

    chromium的media模块代码

    通过深入研究Chromium的Media模块代码,不仅可以了解播放器的内部运作机制,还能为开发高效、稳定的多媒体应用提供宝贵经验。学习这一模块有助于提升Web开发者的专业技能,使他们能够充分利用现代浏览器的能力,构建...

    Javascript的分层概念

    JavaScript的分层概念是将复杂的JavaScript代码组织成更易于管理和维护的结构,通常分为三个主要层次:底层(Native)、组件层(Component)和应用层(Application)。这些层次有助于提高代码的可重用性、可扩展性...

    DotNet分层

    1. **模块化**:每个层次都有其特定的职责,使得代码易于理解和维护。 2. **松耦合**:层与层之间的依赖关系降低,方便更换或升级某一层的技术栈。 3. **可测试性**:各层的独立性使得可以更容易地进行单元测试。 4....

    HTMLayout分层窗口.rar

    压缩包中的“易语言HTMLayout分层窗口源码”提供了实际的代码示例,展示了如何在易语言中集成HTMLayout,并创建和管理分层窗口。开发者可以通过阅读和学习这段源码,了解如何调用HTMLayout的API,设置CSS样式,以及...

Global site tag (gtag.js) - Google Analytics