- システム拡張には優しく、変更には厳しく
- 2018/04/19
- Category:
システム開発時のよくあるパターンとして、機能を追加しようとすると既存のコードの複数箇所に修正をしなければならない、ということはよくあります。
修正をすることで別の箇所でエラーが発生して……、という頭の痛い展開を防ぎたいものです。では、どのようにすれば良いでしょうか。
OCPのクラス設計方針とは
いきなり英語が出てきましたが、Open / Closed Princpleの略となります。
日本語にすると解放/閉鎖原則となります。そのままですが、よけいに意味がわからなくなったかもしれません。
意味するところは、記事タイトルのように、拡張に対して開いている(Open)
修正に対して閉じている(Closed)上記方針を守った、クラスの設計方針のことです。
仕様変更に対して、機能追加は簡単にできるように、かつ既存のコードを変更しないでいいようにすることを指します。
巨大なシステムであるほど、既存のコードに対する修正はリスクが高まり、機能追加時に修正が不要になることは大きなメリットがあります。OCPをどのように使うのか?
どのような方針で設計をすれば良いのでしょうか。
『アジャイルソフトウェア開発の奥義』の著者ロバート・C・マーチンがあげる例によれば、呼び出すクラスに依存させるのではなく、インタフェースや抽象クラスに依存させることを指針とすべきだ、というものです。
直接クラスを使用すると依存箇所ができてしまうため、インタフェースを実装したクラスを使用することで、インタフェースを実装したクラスであれば差し替え可能にすることで、変更を防ぐというものです。
差し替え可能にすることで柔軟性を保つという発想は、依存性の注入(Dependency Injection)とも重なります(ここでは割愛)。まとめ
複雑なシステムを構成するには、機能追加に柔軟な設計になっていることが必要となります。
『アジャイルソフトウェア開発の奥義』には他にも有用な考え方が多数掲載されており、筆者も勉強中となります。ところで、上記内容を解決するための根本的な発想はもう1つあります。
コードを書かないでいいようにすることです。
コードがなければバグもない、そんなの当たり前と考えるかもしれませんが、クライアントと相談するなどすれば意外とコードを書かないでも解決できてしまったりすることがあるのです。
OCPに沿ったコードそのものが本当に必要なのか、書かないでいい方法はないか、ここから問うようにしましょう。●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)
BLOG CATEGORY
- すべて
- COMPILE RECORD
- CPR STUDIO
- お知らせ
- COMPILE RECORDからのお知らせ
- CPR STUDIOからのお知らせ
- SOLUTION
- SOLUTIONからのお知らせ
- DESIGN
- DESIGNからのお知らせ
ARCHIVE
- 2021年6月
- 2020年4月
- 2019年11月
- 2019年10月
- 2019年9月
- 2019年8月
- 2019年6月
- 2019年5月
- 2019年4月
- 2019年2月
- 2019年1月
- 2018年12月
- 2018年11月
- 2018年10月
- 2018年9月
- 2018年8月
- 2018年7月
- 2018年6月
- 2018年5月
- 2018年4月
- 2018年3月
- 2018年2月
- 2018年1月
- 2017年12月
- 2017年11月
- 2017年10月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年4月
- 2017年3月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年11月
- 2016年10月
- 2016年9月
- 2016年8月
- 2016年7月
- 2016年6月
- 2016年5月
- 2016年4月
- 2016年3月
- 2016年2月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月