C#でフルスタックでTaskNoteアプリを開発する

投稿者: | 2021年7月24日

簡単なタスクアプリを開発して、これまで活用したフレームワーク及びライブラリとその設計パターンを備忘録として残していきます。

タスクアプリのコードは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.ClientHttpクライアント通信のインターフェイス
Http.Client.RestHttpクライアント通信をRestSharpライブラリで実装
Storageストレージ操作のインターフェイスと実装クラス
WpfConfigurationManagerデクストップアプリ用の設定ファイル
Loggingトレースログ関係
Modelsクライアントサイドのビジネスロジック
Models.Logging名前空間とクラス名でロギング条件を変更
WinRTWindowsアプリのAPIにアクセス
PlatformViewModelとViewのインターフェイス
Platform.WPFWPFフレームワークによるデクストップアプリ用のUI
Serverサーバー
Server.Entity
Server.Entity.FrameworkCoreViewの実装クラス
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
PresentationUICore3.1
AppエントリポイントCore3.1

ツリー構造

サードパーティーライブラリにアクセスできる範囲を最小限に抑える構成でプロジェクトを分離しています。この手法をStarwayパターンと呼び詳しくは下記リンクで解説しています。

マルチモジュール開発のベストプラクティスはStarwayパターン

各プロジェクトが参照しているサードパーティーライブラリの一覧は下記のとおりです。

プロジェクト名サードパーティーライブラリ
DesktopMicrosoft.EntityFrameworkCore.Tools
Desktop.Debug
Desktop.Package
ConfigurationMicrosoft.Configuration.Json
Entity
Entity.FrameworkCoreMicrosoft.EntityFrameworkCore.Relational
Entity.FrameworkCore.DbSqliteMicrosoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Proxies
Entity.FrameworkCore.InMemoryMicrosoft.EntityFrameworkCore.InMemory
Http.Client
Http.Client.RestRestSharp
Storage
WpfConfigurationManagerSystem.Configuration.ConfigurationManager
LoggingMicrosoft.Extensions.Configuration.Json
Micorosoft.Extensions.Logging.Configurtion
NLog.Extentions.Logging
Models
Models.Logging
WinRTMicrosoft.Windows.SDK.Contracts
Platform
Platform.WpfMicrosoft.WindowsDesktop.App.WPF
Server
Server.Entity
Server.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Relational
Server.EntityFrameworkCore.InMemoryMicrosoft.EntityFrameworkCore.InMemory
Server.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.SqlServer
Server.Models
WebServerMicrosoft.EntityFrameworkCore.Tools
Swashbuckle.AspNetCore.SwaggerGen
Swashbuckle.AspNetCore.SwaggerUI

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)