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でバリデーションがimportされていないときの対処法

状況 SpringF/Wでバリデーションを実装したいが、@NotNullや@Minといったアノテーションが使えない。 @NotNullを使おうとすると、import com.sun.istack.No …

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

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 何を作ったか? テーマ:じゃんけん(1対1) 言語:Java OOPで考慮したこと ・ゲームを管理するコント …

elseを使わないことでパフォーマンスが下がる場合の対処法

  状況 前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は パフォーマンスが下がる。 …

ModelからBindingResultが消える原因と対処方法

環境 Java(SpringFramework) Thymeleaf 状況 更新画面でバリデーションエラーにより更新が失敗したというようなケースにおいて、 BuindingResultにFormのエラ …

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

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

記事を探す

SpringFramworkの良書

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

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