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


関連記事

SpringでNotNullなどのバリデーションが効かないときの対処法

状況 フィールドに入っている値は空文字なのに、 @NotNull, @NotEmpty, @NotBlankでエラーとして検知されない。 (BindingResultでhasErroe=0件となる) …

【SpringBoot入門】#1~ 開発環境を準備しよう(IDE)

想定読者 SpringBootを始めて学ぶ方   IDE(Eclipse) IDEにはEclipse以外にもNetBeansやIntelliJがあります。 好みによりますので使いやすいものを …

junit, テスト

JUnit5の環境構築

概要 JUnit5を使う環境を構築します。 IDE:IntelliJ IDEA ビルドツール:Gradle 環境構築 IntelliJのダウンロード こちらからCommunity版をダウンロードします …

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

MySQLからSELECTしてきた日付データ(DateTime型)を、 「yyyy年MM月dd日 hh時mm分ss秒」のフォーマットで表示する方法です。 コード [crayon-62866b8f5b8 …

【SpringSecurity】#2~ ユーザ毎の権限設定(認可)

概要 権限によって、アクセス可能なページを制限する機能の実装します。 管理者画面を作成し、権限によって画面の出し分けを行います。 前提 #1~ ログイン画面の実装が完了していること。 管理者画面の追加 …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

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