使用冗长的参数最小化函数名称

时间:2014-01-05 16:06:17

标签: objective-c coding-style

我们正在使用网络服务来获取数据。随着项目的进展,功能之间传递的参数数量也增加了。为了使其更具可读性,更容易在将来使用字典时添加/删除参数。所以每个函数调用只有一个参数,一个包含所有必需参数的字典。

因此,要设置我需要执行[aDictionary setObject:foo forkey:@"bar"]的参数并获取参数,它将为[aDictionary objectForKey:@"bar"]

为了轻松访问变量,我想到使用一个Model类,其中所有常用参数都用作属性。因此,对于一个函数调用,将使用10个属性中的3个,并且不会设置休息。所以它就像paramModel.foo = @"bar"

如果我这样做的话,我会为未初始化的未使用属性浪费内存吗?这样做是对的吗?

2 个答案:

答案 0 :(得分:2)

继续Amin Negm-Awad的观点:如果你发现自己将许多参数传递给许多方法,你几乎肯定会错误地定义你的模型类。不是创建通用字典,而是创建一个包含相关属性的简单值对象。

例如,考虑NSURL。你永远不会这样做:

[self handleScheme:scheme host:host path:path];

相反,你这样做:

NSURL *URL = [[NSURL alloc] initWithScheme:scheme host:host path:path];
[self handleURL:URL];

这是整合参数和改进设计的正确方法。

此外,如果您正在使用大量布尔参数或其他类型的“选项”,请首先考虑您是否有一个方法做了太多事情。也许它应该被分解为多种方法,每种方法都以特定的方式工作。如果你真的需要传递多个布尔选项,在ObjC中,这通常使用位字段而不是许多参数来完成。请查看[NSString rangeOfString:options:]以获取示例。

答案 1 :(得分:1)

不,这很奇怪。 (当然这是主观意见。)

一个。 “随着项目的进展,功能之间传递的参数数量也增加了。”

软件的大小与方法的参数数量之间只有一个联系(在您的示例中没有函数):如果您在设计中做错了。

将代码拆分为模块,分类,定义它们之间的良好关系等等。 定义可以保存连接数据的类。

B中。我无法看到,使用词典变得更具可读性:

[receiver doSomethingWithA:@"a"
                         B:@"b"
                         C:@"c"];

NSMutableDictionary *aDictionary = [NSMutableDictionary new];
[aDictionary setObject:@"a" forKey:@"A"];
[aDictionary setObject:@"b" forKey:@"B"];
[aDictionary setObject:@"c" forKey:@"C"];
[receiver doSomethingWithABC:aDictionary];

这是更多的代码,它是更复杂的代码(因为它需要一个额外的实例对象),参数和它的“参数目标”被分开。

在方法内部,您必须从字典中读出参数。这是额外的锅炉板代码。