【MEAN+TypeScript+DDDシリーズ】 はじめに
MEANスタック+TypeScriptでDDD開発シリーズ mrdshinse.hatenablog.com
サービス設計について
今回は、家計簿の管理を簡易化するアプリケーションを作ることにします。
想定ユーザーは共同生活をしている2人組とし、同棲やルームシェアで共通の財布を作っている人達が、お金の管理でモメない事を目的とします。
入力インターフェースは普段使っているコミュニケーションツールのLINEを利用し、LINE Botに話しかける事で誰が何にいくら使ったかを記録し、Botがお金を払いすぎている人を教えてくれる事を要件とします。
先月いくら使ったか?などサマリーを見る事でお金の使いすぎなど予算計画を立てられるよう、Webブラウザから毎月のサマリーなどをグラフィカルに確認できる事も要件としましょう。
上記を機能に落とし込むと、以下のような感じでしょうか。
機能一覧
- LINEチャットBot
- 支払いイベント登録
- 現在の支払い状態確認
- Webアプリケーション
- 支払いイベントモニタリング画面
- 支払いサマリー画面
DB設計について
データはどのように保持しましょうか?
複数人で開発をする場合、コミュニケーションを取る上でDBスキーマの認識を合わせておいた方が安心して開発を進められます。
ざっくりと上記要件を落とし込むと、以下のような形になるでしょうか。
//支払いイベント const paymentEvent = { who: { userId: 'abc123', userName: 'ビョーン・イエロッテ(Björn)' }, when: '2017-03-01 12151200', amount: 3250, purpose: 'ランチ代', meta: { createdBy: 'chatbot', createdAt: '2017-03-01 12151200' } }; //支払い状態 const paidStatus = { when: '2017-03-02 23454000', units: [{ who: { userId: 'abc123', userName: 'ビョーン・イエロッテ(Björn)' }, balance: 1625 },{ who: { userId: 'xyz789', userName: 'イェスパー・ストロムブラード(Jesper)' }, balance: -1625 }], meta: { createdBy: 'chatbot', createdAt: '2017-03-02 23454000' } } //支払いサマリー const paymentSummery = { period: { from: '2017-02-01 00000000', to: '2017-03-31 23595999', }, type: 'total', units: [{ who: { userId: 'abc123', userName: 'ビョーン・イエロッテ(Björn)' }, amount: 3250 }], meta: { createdBy: 'webapp', createdAt: '2017-03-01 12151200' } }
今回はここまで。
DDD(ドメイン駆動設計)を勉強する際は、以下の2冊がオススメです。
実践編
理論編