Java

【Javaサンプル】自動販売機(Level3) クラス分け

投稿日:2019年12月19日 更新日:

自動販売機(Level2)では、小さいメソッドに処理を切り出すことを学びました。
しかし、まだMainクラス1つの中で完結しているプログラムです。
オブジェクト指向言語であるJavaを使うなら、クラス分けしたいところです。

Level3ではクラス分けして作成しました。
作成したのは、以下の4つです。

Items(商品)
Deposit(入金額)
VendingMachine(自動販売機)
Main(メインロジック)

 

どうやって書いたか?

どういうクラスが必要かを判断

・商品はクラスとして必要とすぐ判断できた。
・値オブジェクトとして、Depositクラスは必要と判断。
・自動販売機クラスは必要で、フィールドはItemsとDepositになる。 

段階的にリファクタリング

・クラスを作成し、メソッドを移動
・Main側の処理をクラスに置き換え
・移動させたメソッドを使って動くかテスト
 これの繰り返し。

 

Items(商品)

商品に関わる変数、処理(メソッド化できる箇所)をまとめます。

 

Deposit(入金額)

入金されたお金に関する変数、処理をまとめます。

 

VendingMachine(自動販売機)

ItemクラスとDepositクラスを変数に持たせ、処理をまとめます。

 

Main(メインロジック)

各クラスの機能でメインロジックを組み上げます。

 

クラス分けの価値

多くのプログラムは、Getter/Setterによるデータ構造的な仕組みでできています。
しかしこれは仕様の理解の難しさと、バグの温床になっています。

クラス分けする本当の価値は、仕様の明確化と機能の部品化です。
そうすることで、バグが少ないシステム、修正が容易なシステムが作られるのです。

私自身、もっと成長したいものです。

 

Level4

Level4ではさらに一歩進んで、ドメイン駆動的な記述に修正します。
ドメインとは「業務領域」のことです。

つまり、実際にシステムが使う人が使っている言葉や業務内容で
プログラムを表現する
というアプローチなのです。

今後、仕様の理解や保守性の高さからコーディングスキルとして
ドメイン駆動は高く評価されていくと私は考えています。

【Javaサンプル】自動販売機(Level4) ドメイン駆動

-Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【Java】MySQLから取得した日付をフォーマット変換して表示する方法

MySQLからSELECTしてきた日付データ(DateTime型)を、 「yyyy年MM月dd日 hh時mm分ss秒」のフォーマットで表示する方法です。 目次 コード説明Date型変数への格納なぜDa …

Springメモ(あれ、どうすんだっけ?)

目次 @Autowiredアノテーションをつけることができる箇所(3つ)messages.propertiesを使えるようにするAOPのexecutionth:field と th:value の違い …

【JdbcTemplate】Queryの書き方(SELECT文)

JdbcTemplateでQueryを書く方法です! (SELECT文で、1件・複数件を取得するケース)   目次 前提usersテーブルUserクラスデータの取得Mapで取得する方法1件の …

【Javaサンプル】自動販売機(Level4) ドメイン駆動

目次 前回(Level3)処理フロー動作イメージソースコードなぜドメイン駆動か?仕様の明確化保守性の向上仕様の齟齬を解消するユーザ満足度の向上 前回(Level3) Level3ではクラス分けすること …

【JdbcTemplate】Queryの書き方(更新系)

  目次 前提usersテーブルUserクラス準備INSERTUPDATEDELETEまとめ 前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます …

SpringFramworkの良書

Javaの基本を学んだ人が、次のステップ(Frameworkでの実装)として読む本。

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。