ASP.NET Core を元にしたアプリケーション開発サンプルです。
本サンプルは開発フレームワークというよりも、開発時の初期テンプレート的扱いで利用可能です。
本サンプルはAPI機能のみ有しています。 UI側の実装サンプルについてはsample-ui-vue / sample-ui-reactを参照してください。
オーソドックスな三層モデルですが、横断的な解釈としてインフラ層を考えています。
レイヤ | 特徴 |
---|---|
UI | ユースケース処理を公開(必要に応じてリモーティングや外部サイトを連携) |
アプリケーション | ユースケース処理を集約(外部リソースアクセスも含む) |
ドメイン | 純粋なドメイン処理(外部リソースに依存しない) |
インフラ | DI コンテナや ORM 、各種ライブラリ、メッセージリソースの提供 |
UI 層の公開処理は通常 Razor を用いて行いますが、本サンプルでは異なる種類のクライアント利用を想定して RESTfulAPI での API 提供のみをおこないます。(利用クライアントは別途用意する必要があります)
ASP.NET Core は様々な利用方法が可能ですが、本サンプルでは以下のポリシーで利用します。
- 例外処理は基本上位委譲で終端 ( RestErrorFilter ) で捕捉定義
- ORM 実装として EntityFramework を利用
- 認証 / 認可は Identity を想定 (現在は未使用)
TBD
TBD
パッケージ/リソース構成については以下を参照してください。
Sample
Context … インフラ層
Controllers … UI層
Models … ドメイン層
Usecases … アプリケーション層
Utils … 汎用ユーティリティ
- config.json … プロジェクト設定情報
- project.json … プロジェクト構成定義
- DependencyInjection.cs … DI定義
- Program.cs … 実行可能な起動クラス
- Startup.cs … 起動構成定義クラス
Sample.Tests … テストプロジェクト
サンプルユースケースとしては以下のようなシンプルな流れを想定します。
- 口座残高100万円を持つ顧客が出金依頼(発生 T, 受渡 T + 3)をする。
- システムが営業日を進める。
- システムが出金依頼を確定する。(確定させるまでは依頼取消行為を許容)
- システムが受渡日を迎えた入出金キャッシュフローを口座残高へ反映する。
サンプルなので、DB は SQLite を利用したファイルベースにしています。実際の開発用途では SQLServer などに変更してください。
開発時は最新の Visual Studio を入れてしまうのが簡単でオススメです。過去バージョン等でインポートが難しいようであれば Visual Studio Code を利用してください。
https://www.microsoft.com/net/core#windows
環境構築後に sample-aspnet-api.sln をダブルクリックで Visual Studio からアプリケーションを実行できます。
開発時は Visual Studio Code を入れてしまうのが良いですが、Mac 上での実行確認だけならコンソールベースで十分です。
https://www.microsoft.com/net/core#macos
動作確認手順は以下を参考にしてください。
- 環境構築後に Sample 直下へ移動する
export ASPNETCORE_ENVIRONMENT=Development
で起動変数を開発モードに- Startup.cs を見れば分かるようにファイル DB 構築と CORS 設定を有効にしています
dotnet run
を実行してアプリケーションを起動
※テスト確認したいなら Sample.Test 直下へ移動して、 dotnet test
を実行してください。
ASP.NET Core ベースの Identity 実装がまだ完全に消化できていないので一旦コメントアウト
Resources 配下のクラスを利用。
- Identity を利用した認証/認可のサポート
- Repository絡みで起こるであろうリソースリークを想定してライフサイクルでの正確な挙動を調べる
- 非同期系の考慮 (async / await 適用すべき箇所をまだあまり調べられてない)
- キャッシングの追加
- ロギング周りの最適化