2016-06-17 13 views
1

私はテスト可能なコードを書くための原則について多くの話題を読んだ。私はアプリケーションでDependency Injectionを使用しています。私は非常に大きな問題に直面しています。 一番上のViewControllerでは、オブジェクトの配列をロードしています。ユーザーは、それらのオブジェクトを選択して、階層の深いところに行くことができます。問題は、一部のコントローラ(リーフコントローラを含む)で選択されたオブジェクトが必要であり、一部では必要ないことです。絵で階層の下にデータを渡す

、それはこのようにすることができます:今のところ

NeedObject -> don't need -> don't need ->  need 
TopController -> otherController1 -> otherController2 -> leafController 

、私はすべての階層を選択したオブジェクトを渡しているが、私はそれが述べる原則を尊重していないとして、それは悪いですか感じることができますオブジェクトは必要なものだけを知るべきであるということです。しかし、私はこの原則をどのように尊重するかを理解することはできません。

オブジェクトはすべてManagedObjectの子であり、CoreDataに保管されています。 クラス定義のブール値isSelectedのように追加して、selected = YESのオブジェクトに対してCoreDataを要求するオブジェクトを使用しましたが、オブジェクトの "選択可能性"は何かではないはずです永続的な、そうですか?

答えて

1

情報を継承する方法は、依存関係の注入を行う方法です。中間層の中には、それをさらに継承する以外の情報は使用しない場合でもあります。

これは、情報を要求するために最上位レベルのオブジェクトに階層構造のオブジェクトを「バックアップする」ことよりも優先されます。下位レベルのオブジェクトは、上位レベルのオブジェクトについてほとんど知っていないはずです。これにより、時間の経過とともに階層を展開するのに最も柔軟に対応できます。

Appleは、このように依存関係注入データを渡すためのプロトコルを定義することを推奨します。これにより、クラス間の依存関係がさらに分離されます。

+0

あなたの答えをありがとう、それは本当にDIの概念を理解するのに役立っています – Bilkix

2

私はあなたがすでにやっていることは罰金だと思うあなたの助けをいただき、ありがとうございます。

説明したように、otherController1とotherController2は、その参照を下位レベルのコントローラーに渡すために、ユーザーが選択したオブジェクトへの参照を '必要とします'。