如何在Objective C中遵循SOLID原则向现有方法添加另一个参数

Posted

技术标签:

【中文标题】如何在Objective C中遵循SOLID原则向现有方法添加另一个参数【英文标题】:How to add another parameter to an existing method following SOLID principle in Objective C 【发布时间】:2016-07-26 06:53:57 【问题描述】:

我有一个方法

-(NSData*)getCommonDataWithCommandID:(int)commandID withChannelNumber:(int)channelNo withDataArray:(NSArray*)dataArray withByteArraySize:(int)byteArraySize



这是从很多地方调用的,并且调用的层次结构很大。我如何从dimSliderDecreasedTapped:tapOnFifthChannel: 传递值这只是一部分!

现在我需要给这个方法添加另一个参数

bool isFeedbackExpected

但这会是紫罗兰色Open Closed Principle。

最好的方法是什么?

【问题讨论】:

我不确定我是否理解您的问题;我想你知道如何添加另一个参数,所以你是在问如何在不过多破坏代码库的情况下做到这一点? 如果我正确理解了您的问题,您想为您在项目中实现的方法添加一个新参数,并且您已经从许多类中调用了该方法。所以没有神奇的方法可以做到这一点。您必须在声明和定义中根据需要更改方法,然后您可以在项目中搜索方法并在每个类中进行更改。 【参考方案1】:

使用该参数添加另一个方法:

- (NSData*)getCommonDataWithCommandID:(int)commandID
                    withChannelNumber:(int)channelNo
                        withDataArray:(NSArray*)dataArray
                    withByteArraySize:(int)byteArraySize
                     feedbackExpected:(BOOL)feedbackExpected 
      ...

并从您的原始方法调用此方法

- (NSData*)getCommonDataWithCommandID:(int)commandID
                    withChannelNumber:(int)channelNo
                        withDataArray:(NSArray*)dataArray
                    withByteArraySize:(int)byteArraySize 
    return [self getCommonDataWithCommandID:commandID
                          withChannelNumber:channelNo
                              withDataArray:dataArray
                          withByteArraySize:byteArraySize
                           feedbackExpected:NO];

这将扩展功能,但会保留旧界面。在 Swift 中这会更简单,因为您可以添加一个可选参数(具有默认值的参数)。

【讨论】:

如何将反馈预期值传递给 - (NSData*)getCommonDataWithCommandID:(int)commandID withChannelNumber:(int)channelNo withDataArray:(NSArray*)dataArray withByteArraySize:(int)byteArraySize 有 4 到 5层层次结构。如何从这些方法中传递 feedbackExpected 值? @ShuvoJoseph 我不明白你的问题。 我在问题中添加了图片。【参考方案2】:

有两种方法,第一种是在现有方法中添加参数,您必须更改每个使用(调用)该方法的位置。第二个是,使用该额外参数创建另一个方法,并在需要时调用此新方法,这样您就不需要更改项目中的其他内容

【讨论】:

在第二种情况下,原始的如何变得未使用?我认为你不清楚你的问题!

以上是关于如何在Objective C中遵循SOLID原则向现有方法添加另一个参数的主要内容,如果未能解决你的问题,请参考以下文章

如何设计遵循 SOLID 的类而不在其他地方加载违反 SOLID 的内容?

设计模式之SOLID原则

译浅谈SOLID原则

设计模式之SOLID原则

单一职责原则的介绍

如何应用 SOLID 原则在 React 中整理代码之开闭原则