ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

似た機能をシステムに実装する場合に採用した方法

あるシステムに、表示項目違いの画面、入力項目違いの画面、出力項目違いのPDF出力など、少しだけ違う機能を追加しなければならなくなりました。
方法として考えられるのは、

  • ソースコードを完全に2重にして作成する。
  • 何らかの方法でどちらの機能を使いたいのか判定して、1つのソースコードで両方の機能に対応する。

のどちらかです。

ソースコードを完全に2重にすれば、わかりやすいのですが、両方に共通する修正が発生した場合、2重で修正しなければならなくなり、手間が発生します。
手間だけならまだしも、修正漏れが発生する可能性があります。
ソースコードを完全に2重にするのはデメリットが大きいと考え、1つのソースコードで両方の機能に対応すると判断しました。

Webブラウザ
unsplash-logoCarlos Muza

URLで切り分け

Webシステムのため、機能が違えばURLが異なるので、URLの違いでどちらの機能を利用したいのか判定を行うようにしました。
ソースコードにおいて共通で読み込むファイルに、URLを取得して判定する処理を追加し、どちらの機能を利用するのか設定を行う機能を追加しました。
どちらの機能を利用するのか設定を行うとともに、異なる表示にしたい画面名など固定の値の設定も追加しました。

関連するすべての箇所で、設定を利用するように修正するのは手間がかかりましたが、想定通り両方の機能に対応できました。


当初は各ソースコードでどちらの機能を利用するのかの判定をして、処理を作成しなければならないのかもと考えていましたが、そこまで行わなくても対応できました。
後から似た機能の追加は、できればしたくはありません。
別々のシステムに分けるか、当初から考慮してシステムを作成したいです。