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】文字列の完全一致と部分一致を判定する方法

Javaで文字列の完全一致と部分一致を判定してBooleanを受け取る方法です。 一致させる条件は、文字列固定の場合と正規表現の場合を掲載しています。 目次 コード説明 コード [crayon-5e8 …

【Spring】バリデーション時に、入力値を保持する方法

登録画面で「登録」ボタンを押した後、 バリデーションで引っ掛かってエラーになっても 入力内容を画面に保持して置く方法についてです。 テンプレートエンジンは、Tymeleafを使用しています。 方法とし …

Eclipseでタブを半角スペースに変換する便利プラグイン!

Eclipseでタブを半角スペースに変換する便利プラグインに、 AnyEdit Toolsというものがあります。 導入方法を以下に記載致しましたので参考にして下さい。   目次 どういうもの …

【Spring】JSの変更を反映させる方法

Spring Bootのおいて、JavaScriptの変更を反映させる方法です。   目次 設定application.properties特定のフォルダに適用したい場合公式ドキュメント 設 …

オブジェクト指向でじゃんけんを作ってみる

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 目次 何を作ったか?OOPで考慮したこと設計上の条件動作例ソースコード 何を作ったか? テーマ:じゃんけん( …

SpringFramworkの良書

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

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