2

私はちょうどプログラミング設計の質問について熟考していました:

たとえば、あるクラスから別のクラスへのメソッドに 5 つの文字列を渡しているとします。たとえば、次のような詳細です。 ホスト名 ホスト ドメイン ユーザー サブドメイン ユーザー名 パスワード

どちらが良いですか?1. それらを NSString オブジェクトの配列として渡すか、または 2. 呼び出されたメソッドを再定義して、5 つの異なる NSString パラメータを受け入れるか?

それを行うより効率的な方法はどれですか?

4

1 に答える 1

6

5 つのフィールドを囲むカスタム オブジェクトを渡すという 3 番目の方法を見逃しました。

@interface HostDef // Pick a good name that fits well the purpose of your method.
@property (nonatomic, readwrite) NSString* hostName;
@property (nonatomic, readwrite) NSString* hostDomain;
@property (nonatomic, readwrite) NSString* userSubdomain;
...
@end

これは、最も説明的で拡張可能な方法です。渡されたアイテムのリストを拡張する必要がある場合はHostDef、メソッドのシグネチャをそのままにして、 を変更します。

近い将来、パラメーターの数が 5 のままである可​​能性が高い場合は、5 つの個別の引数を持つメソッドも同様に優れています。具体的には、引数の数が、変化しない世界またはアルゴリズムの基本的なものに対応している場合、個別の引数を持つメソッドは適切な選択です。たとえば、メソッドがバイナリ ツリーの左サブツリーと右サブツリーを入力として受け取る場合、引数を 2 つ持つことが適切です。これは、バイナリ ツリーは、バイナリ ツリー以外のものにならなければ引数を増減できないためです。

名前のないオブジェクトの単純な配列を渡すことは、最も読みにくい選択肢であり、維持するのも最も困難です。すべてのオブジェクトがプログラムに対して同じ「意味」を持たない限り、それらを同じ配列に入れるべきではありません。たとえば、ホスト ドメインとユーザー サブドメインを同じ配列に配置すると、プログラムの読者を誤解させる簡単な方法になり、メンテナンスが大幅に複雑になります。

于 2013-04-14T10:56:11.943 に答える