- PR -

PACパターンにおいて、Formクラスはコントロール層なのか?

投稿者投稿内容
しましま
常連さん
会議室デビュー日: 2005/01/08
投稿数: 41
投稿日時: 2006-01-06 15:11
こんにちは。

普段はMVCパターンを使ってアプリケーションを作っていますが、最近C#.NETをやり始めてPACパターンと言う物があることを知りました。
そこで、PACパターンを使ってMDIなWindowsアプリを作ろうとしましたが、Formクラスをどのように取り扱っていいか分からなくなりました。

当初、Formクラスはユーザーインターフェースを構成するものなので、プレゼンテーション層(P層)のクラスだと思っていました。
しかし、Visual C#のテンプレートどおりにコードを書くと、「新規作成」で新しい書類を作るときに最初に生成されるのがFormクラスなので、Formでコントロール層(C層)のクラスを生成管理しなければならなくなります。本来ならC層がP層とA層を管理するはずなのでは?と思います。
また、開かれている複数の書類の管理は、Formオブジェクトと共にMDIの親Formで行われているように思います。これも本来ならC層の役目では?と思います。

その辺のことを考えると、FormクラスはP層ではなく、C層という位置づけで考えたほうが、しっくり来るように感じますが、PACパターンでは、ユーザーからのアクションをP層で受けることになっていたと思うので、それでいくとやっぱりFormはP層なのか?

ということで、よく分からなくなってしまいました。.NETでPACを使ってアプリを設計する場合、具体的にどのようにすればいいでしょうか?
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2006-01-06 19:23
引用:

当初、Formクラスはユーザーインターフェースを構成するものなので、プレゼンテーション層(P層)のクラスだと思っていました。


上記の考えは合っています。

ただ、Visual C#フレームワークには別のアーキテクチャパターン(※)が使用されているので、PACパターンに当てはめようとすると、無理が生じます。
なので、PACパターンで設計する場合、Visual C#フレームワーク周りは除いて考える必要が有ります。

※Visual C#は使用した事が無いので分からないのですが、Visual C++のMFCには
ドキュメント/ビュー アーキテクチャパターンが使用されています。
(多分、同じかと)

[ メッセージ編集済み 編集者: ぽん 編集日時 2006-01-06 19:27 ]
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-01-06 22:15
どうもです。

>ドキュメント/ビュー アーキテクチャパターンが使用されています。
VC++では確かにそうですが、C#の自動生成コードではForm(すなわちPresentationまたはView)のみを生成するので、
Document-Viewアーキテクチャではありません。

なので、PACをどうしても適用したいのならば、自動生成コードを消して、
(下記記事のように)
http://www.atmarkit.co.jp/fdotnet/dotnettips/394noformicon/noformicon.html
Controlerから作り込めばよいです。

ですがまあ、別に無理して当てはめずに、だれがだれを保持しているというのはとりあえず気にしないことにして、Controler-Abstract-Presentation間で処理を適正にハンドリングするというアーキテクチャの指針とするだけで充分だと思います。(個人的な意見ですが・・・)
しましま
常連さん
会議室デビュー日: 2005/01/08
投稿数: 41
投稿日時: 2006-01-07 14:41
ぽんさん、siaさん、返信ありがとうございます。

2人の話を総合すると、「.NETでPACパターンを適用するのは、適当ではない。」という事なのでしょうか?
僕も特にPACにこだわる理由もないので、そうゆう結論になっても別に構わないのですが。

ただ、やみくもにコードを書いていってもどこかで行き詰まると思い、それなら、あるアーキテクチャに基づいてコードを組み立てるようにした方がいいだろうと思いました。
アーキテクチャにもいろいろ種類がありますが、おそらく.NETもあるアーキテクチャに基づいてフレームワークが設計されているだろうと思い、使い慣れているMVCを無理に使うよりは、.NETが想定しているアーキテクチャを使う方が、うまく行くだろうと思いました。
当初、それはPACだと思っていたのですが、どうも違ったようですね。

MFCでは、Document-Viewアーキテクチャを使うようになっているようですが、.NETではどうなのでしょうか?
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-01-07 20:41
どうもです。

別に適当ではないというわけではないと思います。実際PACで作ってもよいですし、作ることが可能です。
たとえば、
public class Controller
{
public Controller()
{
}
[STAThread]
static void Main()
{
Application.Run();
}
}
というControllerを作って、そこをアプリケーションのエントリポイントにし、Controllerから適宜Formを生成すればよいです。(下記参照です。)
http://www.atmarkit.co.jp/fdotnet/dotnettips/031vbstartup/vbstartup.html

C#(というかVSの自動生成ウィザードですが)では、使用者側にアーキテクチャ構成の自由度を持たせているというのだと考えています。(MFCではDocument-Viewが適していないところでも、それを使わざるを得なかったので反発も結構あったのではないかと思います。)
そのためかどうかはわかりませんがVSが自動生成するコードはアーキテクチャパターンを与えません。
しましま
常連さん
会議室デビュー日: 2005/01/08
投稿数: 41
投稿日時: 2006-01-08 17:20
えーと、それって、PACを使いたいなら使ってもいいけど、全て自前でコードを組み立ててくださいね。と言う事ですよね?
.NETはアーキテクチャに関するサポートが何もないのでしょうか?

.NETでMVCを使おうとするとV層とC層の切り離しがうまく行きませんでした。PACを使おうとすると、P層に比重がかかり過ぎる予感がします。
使用者側にアーキテクチャ構成の自由を与えてくれるほど、汎用性のあるフレームワークには見えません。

.NETのクラス構成をざっとながめていると、Document-Viewアーキテクチャの方が合っているような気がしてきました。ただ、MFCにあるようなViewやDocumetと言ったクラスは見当たりませんが。。。
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-08 21:57
引用:

.NETでPACを使ってアプリを設計する場合、具体的にどのようにすればいいでしょうか?


 「Pがイベントを発生させるタイミングを工夫する。」

てだけの話じゃないの?ムズかしく考えすぎじゃないすか。
しましま
常連さん
会議室デビュー日: 2005/01/08
投稿数: 41
投稿日時: 2006-01-09 23:09
引用:
「Pがイベントを発生させるタイミングを工夫する。」
てだけの話じゃないの?ムズかしく考えすぎじゃないすか。



P層で扱うイベントって、マウスダウンとかキーダウンとかのことですよね?
「発生させるタイミングを工夫する。」ってどういう事ですか? ユーザーからの操作によって発生するイベントがほとんどだと思っていましたが。
あと、C層やA層については考えなくていいんですか?

スキルアップ/キャリアアップ(JOB@IT)