More Related Content
Similar to ドメイン駆動設計サンプルコードの徹底解説 (20)
ドメイン駆動設計サンプルコードの徹底解説
- 20. 3要素の具体例
計算結果:Goal
給与の一覧画面 2月 支払い額
計算の元データ: Fact
→勤務時間の一覧画面(勤務の履歴)
→従業員の一覧→布川光義→時給の履歴画面
計算ロジック(Rule)を記述したモジュール群を集約したクラス
domain.model.payroll.Payroll型
計算結果を表現するクラス
Payroll#totalPayment() : PaymentAmount型
2019/4/4 20©有限会社 システム設計
- 22. ドメイン層の設計の考え方とやり方
計算モデルが息づく場所
model パッケージ 計算モデルの表現
type パッケージ モデルを表現するための基本部品のライブラリ
型指向のプログラミング
→ wiki : github.com/masuda220/business-logic-patterns/wiki/設計ガイドライン
→ スライド : 「ドメイン駆動設計本格入門」
→ 書籍:「現場で役立つシステム設計の原則」
Plain Old Java
Bean Validation → 有効な値の表明 → 自己文書化の一部
可読性 over Javaの習慣的な記法 (finalやprivateの省略)
No getter, no setter, no Lombok, no JPA
2019/4/4 ©有限会社 システム設計 22
modelに置くか、typeに置くかは書いてみながら判断・調整
- 24. attendance.Attendance 勤怠
attendance.AttendanceStatus 勤怠状況
attendance.Recorded 勤務記録有無
attendance.TimeRecords 勤務実績一覧
attendance.TotalWorkTime 総勤務時間
attendance.WorkMonth 勤務月
contract.Contract 従業員契約
contract.Contracts 従業員契約一覧
contract.ContractStartingDate 契約開始日
contract.ContractStatus 契約状態
contract.ContractWage 契約給与
contract.ContractWages 契約給与一覧
contract.HourlyWage 時給
contract.MidnightHourlyExtraWage 深夜時給割増額
contract.OverTimeHourlyExtraWage 深夜時給割増額
contract.WageCondition 給与条件
employee.ContractingEmployees 契約中従業員一覧
employee.Employee 従業員
employee.EmployeeNumber 従業員番号
employee.MailAddress メールアドレス
employee.Name 氏名
employee.PhoneNumber 電話番号
legislation.DailyOvertimeWork 時間外労働
legislation.ExtraPayRate 割増率(%)
legislation.Midnight 深夜
legislation.MidnightExtraRate 深夜割増率
legislation.OverTimeExtraRate 時間外割増率
payroll.PaymentAmount 支払い金額
payroll.PaymentWorkTime 支払い対象時間
payroll.Payroll 給与
payroll.Payrolls 給与一覧
payroll.PayrollStatus 給与ステータス
timerecord.ActualWorkTime 勤務時間実績
timerecord.bindingtime.BindingTime 拘束時間
timerecord.bindingtime.DaytimeBindingTime 日中拘束時間
timerecord.bindingtime.MidnightBindingTime 深夜拘束時間
timerecord.breaktime.BreakTime 休憩時間合計
timerecord.breaktime.DaytimeBreakTime 日中休憩時間
timerecord.breaktime.MidnightBreakTime 休憩時間(深夜)
timerecord.DaytimeWorkTime 日中勤務時間
timerecord.EndTime 勤務終了時刻
timerecord.MidnightWorkTime 深夜勤務時間
timerecord.OverWorkTime 時間外勤務時間
timerecord.StartTime 勤務開始時刻
timerecord.TimeRange 勤務の開始と終了
timerecord.TimeRecord 勤務実績
timerecord.WorkDate 勤務日付
timerecord.WorkTime 勤務時間
amount.Amount 金額
amount.Percentage 率(割増や税などの金額に掛けられるもの)
amount.RoundingMode 端数処理
date.Date 日付
date.DayOfWeek 曜日
date.Month 月
date.Year 年
date.YearMonth 年月
time.ClockTime 時刻を時分単位で表す
time.ClockTimeRange 開始時刻と終了時刻を表現する(時刻間の時間間隔を返
time.Hour 時間(数)
time.HourAndMinute x時間y分
time.Minute 分(数)
time.QuarterHour 15分単位の時間
time.QuarterRoundClockTime 15分単位の時刻
time.QuarterRoundClockTimeRange 15分単位の時刻
給与計算に関するFact-Rule-Goalを表現したクラス群=ビジネスルール用語集
(ソースから自動生成)
2019/4/4 ©有限会社 システム設計 24
- 32. アプリケーションの組み立て
2019/4/4 ©有限会社 システム設計 32
複合serviceクラス @Service
複数の単機能サービスを組み合わせた
サービス
要素serviceをautowireする
例:
PayrollQueryCordinatorクラス
要素servicクラス @Service
単機能のサービス
repositoryをautowireする
例:
ContractQueryServiceクラス
AttendanceQueryServiceクラス
使う
- 39. 計算モデルのビュー
ドメインオブジェクトをそのまま表示 (naked object パターン指向)
Spring MVC
Direct Field Access → WebDataBinder#initDirectFieldAccess()
Thymeleaf
Semantic UI → Fomantic UI
PayrollControllerクラス
templates/payroll/list.html
2019/4/4 39©有限会社 システム設計