目次
簡単なタスクアプリを開発して、これまで活用したフレームワーク及びライブラリとその設計パターンを備忘録として残していきます。
タスクアプリのコードはGithubに公開しています→TaskNote
概要
開発しているプラットフォームは下記
- デクストップ・・・・・・・WPF
- Windowsストアアプリ・・・MSIX
- バックエンド・・・・・・・asp.net core
最近はXamarinの案件に参画できたので、モバイル版も開発する予定です。

プロジェクトの機能説明
各プロジェクトの概要を説明します。
*表は文数削減のためTaskNote名前空間を省いています。
| プロジェクト名 | 用途 |
| Desktop | デクストップアプリ起動のエントリポイント |
| Desktop.Debug | デバッグ用アプリ起動のエントリポイント |
| Desktop.Package | パッケージインストーラーの作成 |
| – | オプションデータクラスなどクライアントサイドで利用されるクラス |
| Configuration | 設定ファイル |
| Entity | 組込データベース操作のインターフェイスとEntityデータクラス |
| Entity.FrameworkCore | 組込データベース操作をEntityFrameworkCoreライブラリで実装 |
| Entity.FrameworkCore.DbSqlite | 組込データベースをSQLiteで実装 |
| Entity.FrameworkCore.InMemory | 組込データベースをメモリ内で実装 |
| Http.Client | Httpクライアント通信のインターフェイス |
| Http.Client.Rest | Httpクライアント通信をRestSharpライブラリで実装 |
| Storage | ストレージ操作のインターフェイスと実装クラス |
| WpfConfigurationManager | デクストップアプリ用の設定ファイル |
| Logging | トレースログ関係 |
| Models | クライアントサイドのビジネスロジック |
| Models.Logging | 名前空間とクラス名でロギング条件を変更 |
| WinRT | WindowsアプリのAPIにアクセス |
| Platform | ViewModelとViewのインターフェイス |
| Platform.WPF | WPFフレームワークによるデクストップアプリ用のUI |
| Server | サーバー |
| Server.Entity | |
| Server.Entity.FrameworkCore | Viewの実装クラス |
| Server.Entity.Framework.Core.InMemory | データベースをメモリ内で実装 |
| Server.Entity.Framework.Core.SqlServer | データベースをSQL Serverで実装 |
| Server.Models | サーバーサイドのビジネスロジック |
| WebServer | サーバーアプリケーション |
モジュール関連
モジュールはレイヤーとツリー構造で依存関係を構成しています。
レイヤー構造
いわゆるレイヤードアーキテキチャを模した構造です。
下記表の4つのソリューションフォルダを使って分離しており、依存する方向は下から上です。また、依存される側のプロジェクトはStandard2.1をターゲットにして、すべての.Netアプリケーションが共有できるライブラリでビルドします。
| ソリューションフォルダ | 用途 | .net |
| Infrastructure | インフラ | Standard2.1 |
| Logic | ビジネスロジック | Standard2.1 |
| Presentation | UI | Core3.1 |
| App | エントリポイント | Core3.1 |
ツリー構造
サードパーティーライブラリにアクセスできる範囲を最小限に抑える構成でプロジェクトを分離しています。この手法をStarwayパターンと呼び詳しくは下記リンクで解説しています。
マルチモジュール開発のベストプラクティスはStarwayパターン
各プロジェクトが参照しているサードパーティーライブラリの一覧は下記のとおりです。
| プロジェクト名 | サードパーティーライブラリ |
| Desktop | Microsoft.EntityFrameworkCore.Tools |
| Desktop.Debug | |
| Desktop.Package | |
| – | |
| Configuration | Microsoft.Configuration.Json |
| Entity | |
| Entity.FrameworkCore | Microsoft.EntityFrameworkCore.Relational |
| Entity.FrameworkCore.DbSqlite | Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Proxies |
| Entity.FrameworkCore.InMemory | Microsoft.EntityFrameworkCore.InMemory |
| Http.Client | |
| Http.Client.Rest | RestSharp |
| Storage | |
| WpfConfigurationManager | System.Configuration.ConfigurationManager |
| Logging | Microsoft.Extensions.Configuration.Json Micorosoft.Extensions.Logging.Configurtion NLog.Extentions.Logging |
| Models | |
| Models.Logging | |
| WinRT | Microsoft.Windows.SDK.Contracts |
| Platform | |
| Platform.Wpf | Microsoft.WindowsDesktop.App.WPF |
| Server | |
| Server.Entity | |
| Server.EntityFrameworkCore | Microsoft.EntityFrameworkCore.Relational |
| Server.EntityFrameworkCore.InMemory | Microsoft.EntityFrameworkCore.InMemory |
| Server.EntityFrameworkCore.SqlServer | Microsoft.EntityFrameworkCore.SqlServer |
| Server.Models | |
| WebServer | Microsoft.EntityFrameworkCore.Tools Swashbuckle.AspNetCore.SwaggerGen Swashbuckle.AspNetCore.SwaggerUI |