5

UIコンポーネントがデータ構造であってはならない理由を説明しようとしている別のプログラマーがいます。

たとえば、「データベース」からレコード セットを含むデータ構造を取得し、そのレコード セットをアプリケーション内の UI コンポーネントに表示したいとします。

このプログラマー (彼は無名のままで、彼は若く、私は彼に教えています...) によると、アプリケーション内で UI コンポーネントを描画するクラスにデータ構造をサブクラス化する必要があります!!!!!!

したがって、このロジックに従って、レコード セットは UI の描画を管理する必要があります。

******ヘッドデスク*****

UI 上の複数の種類のコンポーネントで同じデータ構造をレンダリングしたい場合、レコードセット自体に描画を要求するのは間違っていることはわかっています。レコード セットの基本クラスからレンダリングするすべての UI コンポーネントに対して、さらに別のクラスを拡張する必要があります。

私は、MVC パターンの「クリーンさ」を十分に認識しています (つまり、データ (モデル) を UI (ビュー) またはその上で行われるアクションと混同しないということです)。 data (コントローラーは多かれ少なかれ...まあ、実際にはAPIが実際にそれを処理する必要はありません...そして、コントローラーはできる限り少ない呼び出しを行い、どのビューをレンダリングするかを伝えます))しかし、それは確かにかなりきれいですデータ構造を使用して UI コンポーネントをレンダリングするよりも!

上記の例以外に、彼に送ることができる他のアドバイスはありますか? OOP を初めて学ぶときは、すべてを拡張したいという「段階」を通過することを理解しています。

デザインパターンがすべての問題の解決策であると考える段階が続きます...これも完全に正しいわけではありません...ジェフに感謝します。

この子をそっと正しい方向に向ける方法はありますか? 私の言いたいことを彼に説明するのに役立つ例は他にありますか?

4

3 に答える 3

4

マーティン・ファウラーについて聞いたことがありますか?

ユーザー インターフェイス コードの分離

いずれにせよ、レンダー メソッドをデータ コントロールに追加する方向にさらに進みたい場合は、「疎結合」を調べてもらいます。途中まで到達するような一般的なタイプのインターフェイスを作成することは問題ありませんが、残りは UI コンポーネントが行う必要があります。

于 2010-03-18T22:19:11.437 に答える
0

これは、機能的責任と非機能的責任に要約されます。データ構造が何をするか、どのように視覚化されるかは、2 つの完全に別のものであり、本質的に MVC パターンの根幹です。

ここには、循環依存関係の概念もあります。UI はデータ構造について認識している必要があるため、データ構造が UI に依存することを許可すると、小さな泥の玉ができてしまいます。

于 2010-03-18T22:31:55.377 に答える
0

一般に、デカップリングのポイントについて:

  1. 同じデータ構造をレンダリングする UI のさまざまなコンポーネントが存在する可能性があるだけではありません。完全に異なる UI (Web、デスクトップ アプリケーションなど) を使用することもできます。もちろん、andPersonを使用してサブクラス化することもできます(これは既に間違っているように聞こえますよね? 命名は単に Person の種類に関するものではなく、他のもの) .WebPersonDesktopPerson

  2. 各 UI は、Teacherや など、さまざまな種類の人物で機能しStudentます。したがってWebPersonWebTeacherWebStudentDesktopPersonDesktopTeacherおよびが得られDesktopStudentます。

ここでWebPerson、メソッド「drawAddressFields()」を定義して、住所フィールドの Web バージョンを描画するとします。しかし、追加のデータ フィールド「salary」を使用WebTeacherするために派生するTeacher必要があるため (そして、単一継承を仮定します)、もう一度「drawAddressFields()」を実装する必要があります。

したがって、「これはより多くの作業を引き起こす」という議論は、何らかの動機付けを生み出すのに役立つかもしれません:-)

ところで、drawAddressField() のコードを実装するデリゲートが自動的に作成され、データ構造とは別に描画を行うコンポーネントが作成されます。

于 2010-03-18T22:47:34.863 に答える