DMMF本を読んで、OOPの特徴の一つ「継承」は現実のドメインを反映したものではなく、プログラミング都合の話であるという記述があった
確かにとは思ったものの、具体的にどのあたりがダメなのかは言語化できていなかった
むしろ継承を使って整理しましょうと習ってきたので、納得材料が見出せなかった
そんな時、以下の継承がなんでダメなのかを独自にまとめられた記事を読んだ
見出しを上げると
- コードが読みにくくなる
- すぐ神クラスになる
- 変な継承をする人がいる
要するに、適切に継承を使っていれば問題ないが、継承を正しく使うのが難しいということみたい
それは同意で、継承を正しく使うにはドメインの理解が必要だと思うが、ドメイン理解をせずコードを書くと問題が発生してしまうのだと思う
記事の最後に『 Effective Java(第3版)の4章項目18で「継承よりコンポジションを選ぶ」とある』コメントしている方がいて、その方が以下のように要約されていたのが参考になった
・ is-a の関係にあるときだけ継承を用いるべき
・ そうでないとき、継承を用いるべきでない。(=コンポジションを使うべき)
・ 継承はカプセル化を破るから(サブクラスがスーパークラスの実装の詳細に依存してしまう)
・ スーパークラスにあとからメソッドを追加できてしまう
Effective Javaにそんなことが書かれていたのは完全に忘れていたので、もう一度読んでみようと思う