gpt4 book ai didi

c++ - 很长的方法总是需要重构吗?

转载 作者:IT老高 更新时间:2023-10-28 21:43:35 24 4
gpt4 key购买 nike

我面临一种情况,我们有很多很长的方法,1000 行或更多。

为了给你更多细节,我们有一个传入的高级命令列表,每个生成会导致更长(有时很大)的低级命令列表。有一个工厂为每个传入的命令创建一个类的实例。每个类都有一个处理方法,其中所有较低级别的命令都是按顺序生成添加的。正如我所说,这些命令序列及其参数经常导致处理方法达到数千行。

有很多重复。许多命令模式在不同的命令之间共享,但代码会一遍又一遍地重复。这让我认为重构是一个非常好的主意。

相反,我们得到的规范与当前代码的形式完全相同。每个传入的命令都有很长的列表。当我尝试一些重构时,我开始对规范感到不舒服。我错过了规范和代码之间明显的类比,并且浪费时间深入研究新创建的公共(public)类。

那么问题来了:一般来说,你认为这么长的方法总是需要重构,还是在类似的情况下可以接受?(不幸的是,重构规范不是一种选择)


编辑:我已经删除了对“生成”的所有引用,因为它实际上令人困惑。这不是自动生成的代码。

class InCmd001 {

OutMsg process ( InMsg& inMsg ) {

OutMsg outMsg = OutMsg::Create();

OutCmd001 outCmd001 = OutCmd001::Create();
outCmd001.SetA( param.getA() );
outCmd001.SetB( inMsg.getB() );

outMsg.addCmd( outCmd001 );

OutCmd016 outCmd016 = OutCmd016::Create();
outCmd016.SetF( param.getF() );

outMsg.addCmd( outCmd016 );

OutCmd007 outCmd007 = OutCmd007::Create();
outCmd007.SetR( inMsg.getR() );

outMsg.addCmd( outCmd007 );

// ......

return outMsg;
}
}

这里是一个传入命令类的示例(用伪 C++ 手动编写)

最佳答案

代码从不需要重构。该代码要么有效,要么无效。如果它有效,那么代码就需要任何东西。

重构的需求来自程序员。阅读、编写、维护和扩展代码的人。

如果您无法理解代码,则需要对其进行重构。如果通过清理和重构代码来提高工作效率,则需要对其进行重构。

总的来说,我会说为了你自己重构 1000 多个行函数是个好主意。但是你没有这样做,因为代码需要它。您这样做是因为这使您更容易理解代码、测试其正确性并添加新功能。

另一方面,如果代码是由其他工具自动生成的,您将永远不需要阅读或编辑它。那么重构它有什么意义呢?

关于c++ - 很长的方法总是需要重构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3405278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com