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にプライマリ入力の登録とイベントのディスパッチを処理させることで十分です。実行時間の長いタスクの場合は、スレッド化を使用してバックグラウンドで実行できます(別のトピックもあります)。