はじめに
WPFにおけるXAMLの記述方法、各コントロールの使用方法、リレーショナルデータベースへの接続方法。そういった個別の技術要素に関する解説記事は多くあります。しかしそれら個別要素を組み合わせ、アプリケーション全体としてどう構築するかといった、全体のアーキテクチャに踏み込んだ具体例は少ないように思います。
その最大の要因は、アプリケーション全体のアーキテクチャは、ビジネスやシステム化の背景から強く影響を受けるため、正解はシステムの数だけ存在するからでしょう。また、同一ビジネス・同一システムであっても「正解」は一つではないでしょう。
このため、アプリケーション全体のアーキテクチャを、一般論として語ることが難しいというのが根底にあるのではないかと私は考えています。
とはいえ、その全体のアーキテクチャの設計こそが困難で、そして最も価値のある領域であるとも言えます。
そこで本稿では、特定のビジネス・システム化の背景を想定して、そのシステムを構築する上での実践的なアーキテクチャの一例をご紹介したいと覆います。
先にも書いた通り、同一の問題領域であっても、それを解決するアーキテクチャ的解答は一つではありません。人によっては、ここに記載するアーキテクチャに受け入れがたい要素が含まれることもあるでしょう。その事は私も否定するものではありません。
しかし本稿が、アプリケーションを構築する上でのアーキテクチャについて、悩んでいる人への一つのヒントになればと思い、執筆にチャレンジすることとしました。
なお、ここでいうアーキテクチャとは、ソフトウェア開発における重大な決定事項のすべてを指します。
本稿の内容について
本稿では、Microsoft社の公開しているSQL Serverのサンプルデータベース「AdventureWorks」を参考に、WPFで業務アプリケーションを構築するためのアーキテクチャを解説します。
本稿で解説するのは特に、リレーショナルデータベースを利用するWPFアプリケーションを、どう分割設計し、どう結合するかを主体として記載します。このため、各種の機能やコンポーネントの詳細な利用方法については、本稿での説明は割愛させていただきます。詳細な説明について、適宜外部のサイトを紹介させていただきます。
本稿は大きく次の流れで記載します。
- ビジネスの背景
- システム化における背景
- システム化の対象範囲
- システム化実現のアーキテクチャ設計
本稿で解説するアーキテクチャのプロトタイプは、GitHubに以下のアドレスで公開しています。併せてご覧ください。
- nuitsjp/AdventureWorks(GitHub)
それではさっそく始めましょう!
前提条件
本稿は以下の環境を前提に記載しています。
- Visual Studio 2017 Version 15.6.4
- SQL Server 2017 Developer
- SPREAD for WPF 2.0J
- .NET Framework 4.7.1
想定読者
次の技術要素の基本をある程度理解していることを想定しています。
- C#
- WPF
- SQL Server
これらの基本的な解説は、本稿では割愛します。
ビジネスの背景
以下は、AdventureWorksサンプルデータベースのビジネスシナリオとして公開されている文章の抜粋です。
AdventureWorksサンプルデータベースは、Adventure Works Cyclesという架空の大規模多国籍製造企業をベースにしています。この企業は、北米、ヨーロッパ、およびアジアのマーケットを対象に、金属製自転車や複合材製自転車の製造および販売を行っています。従業員290人の米国ワシントン州ボセルの拠点に加え、自社のマーケット基盤全体にわたって複数の地域販売チームを配置しています。
(中略)
Adventure Works Cyclesでは、昨年度の成功を基にマーケットシェアの拡大をねらっています。そのために、ターゲット顧客の絞り込み、外部Webサイトによる製品販売ルートの拡大、および生産コストの削減による販売コストの削減に努めています。
こういった背景のもとAdventure Works Cycles社では、次のビジネス領域における基幹システムを刷新することと決定しました。
- 販売およびマーケティング
- 購買
- 製造シナリオ
その結果、設計されたのがAdventureWorksサンプルデータベースです。
システム化の背景
本稿で対象とするのはAdventureWorksシステムの、各種マスターや従業員情報を管理するための「マスター管理」サブシステム(以降、本システム)です。
本システムは、販売や購買・製造といったビジネス領域で用いる別サブシステムと異なり、米国ワシントン州ボセルの拠点で勤務する290名の社員のみが利用します。利用者は全員、Windows 10クライアントを利用します。Windows 10端末はActive Directory(AD)に接続されており、ADにて認証情報は管理されています。
また、本システムの利用者は限定的です。このことから、開発および保守・改修に高いコストをかけることは難しく、とくに基本的なアーキテクチャや、基盤となる技術選択は、5年後に想定しているシステムリプレースまでの間、変更なく利用したいと考えています。
本システムはマスター管理機能を提供しますが、従業員の役割によっては頻繁に利用することが想定されます。このためシステムの操作性が業務の生産性に直結するため、高いユーザビリティが求められます。特にマスターメンテナンス画面では、可能であれば一覧で表示した中で、使い慣れたExcelライクな使用感で編集できることが好ましいと考えています。もちろんExcelと違い編集される値は不整合のない正しい状態を求められます。
これらから、比較的安定的な技術で構築された、ユーザー操作性の高いシステムが必要とされています。
また本システムで扱うAdventureWorksデータベースには顧客情報を含むセンシティブなデータが格納されています。このため十分なセキュリティが確保されている必要があります。