2009-03-31 15 views
3

私は基本的に5つのビジネスエンティティを使用するアプリケーション、A、BC、DおよびENSDictionariesとプロパティを持つカスタムオブジェクトの違いは何ですか?

  • Aは、いくつかの特性を有し、Bの
  • Bのリストを保持しているいくつかの他のプロパティとのリストを持っていると書いていますCさんとDの
  • Cのリストには、いくつかの他のプロパティとD'sのリストとEの
  • Dのリストがあるだけでいくつかのプロパティ
  • Eが持っている唯一のいくつかのプロパティ
を持っています10

いずれかの間に継承はありません。 実際のビジネスロジックは含まれていません。オブジェクトは作成され、読み込まれてから、読み取り専用でアクセスされ、それ以上の操作は行われません。

私の自然なコーディングスタイルは、オブジェクト指向を行って、それらのエンティティごとにクラスを書くことになり、リストのNSArraysを使用し、合成された言及した性質を持っています。

コードを読むことができます。

しかし、別のアプローチは、あまりにも明白なようだ:のみNSDictionariesとNSArrays、およびキー/値の代わりのプロパティでの作業を使用します。これはより効率的で、私のiPhoneスタイルのプログラミングに何らかの形で「近づいている」ようですが、明らかに読みにくいコードにつながります。もう一つの利点は、シリアル化のための追加のカスタムエンコーディング/デコードが必要ないことです(JSONを使用してディスクに状態を維持する...) このように、この論文では、後者のアプローチについて話しています。カスタムオブジェクトを使用する...

これは本当にちょうどの質問の問題ですか?あるいは、アプローチの1つに対して、他の議論が好まれるかもしれませんか?ディクショナリだけでメモリ/パフォーマンスが改善されていますか?それは好ましい "Apple Coding Style"ですか? (私はJava/C#から来ています)。

答えて

4

私はこの分野でのJava/C#とココアの間に大きな違いが表示されません。あなたの質問は、これらのプラットフォームにも等しく適用できます(キー値ストアとリレーショナルストアにも同じことが適用されます)。オブジェクト指向環境で

、あなたはデータと構造化指向とオブジェクトスタイルを格納するためのキーと値のアプローチの柔軟性とのトレードオフを行う必要があります。柔軟性が必要な場合(たとえば、構造が動的であり、ユーザーによって変更されるか、コンパイル時に知られていないなど)キー値アプローチを使用します。さもなければ、そのルートをとることで、OOPの慣習と利益から完全にはずれてしまうかもしれません(ところで、これは重要なポイントです。その特定の状況に合ったオブジェクト指向の原則に固執するという面倒はありますか?それに答えるには、具体的な状況を分析する必要があります)

2

これは主に、あなたのオブジェクトは、単なるデータの集合(キー/値のペア)や、独自の機能を実装しているかどうかに依存します。

彼らは、私はNSDictionaryので行くと言うだろうデータであれば、それははるかに少ないコードだとあなたが指摘するように、各クラスの直列化ルーチンを記述する必要はありません。

+0

シリアル化の必要性がわかりません。オブジェクトの使用中になぜ必要なのでしょうか? –

1

ハイブリッドアプローチを使用します。オブジェクトが基づいているディクショナリを格納しますが、最も頻繁に使用される値は、オブジェクトがディクショナリから初期化されたときに入力されるプロパティとして公開されます。

辞書を取得するためのプロパティも提供します。こうすることで、新しい値を辞書のコードの特定の領域(おそらくサーバーによって追加された新しい値)にすばやく伝播する必要がある場合、柔軟性があります。呼び出し元が値を大量に使用している場合は、呼び出し元をマイグレーションして真のプロパティにし、プロパティの完了と型チェックを取得することができます。

関連する問題