skillup

技術ブログ

プログラミング全般

オブジェクト指向 クラスの設計と業務ロジックの整理

投稿日:

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。

本日は主にクラスの作り方について。

クラス設計と業務ロジック

要点

  • データを入れるだけのクラスを書かない
  • データとメソッドを一か所にまとめる
  • 関連するロジックを3層(アプリケーション層、データ層、プレゼンテーション層)で使うとそれぞれの構造に依存したメソッドができてしまう
  • 上記問題点を解決するため3層の関心ごとと業務ロジックを分離する
  • 下手に汎用ライブラリ(Util系)にメソッドを集めすぎない
  • コントローラー側は基本メソッドを呼び出すだけ、データは受け取るだけ
  • 必ずインスタンス変数を使って処理を行う(オブジェクト指向の原則はまとめる、隠す、たくさんつくる)
  • 関連するデータとメソッドを一か所に「閉じ込める」意識を持つ
  • クラスが肥大化したら分ける→ロジックとメソッドが完全に密接するようにする(凝縮度を高くする)
  • なるべく小さい単位に分ける注文クラスとかはだめドメイン単位で分ける
  • 大きいクラスのまとまりをパッケージとして管理する。例えば注文(Order)などとという業務単位は大きすぎるため、通常はパッケージとして管理し、関連する関心ごとをクラスとして設計する。
  • 3層アーキテクチヤでクラスの設計+業務の関心事(ドメインモデル)でクラスを設計する

感想

これまでの自分のやり方なんですが、MVCモデルによって作られたフレームワークで仕事を進めることが多かったのでこれを踏襲する形で仕事はしていました。

ただクラスという概念を有効活用できていませんでしたね・・本書ではただデータを入れるだけのクラスをデータクラスと呼びこの活用法を批判していますが、データだけを格納したクラスを使うとロジックがあちらこちらに分離して変更コストが馬鹿になりません。

私の場合、モデルにあたる部分の担当が多すぎて、基本DBからデータとってコントローラでひたすらハッシュでぐるぐる回して画面に吐くという処理を繰り返していました・・これだとテストもコントローラに依存するのでやりにくいですしね・・・

この本でいわれているように同じようなロジックがあちこちらに散在しているというような問題点が頻発していました。対応策としてはやはり業務ロジックをMVCに従ってかかないということですね。このために必要な考え方がドメイン駆動設計なのだと思います。

-プログラミング全般
-

執筆者:


comment

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

関連記事

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

オブジェクト指向 値オブジェクトの活用と場合分けに関して

オブジェクト指向 その1 オブジェクト指向 その2 オブジェクト指向 その3 でオブジェクト指向に触れたんですが、基本から勉強しなおす必要があると思い、まとめ&追記 参考文献 現場で役に立つシステム設 …

no image

Eclipseのシンタックスハイライト

先日PCがクラッシュした時にEclipseを入れなおしたんですが、普段あまり意識せずに使っていたのでhtmlのシンタックスハイライトをだすためだけに2時間ぐらい費やしました・・・自戒の意味も込めてメモ …

no image

webの仕組み その2 リクエストとレスポンス

クライアント(ブラウザ)はサーバーとの接続を確立した後、各種リクエストを送信します。サーバーはそれにこたえテキストや画像などのリソースをクライアントに転送します(これがレスポンスです。) Firefo …

no image

命名規則について

リーダブルコードシリーズ第2段、名称について。 コードにおいては名称がとても大切で、正しい命名づけなどはなかなか難しいです。 以下に大事で重要だと思ったポイントを。 Contents1 具体的でわかり …