●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.