如何在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原则向现有方法添加另一个参数的主要内容,如果未能解决你的问题,请参考以下文章