どしろうと製作所:WebLog

どしろうと製作所のBlogバージョンです。
「どしろうと製作所」のHPの記載内容とはあまり関係無いです。
気が向いたときのみ更新します。
ドメインモデルつくりを試してみる
前回、書籍「現場で役立つシステム設計の原則」を紹介してみましたが、実際にドメインモデルつくりを試してみた方が理解が進む…ということで、ドメインモデルつくりを試してみた結果を紹介してみます。

実際の手順などは人によって違うかもしれませんが、実施例の一つとして残しておきます。

■ドメインモデルお試しのターゲットと手順

ドメインモデルお試しのターゲットとして「Vanilla Air」さんのサイトをドメインモデルでリバースエンジニアリングしてみました。

「Vanilla Air」のサイト全体は大きいため、最も使用する部分である「航空券を予約する」の部分のみに関してモデリングを行ってみております。

ドメインモデルのつくり方としては、まず「概念モデル(分析モデル)」をつくり、そこから「ドメインモデル」として落とし込むという手順を行っております。


■概念モデルをつくってみる

イキナリですが、作成した概念モデルをざっくりと紹介してみます。
※この段階で整理はできてない部分も多いですが…
概念モデル

実際にやった内容、ポイントを箇条書きしておきます。
・堅い部分は凝集度が高くなる
 ⇒そのため、航空便、空港、空港コードのような部分から優先しました。
・ビジネス上で認識すべき概念は明確にすべき
 ⇒空港コードは空港の属性のように思われますが、業務での空港特定や実入力に使われる重要な要素ですので、あえてクラスとして明示すると「重要性」が明らかになる。
・整理方法に困った場合には、一旦オブジェクト図を書くとよい
 ⇒左側に便名、発着の空港コード、発着時間との関連をオブジェクト図で示しています。
・関連クラスとして
 ⇒「プラン」と「飛行予定」で価格が決まるという場合には、関連クラスで示した方が意味が増えている。

概念モデルは主にビジネスよりの重要な要素を整理する際に使うとよいということです。
概念モデル作成後にドメインモデルで実装可能となる整理を行います。


■ドメインモデルをつくってみる

今度はドメインモデルをつくってみた結果となります。
ドメインモデル

ドメインモデルにすることで、概念モデルでは「絵としてつながるがSWに落とし込めない」といった部分が明らかとなります。

こちらもポイントを箇条書きしておきます。
・最初はクラス図と属性名だけ入れたもので整理した
・多重度に関しては「2以上」の場合にはリストとなるので、「出発空港」「到着空港」という意味がある場合には2本の関連線を引いて、関連端名でその意味を明確にすると分かりやすい
・悩むような部分は実装しながら調整するとよい


■実装しながら確認してみる(複数名の実装による意見)

実装を行うことでモデルの効果を体感するとともに、モデルが良いかどうか、ロジックを何処に配置するかを考えることもできます。そのため、モデルをつくった複数名で実際に簡単な実装を行ってみました。

例えば、「価格」クラスに変更が発生しやすいだろうと意識していましたが、価格を計算するロジックの配置が複数名で異なりました。

価格計算ロジックの例として、仮に次のようなものを考えてみております。
・フライトスケジュールが16時以降なら1000円価格増
・残り座席数が10席以下なら2000円価格増

実際の実装したロジックの配置方法と変更などに対する影響の違いは次のような感じです。

1.「価格」の計算ロジックを価格にまとめた場合
「価格」の変更が発生した場合には、まず「価格」クラスを見るはずなので、そこから追いかけられる。ただ、価格を決める条件を取り出すために、関連クラスをあわせて修正する必要が発生します。

2.「価格」の計算ロジックを「座席」や「フライトスケジュール」なりの条件を持つ側に書く場合
例えば、「残り座席数」の条件が増えたような場合(残り5席でさらに価格増など)に「座席」クラスのみの修正で条件と計算式をまとめて修正ができます。

他にも、「プラン」クラスに価格計算ロジックを配置する実装案も出ておりました。
この辺はお試し段階では良さを判断する基準が不明確でしたので、実際の変更、さらなる機能追加の場合のやりやすさで決めるべきかもしれません。


以上、少しだけドメインモデルを考えてみた結果でした。
| 技術 | 12:53 | comments(0) | - |









     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ CATEGORIES
+ ARCHIVES
+ LINKS
+ PROFILE
+ OTHERS
このページの先頭へ