我们正在使用网络服务来获取数据。随着项目的进展,功能之间传递的参数数量也增加了。为了使其更具可读性,更容易在将来使用字典时添加/删除参数。所以每个函数调用只有一个参数,一个包含所有必需参数的字典。
因此,要设置我需要执行[aDictionary setObject:foo forkey:@"bar"]
的参数并获取参数,它将为[aDictionary objectForKey:@"bar"]
。
为了轻松访问变量,我想到使用一个Model类,其中所有常用参数都用作属性。因此,对于一个函数调用,将使用10个属性中的3个,并且不会设置休息。所以它就像paramModel.foo = @"bar"
。
如果我这样做的话,我会为未初始化的未使用属性浪费内存吗?这样做是对的吗?
答案 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];
这是更多的代码,它是更复杂的代码(因为它需要一个额外的实例对象),参数和它的“参数目标”被分开。
在方法内部,您必须从字典中读出参数。这是额外的锅炉板代码。