我有四种主要方法:
+ (NSArray *)findAll;
+ (NSArray *)findAllWithOrder:(NSArray *)order;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithLimit:(NSRange)limit;
此外,我想结合这些方法(例如,我可以按顺序和条件find all
)。目前我正在做(所有可能性甚至是以不同的顺序参数,这里没有显示):
+ (NSArray *)findAll;
+ (NSArray *)findAllWithOrder:(NSArray *)order;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithLimit:(NSRange)limit;
+ (NSArray *)findAllWithOrder:(NSArray *)order conditions:(NSDictionary *)conditions;
+ (NSArray *)findAllWithOrder:(NSArray *)order limit:(NSRange)limit;
+ (NSArray *)findAllWithConditions:(NSDictionary *)conditions limit:(NSRange)limit;
+ (NSArray *)findAllWithOrder:(NSArray *)order conditions:(NSDictionary *)conditions limit:(NSRange)limit;
但有没有比为此创建数十种方法更简单的方法?那肯定很不错。感谢。
答案 0 :(得分:3)
使用包含所有参数(findAllWithOrder:conditions:limit:
)并使用nil标识未使用的参数(或者,如果是NSRange,{ NSNotFound, 0 }
)
答案 1 :(得分:2)
在我看来,Apple实现这一目标的方式是在Obj-C中实现这一目标的最佳方式之一:
定义一个包含options
字典或位掩码的catch-all方法,然后在基于字典或位掩码的方法中包含逻辑,执行相应的代码。
答案 2 :(得分:0)
不,这就是你做的方式。我敢肯定有人可以找到方法来创建几十种类似的方法,但它们很少使用。对于Obj-C(特别是Cocoa)对象来说,大量的方法只是略有不同,这是很常见的。
答案 3 :(得分:0)
对我而言,它看起来像是Builder设计模式(http://en.wikipedia.org/wiki/Builder_pattern)
的候选者使用方法创建ie Finder类:
-(void)searchOrder:(NSArray *)order;
-(void)searchCondition(NSDictionary *)conditions;
等等......这些方法将对象的成员设置为您在这些方法中传递的值。
这些方法是可选的,因此你可以调用(在Finder类的对象上)没有(在你的情况下像+ (NSArray *)findAll;
这样的最终效果)或其中一些。
最后,您调用了Finder的对象方法,即-(NSArray *)find;
,并且您有结果。