LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

软件工程:DRY原则,提升代码的复用性

admin
2023年7月11日 8:38 本文热度 517

在软件工程中,DRY原则是软件开发的一个指导性的原则,是软件工程中最佳设计实践的基础原则之一。

DRY原则强调避免在软件系统中重复编写相同的逻辑、代码或信息。 通过代码复用,来提高软件整体的可维护性、可读性和可扩展性。

下面我们进一步展开了解一下DRY原则。

Part1什么是DRY原则

DRY原则是软件开发中的一项指导原则,全称是**"Don't Repeat Yourself",中文意思是"不要重复自己"**。

这个原则的核心思想是:每一个信息或逻辑应该只在一个地方定义,而不是在多个地方重复。

DRY原则的核心行动策略,就是将系统中的重复元素提取出来,以便能够在多个地方重用,而不是在不同的地方重复编写相同的代码。

这样做有助于提高代码的可维护性、可读性和可扩展性,并减少软件开发过程中的错误和变更带来的维护成本。

Part2DRY原则的好处和应用范围

遵循DRY原则可以带来很多好处,例如:

  • 减少代码量,节省开发时间和成本;
  • 降低出错的风险,提高代码的质量和稳定性;
  • 方便修改和更新,减少维护的工作量和复杂度;
  • 增加代码的复用性,提高开发效率和创新能力;

同时,DRY原则可以应用在很多方面,例如:

  • 变量和常量:使用变量和常量来存储数据,而不是直接使用字面值或硬编码;
  • 函数和方法:使用函数和方法来封装逻辑,而不是在多个地方复制粘贴相同的代码;
  • 模块和类:使用模块和类来组织代码,而不是将所有的代码放在一个文件中;
  • 配置文件和环境变量:使用配置文件和环境变量来管理设置,而不是将设置写在代码中;
  • 注释和文档:使用注释和文档来说明代码的功能、用法和设计,而不是让代码自己说话;

Part3DRY原则的关键点

  • 代码重用:避免在软件系统中重复编写相同的代码逻辑。相同的功能应该被封装成可重用的模块、函数或类,并在需要的地方进行调用。

  • 数据一致性:避免在系统中存储相同的数据的副本。相同的数据应该只有一个来源,避免数据的冗余存储,以确保数据的一致性。

  • 逻辑集中化:将系统中的共享逻辑放在一处,避免在多个地方编写相同的逻辑。这样可以降低代码的复杂度,提高代码的可读性和维护性。

  • 抽象和封装:将重复的模式或功能抽象成通用的组件,以便在系统中多次使用。通过封装重复的逻辑,可以减少错误和改变带来的风险,并提高系统的灵活性。

总之,DRY原则强调避免重复编写相同的代码,以提高软件开发的效率和质量。

Part4DRY原则4个陷阱

尽管DRY原则在软件开发中非常有用,但在实践中也存在一些陷阱,是需要引起重视和注意的。

以下是4个常见的DRY原则陷阱,具体如下:

  • 过度抽象:当过度追求代码的重用性时,可能会过度抽象,导致代码变得复杂而难以理解。过度抽象可能会引入不必要的复杂性和额外的抽象层级,使代码难以维护和调试。要确保抽象的层次适当,并避免不必要的复杂性。

  • 过早优化:在追求DRY原则时,有时候会过早进行优化,试图避免重复的代码,即使这些代码在当前情况下可能并不重复。这可能会导致代码过于复杂,降低开发速度。应该根据实际需求评估代码的复用性,并在真正需要时进行重构。

  • 过度依赖:在追求DRY原则时,可能会过度依赖共享的代码或库。当这些共享代码或库发生变化或出现问题时,可能会影响系统中多个地方的功能。要确保共享代码的稳定性和可靠性,并进行适当的测试和验证。

  • 忽略上下文差异:有时候在不同的上下文中,看似相似的代码实际上可能会有所不同。如果盲目地将它们合并为一个通用的代码块,可能会忽略上下文的差异,导致代码的错误行为或不一致性。要根据实际上下文的需求评估代码的相似性,并谨慎地进行重用。

总之,不能为了DRY而去做过度或刻意的设计,在真实的软件工程中都是不可取的。

譬如,就拿过度抽象这一个陷阱来说,下面就是一个真实的案例:

假设我们正在开发一个简单的图书管理系统,其中包含图书的添加、删除和展示功能。我们首先创建了一个Book类来表示图书对象,其中包含了图书的标题、作者和出版日期等属性。

public class Book {
    private String title;
    private String author;
    private LocalDate publicationDate;

    // 构造函数和其他方法...

    // getter和setter方法...
}

接着,我们需要实现一个BookRepository类来管理图书的持久化和访问。初始时,我们可能只需将图书对象存储在一个简单的列表中:

public class BookRepository {
    private List<Book> books;

    public BookRepository() {
        books = new ArrayList<>();
    }

    public void addBook(Book book) {
        books.add(book);
    }

    public void removeBook(Book book) {
        books.remove(book);
    }

    public List<Book> getAllBooks() {
        return books;
    }
}

随着系统的发展,我们可能决定将图书存储在数据库中,而不是简单的列表。这时,为了实现更高的灵活性和可扩展性,我们可能会过度抽象,引入一个通用的Repository接口,并为BookRepository实现该接口。

public interface Repository<T> {
    void add(T entity);
    void remove(T entity);
    List<T> getAll();
}

public class BookRepository implements Repository<Book> {
    // 实现接口的方法...
}

尽管这种抽象可以在将来扩展时提供一定的灵活性,但在当前情况下可能显得过于复杂和冗余。因为我们的系统目前只关注图书的管理,而不需要通用的Repository接口。过度抽象可能增加了代码的复杂性和理解难度。

在这种情况下,最好的做法可能是避免引入不必要的抽象,保持代码的简单和直接性,直接在BookRepository类中实现添加、删除和获取所有图书的功能。

当系统的需求发生变化并且需要更通用的存储库接口时,再进行相应的重构和抽象化,以满足新的需求。

Part5最后

当然,DRY原则并不是绝对的不可违背的真理,且不可为了抽象而抽象。

有时候为了提高性能、兼容性或可读性,适当地重复一些代码或数据,也是可行的一种策略。

只是,要在大多数情况下,遵循DRY原则可以帮助我们编写更优雅、更高效、更可靠的代码。


该文章在 2023/7/11 8:38:40 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved