49
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【読書備忘】現場で役立つシステム設計の原則① 第1章:小さくまとめてわかりやすくする

Last updated at Posted at 2019-05-05

連載目次

第1章:小さくまとめてわかりやすくする →本記事
第2章:場合分けのロジックを整理する
第3章:業務ロジックをわかりやすく整理する(公開予定)

はじめに

この記事は、増田亨さんの著書「現場で役立つシステム設計の原則」の、主に私自身へ向けた読書備忘録です。(追ってサンプルコードも追加予定)

とても素晴らしい本だと思うので、興味を持たれた方はぜひ読んでみてください。
リンクは記事の最後にあります。

本章の概要

第1章:小さくまとめてわかりやすくする

変更が楽で安全なプログラムを書くための第一歩として、
ソースコードの整理整頓の基本を学びます。

覚えておきたいキーワード

今後、理解を深めたいと感じたキーワードのメモです。
ドメイン駆動設計については初心者なので、基本的なものが多いかもしれません。

破壊的代入

1つの変数を使いまわして代入を繰り返すこと。再代入。
破壊的代入はプログラム変更の副作用を起こしやすいため、極力避けた方がコードが安定します。

値オブジェクト(Value Object)

値を扱うための専用クラスを作るやり方。
金額、数量、年月、電話番号など業務上の名前や用語をそのままに、小さなクラスを定義して、長さや形式などのルールは、値オブジェクト内に明示的に定義します。

こうする事で、正しい値を扱うことが保証されます。
単純に String や int 型の変数を定義するだけでは、業務の関心事にそぐわない異常な値も設定できてしまうため。

完全コンストラクタ

オブジェクトの生成時に、オブジェクトの状態が完全に決定され、それ以降は不変とする設計パターン。
setter メソッドは作らず、別の値が必要になったら、別のオブジェクトを作成します。
値オブジェクトとセットで覚えておきたいキーワードです。

本章の個人的共感ポイント

本章のなかで特に共感したポイントのメモです。
開発現場で取り組んでみたい度合いを「★」の数で表現してみました。

わかりやすい名前を使う

名前のわかりやすさは、プログラムの読みやすさ/読みにくさに直結します。名前があいまいだったり、名前と内容が一致していないプログラムは読むのに苦労します。(p17)

取り組みたい度:★★★★★
クラス名やメソッド名は下手なものを使えないけれど、変数名(特にローカル変数)は、実装者の個性が現れやすいように感じます。
本文の例にあるような1文字の変数名(int a;)はさすがに見たことがありませんが、ロジック全体を読まないと、変数の内容が読み取れないような名前は時々見かけます。
特に「業務で使っている言葉をそのまま」使うべき、という点には非常に共感。日本語の業務用語を無理に英語に訳して、意味が分かりづらくなった経験が何度もあります。

メソッドは短く、クラスは小さく

変更に苦しむのは、いつでも長いメソッドと大きなクラスです。(中略)コードを「短いメソッド」と「小さなクラス」に小分けして整理するのが、変更を楽で安全にする設計の基本です。(p27)

取り組みたい度:★★★★★
本章の冒頭にある「クラスは最初から大きかったわけではありません」という言葉が、特に印象的でした。ほんの少しの修正や機能追加が積み重なって、メソッドの数が増え、気がつけば巨大なクラスに...という経験は誰でもあるのではないでしょうか。
設計は初期段階で終わるものではなく、常に改善を重ねていくべき(メソッドの抽出やクラスの分割も積極的に行なう)というのは、個人的には大きな気づきでした。
小さいところから始めないと難しいかな、という思いから★4つ。

「値」を扱うための専用のクラスを作る

値の種類ごとに専用の型を用意するとコードが安定し、コードの意図が明確になります。(p32)

取り組みたい度:★★★★★
ドメイン駆動設計における「値オブジェクト(Value Object)」という実装パターンについての説明。自分でデータの種類ごとに専用の型を作ってしまう、という発想が全くなかったので、目からウロコな内容でした。
また、値オブジェクトは不変(とするもの)なので、ロジックの途中で思わず値が変更されてしまう、という不具合が起こらない点も特徴なのだそう。

値オブジェクトについて分かりやすくまとめている方がいたので、合わせて読んでおきたいです。
DDD基礎解説:Entity、ValueObjectってなんなんだ

参考文献

現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法
第1章:小さくまとめてわかりやすくする(p13〜p46)

49
61
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?