私のアプリには、 の複数のサブクラスがありUITableViewCell
ます。ファクトリ クラスを使用して適切な型をインスタンス化し、それらを必要とする人に提供します。ファクトリ クラスは、セルを表すデータ オブジェクトである引数を取得します。工場はコントローラーの一部なので、それでいいと思います。
Cellfactory* factory = [[Cellfactory alloc ] initWithData:data];
問題は、そのデータ オブジェクトがファクトリ クラス内のビュー表現でマップされるときに発生します。私は2つの解決策を考えました:
マッピングでディクショナリを保持するために、キーはデータ オブジェクト クラスの文字列表現になり、値はそのデータ オブジェクトのレンダリングを担当するビュー クラスの文字列表現になります。そうすれば、ファクトリがデータ オブジェクトに基づいてビューを提供するように求められたときに、マップ ディクショナリを調べて、どのクラスをインスタンス化するかを知ることができます。欠点は、別のデータ オブジェクトを追加する場合、ファクトリ メソッドも変更する必要があることです (辞書に新しいエントリを追加します)。
新しいオブジェクトをいくつ追加してもファクトリ メソッドを変更する必要がない、より柔軟なソリューションは、データ オブジェクト自体の内部でデータ オブジェクトのレンダリングを担当するビュー クラスの名前を保持することです。しかし、それはモデルをビューに結合し、モデルがレンダリングに関する情報を提供しなければならないのはどういうわけか適切ではありません。
では、これら 2 つのうち、どちらがより長期的な選択肢となるでしょうか? それらの両方を打ち負かす他の選択肢はありますか?