.NETでより良い開発を目指すために!.NETのエンタープライズアプリケーションアーキテクチャ読了

    今回読んだのはこの本です。その名も、.NETのエンタープライズアプリケーションアーキテクチャです。

    難易度は高いが、数少ない.NETアプリケーションのアーキテクチャーに関する本

    C#.NETでの効率が良い開発方法、ソフトウェア設計というものに長年悩んでいました。そんなときヒントにならないかなと思っていたときに知った本です。その名の通り、.NETで業務アプリケーションを開発する際のソフトウェアアーキテクチャについて書かれた書籍です。

    対象読者はソフトウェアアーキテクトやソフトウェアアーキテクトを目指す人が中心ですが、開発者にとっても役立つと前書きに書かれています。読んでみた感想としては、やはり開発者よりもソフトウェアアーキテクトの方がいいかなと。主な想定読者がソフトウェアアーキテクトなので、難易度が高いです。

    前半はどうすべきかというお話が中心、後半でサンプルコードを見せながら解説しています。

    紹介されているアーキテクチャーは大きく分けて3つ

    本書では大きく分けて3つのアーキテクチャーが紹介されています。ドメイン駆動開発、CQRS、イベントソーシングの3つです。

    ドメイン駆動開発

    今時、やはりドメイン駆動開発なんだなと思いました。また、よくある貧血ドメインモデル(プロパティのみでメソッドがないモデル)についても書かれています。しかし、ケースバイケースで貧血ドメインモデルが悪いとは言わないのですね。

    ドメインモデルの話については、ユビキタス言語すなわちビジネス用語とシステム用語の一致が何度も繰り返し語られます。ステークホルダーと共通の言語を使えることはコミュニケーションの効率化につながりますし、ビジネス用語でいうXXXはなんていうクラス/メソッドだっけ?なんてシステムを見たことはなくはないですし。

    本書を読んでレイヤーについても気付きがありました。以前は私は、「プレゼンテーション層 - アプリケーション層 - データアクセス層」と言う構成で開発していました。

    中小規模のシステムで導入が容易なレイヤー構成

    本書では「プレゼンテーション層 - アプリケーション層 - ドメイン層 - インフラストラクチャ層」という構成が紹介されています。

    ドメイン駆動開発でのレイヤー構成

    プレゼンテーション層は主に画面などです。アプリケーション層は必要なドメインモデルを組み合わせてビジネス目的を達成する機能を持つ層です。ドメイン層はビジネスの関心毎単位で属性と振る舞いを持つモデルを集めた層です。インフラストラクチャ層はシステム全体に渡る関心毎(例えばログ出力など)やデータベース接続関連の機能を受け持つ層です。

    この構成の方がスッキリするなぁと。今まで私がやっていたのは、アプリケーション層とドメイン層が重なっていて、なおかつドメイン層とインフラストラクチャ層が重なっていたものでした。今度からこういう構成にしようっと。

    CQRS(Command/Query Responsibility Segregation)

    CQRSはデータベース操作処理をコマンド(追加/更新/削除)とクエリ(検索)に分けるという設計方式です。

    人類は古代ローマから分割統治を行ってきましたという話が出てきます。コマンドとクエリを分割することのメリットは下記です。

    • ソフトウェアは更新処理の方が複雑
    • 複雑さを減らせる → コマンドとクエリぞれぞれの要件・制約が影響を及ぼし合うことで複雑さが増す(N x N)
    • スケーラビリティが向上する → コマンドに非同期書き込み、クエリにキャッシュなどそれぞれに適した対応を取りやすい。

    私はCQRSを実践しているシステムを見たことがないです。先進的なシステムでないと採用されていないのかな?サンプルコードを読んだり、実際にCQRSを取り入れて開発してみるのがよさそうですね。

    イベントソーシング

    イベントソーシングの解説を読んで思ったことは、「ぶっちゃけめんどくさい(-_-;)」です。

    しかし本書に書いてある通り、今まで業務用アプリケーション開発はデータ中心に設計が行われてきました。現実にはビジネスにはイベントが沢山あります。だからビジネスとシステムを一致させるならイベント中心に考えるというのは理にかなった考えだと思います。

    イベントソーシングではデータの更新(update)は行わず追加(insert)のみとなります。こうして履歴を追えるようにするというわけです。

    ただし、イベントの追跡が不要なアプリケーションでは導入しなくてよいとのことです。イベントの追跡が必要なアプリケーションで使う方法なのですね。例えば履歴やバージョン管理が必要なアプリケーションですね。

    終わりに

    読み終わって感じたことは、難しい...(^_^;)じゃなくて、今まで気づかなかった、知らなかったことが書いてあったということです。ブレイクスルーするといいますか、こういう本って自分で試行錯誤しているだけじゃ気付かない知識が載っていますよね。書籍の効果は自力より高いレベルの知識・方法が載っているところにあります。

    今後、.NETで開発する機会があれば、ドメイン駆動開発とCQRSは試してみたいものです。サンプルコードもついていることですしね。

    人気ブログランキング参加中

    ブログランキング・にほんブログ村へ
    関連記事

    PR

    コメント

    非公開コメント

    musiccycle

    ITとデザインは強力な武器だ!と考えているプレイングマネージャー派。モノづくりと経営学が好きで戦略、ブランディング、マーケティング、会計が好き。趣味はサイクリングと楽器。

    検索フォーム

    ブログランキング

    人気ブログランキング参加中
    ブログランキング・にほんブログ村へ

    QRコード

    QR

    PR