【ドメイン駆動設計】デスクトップアプリのアーキテクチャ

本記事では、デスクトップアプリでドメイン駆動設計(  domain-driven design, DDD ) を実装するときのアーキテクチャについて書きます。

デスクトップアプリで実装するときは、ユーザーレイヤなるものを追加します

目次

アーキテクチャ

デスクトップアプリでドメイン駆動設計を実装するときのアーキテクチャです。

実践ドメイン駆動設計のアーキテクチャを参考にしました。

デスクトップアプリでドメイン駆動設計を実装するために、ユーザーレイヤなるものを追加しました

ユーザーレイヤは、ぼくが勝手に定義した言葉です。

ユーザーレイヤの役割

ユーザーレイヤでは、画面制御を行います。

以下、ユーザーインタフェースレイヤはUIレイヤと表記します。

  • ボタンクリックなどのイベントを受け、UIレイヤに要求を送る
  • UIレイヤから画面表示内容を受け取り、画面表示する

上記画面を例にすると、

  • 左側のリストボックスに表示する内容は、UIレイヤから受け取る
  • リストボックスの項目をクリックしたとき、項目IDをUIレイヤに送る
  • 右側のグラフ領域に表示する項目( グラフタイトル、(X,Y) 座標の一覧、線の色 など )をUIレイヤから受け取る

というようなことをユーザーレイヤで行います。

Webアプリだと、Webブラウザがやる内容です。本アーキテクチャは、WebブラウザとWebアプリのアーキテクチャを合体させたようなものになります。

インストラクチャレイヤからユーザーレイヤの参照は?

インストラクチャレイヤからユーザーレイヤの矢印はつけてもいいのか?

例えば、ユーザーレイヤでリポジトリ経由でファイルシステム( データベース ) にアクセスすることはあるのか?

はい、アクセスすることはあります。ダイアログボックスでファイルを読み込むときは、リポジトリ経由でアクセスします。

この場合は、ユーザーレイヤにリポジトリのインタフェースを定義して、インストラクチャレイヤがインタフェースの実装をするということをしなければいけないように感じます。

しかし、それだと、ドメインレイヤのリポジトリのインタフェースとごっちゃになります

Webアプリケーションにおいても、WebアプリがWebブラウザのインタフェースを実装することは考えられません

なので、

  • ユーザーレイヤとインストラクチャレイヤは切り離す
  • 既存のインストラクチャレイヤとは別に、ユーザーレイヤ用のインストラクチャレイヤを実装する

のがよいかと思います。

まとめ

デスクトップアプリでドメイン駆動設計(  domain-driven design, DDD ) を実装するときのアーキテクチャについて書きました。

デスクトップアプリで実装するときは、ユーザーレイヤなるものを追加します

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次