5

良い OOP の原則とは何だろうか。iOS アプリにUITreeView、および がありUINodeViewUITreeViewオブジェクトに があり、このルート ノードが、および でrootNodeView分岐している場合。leftChildNodeViewrightChildNodeView

のハンドラーに実装されている画面のどこにでも各UINodeViewオブジェクトを「ドラッグ アンド ドロップ」できる場合、それは適切な OOP 原則ですか? さらに、新しい nodeViewが、左右の子を持たないノードの 1 つに実際に近い場合、そのノードをそのノードに子として追加できます。UINodeView-touchesMovedfoofoo

そして、別の nodeView が親を持たない (つまり、ぶら下がっている) 場合、の子としても追加できるのbarは理にかなっていると思います。foobar

このfoonodeView は、「ノードに左または右の子として追加する許可を求める」必要があり、「許可されている場合は追加する」必要があります。UIViewControllerまたはUITreeView、ノードが内部で移動していることを検出し、「別のノードに近いと判断する必要があります」ノード (画面上のすべてのノードのうち) であり、左右の子がなくfoo、子として追加します"?

明らかに、ツリー内のノードだけが子ノードを追加できる場合UITreeViewは、その仕事を行うことができますが、任意のノード (ぶら下がっているかどうかに関係なく) が親になることができる場合はUIViewController、メイン ビューUIViewがその仕事をする必要があるようです。

いずれかの方法でそれを行うことは、優れた OOP 原則に違反しますか?

4

2 に答える 2

1

UITreeViewがこれを処理し、ノードがプロトコル/デリゲート通信を介して位置の変更について通知する必要があると思います。TreeViewは、ノードの位置の変更によって別のノードとの衝突などが発生するかどうかを確認できる唯一のオブジェクトです。

本当に良いOOPコードを書きたい場合は、「Model-View-Controller」パターンを使用してみてください。ここで、ビューはTreeViewです。モデルは、すべてのNode-Data-Objectsを保持し、ノード、およびコントローラーは、ビューから位置の変更を受け取り、モデルと話し、何をするかを決定してから、適切なアクション(ノードを別のノードのリーフとして追加するなど)を実行する必要があります。

そうすれば、データストレージにRAMの代わりにデータベースを使用したり、ビューを置き換えるだけでiPhoneの代わりにiPadのコードを使用したりするなど、将来の変更に完全に柔軟に対応できます。

于 2012-09-07T12:38:21.937 に答える
0

私は stk に同意します。ビジネス ルールの実装であるモデルと、視覚的表現であるビューとの間に明確な区別が必要です。

明らかにする段落は最後の段落です。

明らかに、ツリー内のノードのみが子ノードを追加できる場合、UITreeView はその仕事を行うことができますが、任意のノード (ぶら下がっているかどうかに関係なく) が親になることができる場合、UIViewController またはメイン ビュー UIView が仕事をする必要があるようです.

つまり、モデルはビジネス ルールに依存します。ルールを表現できるようにロジックを設計する必要があります。フリー フローティング ノードがある場合は、明らかに接続ロジックを保持する必要があります。

そのため、ツリー/ノード ロジックをビュー ロジックから分離します。

于 2014-01-28T06:12:12.337 に答える