0

Visual Studio (2010) で WPF プロジェクトを作成すると、MainWindow.xaml が自動的に作成されます。このコード ビハインドには、MainWindow クラスと が含まInitializeComponent()れています。プロジェクトファイルのどこかに、プレゼンテーションに相当する実際の機能があることを表面的に知っています。main()そのため、アプリケーション GUI がロードされると、GUI イベントは、アプリケーションレイヤーが存在するとすぐに「下方」に処理されます。

私は Model-View-Presenter アプリケーションのラインで何かを開発する予定であり、非常に初歩的なドメイン ロジックとアプリケーション ファサードをすでにモックしています。

私の疑問は次のとおりです。ドメインロジックがある場合、プレゼンターをアプリケーションファサードにどのように接続する必要があるか、またはより実用的には、(プロジェクトファイル内の) WHERE とどのように空白の WPF アプリケーションからアプリケーションを「肉付け」し始める必要がありますか? Visual Studio で作成されます。既存のプロジェクトの追加のようなものを作成しましたが、古いものではありません。

(編集:デザインパターンの本から:「ドメインモデル内の特定のオブジェクトをサブジェクトとしてアプリケーションファサードが開かれます。このサブジェクトは、ファサードによって行われるすべての操作の開始点として機能します。」それは良いようです初心者のために開始...)

それを行うための一般的で明白な、またはベストプラクティスの方法はありますか?

(また、誰かがこの質問のより良いタイトルを提案/編集できる場合は、それをいただければ幸いです)

助けてくれてありがとう!

4

1 に答える 1

1

Microsoftのこのガイド(少し古いですが)では、Rich Guiアプリケーションのレイヤーと部分についてかなり詳しく説明しています:http://msdn.microsoft.com/en-us/library/ee658087.aspx


プロジェクトとファイルを実際にどのように構成するかは、実際にはあなた次第です。1つのプロジェクトでスタンドアロンアプリケーションを構築できます。そのコードを簡単に再利用することはできませんが、WPFアプリケーションは気づきません。

クラスは複数の方法でグループ化できます。名前空間別、アセンブリ(プロジェクト)別、ネストされたクラスなど...いつ使用するかは、通常、再利用するか、さまざまなマシンに配布するかによって決まります。

UIパーツとWebサービスパーツを作成するときは、おそらくそれぞれを異なるプロジェクトに固定します。

Webサイト、Windowsアプリ、電話アプリでビジネスクラスを再利用する場合は、それぞれを別のプロジェクトに固定することをお勧めします。

プロジェクトに分離すると、クラス間に循環依存関係を作成できなくなります。

通常、UIから一連のプロジェクトを取得し、データレイヤーなどを参照するビジネスレイヤーを参照します。また、これらの各レイヤーからの参照である横断的関心事(ロギングやセキュリティなど)がいくつか見られることがよくあります。 '。

最終的に、レイヤーはプロジェクト(アセンブリ)または名前空間(プロジェクト内)にマップできます。どちらを選ぶかはあなた次第です。


WPFプロジェクトでは、アプリケーションのエントリポイントはApp.Xamlによって指定されます。そこにロードするメインフォームへの参照があります。

 <Application x:Class="WpfApplication1.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml"> <-- Start up here -->
    <Application.Resources>

    </Application.Resources>
 </Application>

実際のエントリポイントは、プロジェクト設定で定義されています。 オブジェクトを起動します

App.xaml.csで任意の初期化コードを開始できます。OnStart最も簡単な方法は、イベントまたはイベントをサブスクライブすることOnLoadCompletedです。MainWindow.xaml.csコードでロジックを開始することもできます。実際のロジックを別のクラスに配置し、OnStartイベントまたはOnLoadCompletedイベントから参照します。

スタートアップイベント

そこに独自のコードを追加します

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{

    private void Application_Startup(object sender, StartupEventArgs e)
    {

    }
}

より優れた、よりオブジェクト指向でユニットテスト可能な方法は、PrismまたはMVVMLightを使用することです。これらのフレームワークの範囲は非常に大きいため、独自のトピックが必要です。

なぜメインループが必要なのかわかりません。ある種のゲームや3Dレンダリングを行う予定がない限り。その他の場合は、表示されているオブジェクトにコマンドを追加し、Windowsにプライマリ入力の登録とイベントのディスパッチを処理させることで十分です。実行時間の長いタスクの場合は、スレッド化を使用してバックグラウンドで実行できます(別のトピックもあります)。

于 2013-01-15T15:57:05.667 に答える