2012-01-17 25 views
0
+ (Planet *)createPlanetInContext:(NSManagedObjectContext *)context 
         withName:(NSString *)name 
          type:(NSString *)type 
          group:(NSString *)group 
         andDiameter:(NSNumber *)diameter { 

"name"、 "type"、 "group"、 "diameter"の引数を1つのエンティティにカプセル化して、上記のメソッドに渡す場合、カプセル化に使用するのに最適なタイプは何ですか?上記の方法は、あなたが議論することができる簡単な例ですが、渡す必要のある引数がさらに多くある場合はどうなりますか?メソッドを呼び出す前にデータをパッケージ化して、ソリューションをセットアップするための素早く簡単なものにする必要があります。複数のメソッド引数をカプセル化する最も簡単な方法は?

+ (Planet *)createPlanetWithData:(Data *)data inContext:(NSManagedObjectContext *)context { 

それとも個別にすべての引数を一覧表示する(読みやすく)Objective-Cのプラクティスによりインラインのですか?

+1

私は個人的に辞書を使用します。したがって、パラメータを正確な順序(配列など)で追加する必要はありません。そのディクショナリのobjectForKeyを使用して、目的のパラメータを取得してください – Novarg

答えて

1

NSManagedObjectのプロパティごとに1つのキー/値のペアを辞書に設定できます。

2

私は、一般的には、明確にするために、引数を個別にリストしたいと考えています。上記のサンプルメソッドは、Objective-Cの文脈ではそれほど長くはありません。

これは、読みやすさとドキュメントに本当に関係しています。すべての引数を列挙すると、プロジェクトに出てくる開発者にはどこに渡されているのか、どんな種類のオブジェクトが浮遊しているのかが分かります。自動文書生成(例えば、Doxygen)も引数のリストを特にうまく機能させます。

しかし、あなたが言うように、それは少し扱いに​​くくなる点があります。 20個のパラメータが渡され、メソッド呼び出しは非常に長くなるでしょう!したがって、利用可能な他のオプションがあります。最も簡単なのはおそらく、iOSで既に使用されている特定のビットのデータ(特に、userInfo辞書を持っている通知の場合)を使うために使用されるNSDictionaryまたは類似のものを使用することです。

0

スーパーフレキシブルにしたい場合は、@ Novargのコメントに行き、辞書を引数として渡すことができます。これにより、メソッドのシグネチャに影響を与えることなくパラメータを追加できます。

私は、私のメソッドに渡すカスタムオブジェクトを作成するための特別な設定を持っています。これには、辞書の柔軟性だけでなく、組み込みのユーティリティや追加のロジックが含まれている可能性があります。また、辞書とは異なり、あなたはキー名および/または定数をハードコーディングする必要がある、とあなたは、たとえば、Xcodeののリファクタリング機能を使用して、プロパティの名前を変更する必要がある場合はリファクタリングするMUCHやすくなりません。

+ (Planet *)createPlanet:(PlanetArgs *)args 
{ 
      //args.context 
      //args.name 
      //args.type 
      //args.group 
      //args.diameter 

      //Args can even have some built-in logic 
      //planet.color = [args generateRandomColor]; <<-Just a rough idea 
} 
2

コードを書くことはコードを書くことよりも難しいので、読みやすくするために最適化してください。セレクタの不足は要因であってはなりません。明快さが必要です。

どのバージョンが読みやすく、それに固執しているか自問してください。私は、直接引数を持つバージョンが読みやすくなっていることは比較的明らかだと思います。

Objective-Cには複数の引数を持つメソッドのための優れた構文がありますので、これをあなたの利益に利用してください。 Cのような構文の言語では、私はまた、多くの引数を使用することを躊躇します。

関連する問題