首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有什么简单的方法可以重构深耦合的python代码吗?

有什么简单的方法可以重构深耦合的python代码吗?
EN

Software Engineering用户
提问于 2022-12-21 03:43:53
回答 1查看 170关注 0票数 0

我最近接手了一个很久以前的python项目,它有一些我无法确定的奇怪的代码样式。例如:

代码语言:javascript
运行
复制
# this is a params and value package?
opts={
infile="xxx",
outfile="xxx"
}
def parses():
    with open(opts['infile'], 'r') as f:
         #do something here and get a parased_object
         opts['infile2']=parased_object
    return

def fun1(): 
    # do someting here
    opts['fun1']=fun1_object
    return

def fun_xx():
    input_for_funcxx=opts['xx']
    #do someting here
    opts['fun_xx']=fun1_object
    return

parses()
fun1()
fun_xx()

我是一个刚接手这么大的python项目的菜鸟,我不清楚这样的编程方式是否可以接受,我需要让我的老板重构它吗?有什么简单的方法可以说清楚吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2022-12-21 07:29:32

opts显然是全局变量的包装器,代码似乎是用过程式编写的,每个函数的所有输入和输出都是通过全局变量编写的。

当遇到这种风格时,这里的重构应该和其他任何编程语言一样:

  • 第一(最重要的):不要重构没有真正必要改变的东西。当代码运行良好,并且不需要添加某些内容时,请保留它。只关注代码库中必须修复bug、需要添加新特性或需要优化的部分。
  • 第二:确保程序有足够的自动化测试。你肯定会弄坏一些东西,所以最好花点时间写回归测试。这些不需要是单元测试,但是对于一组有代表性的用例,您的测试应该有一些可重复的输入和一些已知的“正确”的记录、验证的输出。对于Python这样的非类型化语言来说,这一点甚至更重要,因为没有编译器可以阻止您通过重构输入。
  • 对于重构本身:首先,尽可能多地消除全局变量。相反,为每个函数引入显式的输入参数和返回值,并将它们的使用限制在尽可能小的范围内。没有副作用的功能(或至少更少的副作用)和不依赖副作用的功能更容易推理和维护,因为这些功能确实导致或依赖副作用。

注意,这可能只是一个开始。您可能需要应用更多的标准重构技术,如福勒的“重构”书籍和羽毛的“与遗产代码的有效工作”书。还可以看看我们在这个网站上的一个古老但永恒的问题:我继承了200行意大利面代码--现在呢?

祝好运!

TLDR;不,没有简单的方法。但是也有一些标准的方法,这些方法和以往一样需要艰苦的工作。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/442951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档