●Model/View


00503/00503 VFF15672 T's-Neko Model/View ( 7) 97/09/25 23:23 00466へのコメント tmk さん、はじめまして。T's-Neko です。(^o^)o >又、Model/Viewしてないもはどういうものですか? たとえば、VB なら、Code が無く Frame だけのプログラム になるでしょう。 データを Code に独立させることで、表示形態が変わっても (たとえば、Windows フォルダのアイコン表示や一覧表示でも) Code は変える必要が無くなります。 逆に、表示にだけ必要になるデータも分けられます。 普通にプログラムしても、アプリケーションとファイルで 大抵 Model/View の構造になっているでしょう。 ただ、その区切りをどこにとるか、どこまでの処理が View に相当するかは微妙なところになります。 そこらへんは #486 からのツリーにちょっと触れているので 参考にしてください。(Document/View = Model/View として 参照してください) --- Neko.
00486/00486 VFF15672 T's-Neko メッセージの内容とタイミング ( 7) 97/09/24 22:49 00443へのコメント katana さん、はじめまして。T's-Neko です。(^o^)o >ここの会議室は、最近覗きはじめ、過去のログについても、ぼちぼち読みはじめ >たところですが、みなさんレベルが高く、質問するのもちょっと気がひけるので いえいえ、気がひけるのは仕方ないですが(私たちが悪いんです...) どんどん質問してください。未だに初心者がいない入門会議室なんで...。(^^; >   会社 ー 部門 ー 課 ー グループ >(全てprivate属性で保持。) private とは言っても、getBumon() 関数などがあって、 参照することが出来るようになっているんでしょうね。 そうじゃないと使いにくいでしょうし。(確認です) >ここで、各階層のインスタンスについて、追加や削除などの操作を行うメソッド >を実装する際は、操作対象の一つ上のクラスに実装(例えば、課の追加、削除等 >は部門クラスに実装)するのが通常のやり方と考えてよいのでしょうか? たとえば部と課の場合、 部.addKa( new 課 ); もできるし new 課( 部 ); もできます。 どちらがいいかは宗教的なものだと思います。パフォーマンスは、 どちらでも、ほとんど同じです。僕は、コンテナクラスと同じ やりかたで慣れてるから前者にしますが、余裕があれば、 後者でも次の場合と統一が取れていいと思います。 それは削除の場合なんですが、 部.removeKa( 課 ); もできるし delete 課; もできます。 前者は部と課の両方を指定する必要があるので、後者の方が (クラスを使う人にとって)使いやすいでしょう。 前者の場合、コンテナの public 属性を使うなら、 部.課コンテナ.remove( 課 ); ということができるので、実装が楽だけどね。 >また、ある部門の課構成を表示し、その内容の編集(課の削除、追加等)をつかさ >どる別のクラスを設計するとします。その場合、表示を担当するクラスは、会社 >クラスのメソッドにより、目的の部門クラスのインスタンス・コピーを得ます。 > >表示を担当するクラスは、ある部門の課一覧を表示し、ユーザーの指示により、 >部門クラスの課追加、課削除メソッド等を呼び出して操作を行い、操作後の部門 >インスタンスを、会社クラスの部門更新メソッドで再登録するとします。このよ >うに、表示を担当するクラスが部門クラスのインスタンスを得て、操作を行う方 >法は、実装上、正しいのでしょうか? 表示と編集は別のクラスに分けた方がいいですね、Document と View を 分けた方がいい、とよく言われますね。 たとえば、ある部を削除するなら、メッセージは次のように伝わっていく でしょう。 [User] ↓ 削除命令(ボタン・イベントなど) [View] ↓ 削除命令と削除する課の参照またはID [Document・部または課または会社] ただ、会社クラスの部門更新メソッドがあるので、2番目の メッセージは、部門更新メソッドのタイミングで通知されます。 メッセージを受け取る Document(会社じゃなく部とすると)には、 部.remove( 課 ); という操作があり、実際の削除は部が行います。 もちろん、delete 課; でも構いません。 あと、表示するたびにインスタンス・コピーを得るのは、非常に効率が 悪いと思います。表示クラスが編集クラスの操作(検索など)を用いて 目的の要素(課など)を参照(ID、ポインタ)すれば効率よく (すべてのデータをコピーすること無く)表示できます。 ただ、クライアント・サーバなどネットワークを介する場合などは、 参照が物理的にできないので、インスタンス・コピーでいいと思います。 メッセージは、参照(ID)や差分情報などを用いて、なるべく 小さくするようにした方がいいですね。 --- Neko.

This text was copyed from Niftyserve Programer's Forum Pro.