🎃

『現場で役立つシステム設計の原則』の感想

2023/03/10に公開

https://gihyo.jp/book/2017/978-4-7741-9087-7

感想

オブジェクト指向を学ぼうとすると大抵、「哺乳類クラスを継承した犬クラスと猫クラスを作りましょう」のような例が出される(乗り物と自動車・自転車など、他にも色々見た)[1]
当時自分は、こういった例を出されても、「これを業務で考えると哺乳類が何に当たるんだ?」といった具合に、まったく理解できなかった。
そうして途方に暮れて頃、『現場で役立つ』が名著との噂を聞き、ちょうどJavaを学んでいたこともあって読み始めた。
『現場で役立つ』は、オブジェクトという概念について、実際に業務で使うようなコード(例えば、料金の設定)を用いて、具体的に説明してくれるので、とても分かりやすく、感動ものだった[2]
オブジェクト指向で詰まっている方におすすめできる一冊だった。

業務で活かすことを目指して

本書でオブジェクト指向がある程度理解できたことには感動したが、業務には全く活かせなかった。
なぜなら、業務で触っているコードは『現場で役立つ』で言うところのアンチパターン、トランザクションスクリプト方式でずっと書かれていたから[3]
それでも、歯噛みして手続き的に書くのは『現場で役立つ』を読んだ意味がない気がするので、なんとかトランザクションスクリプト方式が修正不可能な今の現場でも活かせる部分を探りたい。

防御的プログラミングと契約プログラミング

「防御的プログラミング」は入力や引数を信用せず、受け取り手がチェックする手法。トランザクションスクリプト方式では必然的にこちらになる。
「契約プログラミング」は、定義した型を渡すことでチェックとする手法。オブジェクト指向ではこのような方法が可能になる。
この契約プログラミングという考え方は、トランザクションスクリプト方式でも考え方としてある程度取り込めるのではないかと考えた(DBのNotNull制約など)。

最後に

業務で弄るコードがトランザクションスクリプト方式だと読む意味がないのかといえば、そんなことはない。
むしろ、対比させることで、よりその威力が身にしみて感じられる、そんな一冊だった。

脚注
  1. p290で著者も同じことを述べていた。 ↩︎

  2. 思えば、何故数多のサイトは「オブジェクト指向」という概念を説明するのに、「実務での例」を示さないのだろう。犬猫哺乳類で示してしまうと、それは「実務での例」という具体から「オブジェクト指向の概念」という抽象を経て、「哺乳類で例える」という具体に至る段階があり、実際に知りたい「実務での例」から見れば2段階も離れた位置にある。犬猫のたとえで納得してすぐ実務に転用できる方、相当切れ者では? ↩︎

  3. 触れられる範囲では、型を生やすことすら難しい…。 ↩︎

Discussion