首页 > 其他分享 >我们大概如何抽象公共代码

我们大概如何抽象公共代码

时间:2024-09-12 10:22:23浏览次数:3  
标签:文件 代码 upload 抽象 file 公共 def

示例:处理不同类型文件的上传和处理

假设我们有一个应用程序,需要处理上传的不同类型的文件(如文本文件、图片和视频),每种文件类型都需要进行特定的处理和验证。这种情况下,代码中可能存在大量的重复逻辑,特别是在文件验证和保存方面。

非抽象代码示例

在这个简单示例中,我们将看到针对每种文件类型分别进行处理的代码,这些处理步骤在逻辑上非常相似,适合进行抽象。

def upload_text_file(file):
    if not file.endswith('.txt'):
        raise ValueError("Invalid file format")
    # 保存文件逻辑
    print("Text file saved")

def upload_image_file(file):
    if not file.endswith(('.png', '.jpg', '.jpeg')):
        raise ValueError("Invalid file format")
    # 保存文件逻辑
    print("Image file saved")

def upload_video_file(file):
    if not file.endswith(('.mp4', '.avi', '.mov')):
        raise ValueError("Invalid file format")
    # 保存文件逻辑
    print("Video file saved")

使用抽象重构代码

一般来说,抽象出公共代码的思路包括以下步骤:

  1. 识别重复代码:查找在多个地方出现的相似代码。

  2. 定义通用操作:将这些重复代码转换成一个或多个函数,这些函数可以接受参数来处理不同情况的具体细节。

  3. 参数化差异:确定哪些部分是变化的,将这些部分作为参数传递给通用函数。

  4. 集成与测试:将抽象的函数集成回原始代码中,并确保它们能够正常工作。

根据以上思路,我们可以重构上述代码,使其更加抽象和可重用:

def upload_file(file, valid_extensions):
    if not file.endswith(valid_extensions):
        raise ValueError("Invalid file format")
    # 保存文件逻辑
    print(f"File saved: {file}")

def main():
    upload_file("example.txt", ('.txt',))
    upload_file("example.png", ('.png', '.jpg', '.jpeg'))
    upload_file("example.mp4", ('.mp4', '.avi', '.mov'))

在这个重构后的版本中,我们创建了一个通用的upload_file函数,它接受文件和一个有效扩展名的元组作为参数。这样,我们就可以使用同一个函数来处理不同类型的文件上传,而具体的文件类型验证逻辑则通过参数传递。这种方法减少了代码冗余,提高了代码的可维护性和可拓展性。

通过这种方式,我们有效地将文件上传和验证的共通逻辑抽象出来,使得代码更加简洁并容易管理。

标签:文件,代码,upload,抽象,file,公共,def
From: https://blog.csdn.net/hebtu666/article/details/142142518

相关文章

  • Python编译器IDE爬虫爬取3首歌曲代码
    importrequestssong_urls=[“http://music.163.com/song/media/outer/url?id=25795016.mp3”,“http://music.163.com/song/media/outer/url?id=5255631.mp3”,“http://music.163.com/song/media/outer/url?id=5255640.mp3”]forindex,song_urlinenumerate(so......
  • 手机安卓版Python编译器IDE彩色音乐播放器代码
    importpygameimporttkinterastkfromtkinterimportfiledialog初始化pygamepygame.mixer.init()current_song_index=0defplay_music():selected_indices=song_list.curselection()ifselected_indices:globalcurrent_song_indexcurrent_song_index=......
  • 静态成员、静态方法、静态代码块
    静态成员      静态数据成员是属于类的,并且为这个类所有对象共享,只占一块内存空间、      随着类的加载而先创建出来,然后对象才被创建出来。      一般是通过类名去访问去访问、修改,不推荐,(因为如果用对象去访问,结果可能被覆盖,后续可能混......
  • 将 Source Generator 生成的源代码保存到本地文件
    默认的源代码生成器所生成的代码都是没有直接存放到项目文件夹里面的,不受源代码管理工具管理,对使用方的开发者来说很难直接阅读或查找到SourceGenerator生成的源代码。本文将和大家介绍如何使用EmitCompilerGeneratedFiles属性配置将生成的代码保存到本地文件将SourceGene......
  • [全网独家原创]基于(BO)Bayes-Transformer-LSTM多输出回归预测(多输入多输出)Matlab代码
    [全网独家原创]基于(BO)Bayes-Transformer-LSTM多输出回归预测(多输入多输出)Matlab代码你先用你就是创新!!!每个输出都有以下线性拟合图等四张图!!!具体看图,独家图像!!!程序已经调试好,替换数据集根据输出个数修改outdim值即可运行!!!数据格式为excel!(如下)需要其他算法的都可以定制!贝叶......
  • c++求助bfs流星雨题目为什么代码编不过
    题目链接3669--MeteorShower(poj.org)英文题目DescriptionBessiehearsthatanextraordinarymeteorshoweriscoming;reportssaythatthesemeteorswillcrashintoearthanddestroyanythingtheyhit.Anxiousforhersafety,shevowstofindherwayt......
  • 代码整洁之道--读书笔记(8)
    代码整洁之道简介:本书是编程大师“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。本......
  • 计算机毕业设计 智能推荐旅游平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解
    ......
  • 通过git进行本地项目代码备份与版本控制
    在本地进行项目开发时,由于代码需要进行多次迭代,因此备份代码是不可缺少的。因此使用版本控制系统来进行代码备份是很有必要的。本文将介绍有关git配置gitee以及github的相关内容,并对一些问题做出相应解释。1.git工具1.1git介绍Git是一个开源的分布式版本控制系统,可以有效、......
  • ALIENTEK电容按键按键的介绍与驱动代码
    目录前言电容触摸按键原理 硬件接线检测电容触摸按键过程驱动代码 tpad.htpad.cmain.c 前言我没有独立的电容触摸按键模块,所以使用正点原子STM32F103ZET6精英版开发板上的电容触摸按键。采用STM32F103C8T6检测电容触摸按键,代码为正点原子精英版开发板移植。电......