プログラムの責務を分けると何が嬉しいのか? (例: バックエンド VS フロントエンド)
責務を分けると嬉しいこと
- 実装がシンプルになる。開発者に求められる知識量が減る。
- 変更に強くなる。
- 汎用性が高まる。
責務を分けないと何が起こるか
- 実装が複雑化する。開発者に求められる知識量が増える。
- 変更に弱くなる。
- 汎用性が低まる。
責務を分けないデメリット: 変更に弱い
たとえばあなたがバックエンドのAPIを作る場合、フロントエンドの仕様詳細まで気にかけたいだろうか。
たとえば「縦800pxの領域に成績グラフを描画するので、成績の1ポイントを8pxとして扱い、その値を返す」「成績が10なら80pxという値を返し、成績が20なら160pxを返す」というような実装をしたいだろうか。
もしそのような実装をしてしまった場合、フロントで領域の縦幅が1600pxになった場合はどうなるのだろうか。
正しい描画が出来なくなる。もしくはフロントの変更にあわせてバックエンドの変更まで必要になる。
外部への依存度が高い実装は変更に弱い。
責務を分けないデメリット: 開発者に求められる知識が増える
知識の種類、あるいは認知コストが求められる。
ひとたび依存度の高い実装をしてしまえば、プログラムを修正するにしても変更箇所が複数の実装にまたがる。
この場合で言えばフロントエンドとバックエンド両方の知識が必要になる。
これは開発者に優しくない。
変更に耐える仕様
そもそもバックエンドAPIでは「成績が10ptの時は10を返す」「成績が20ptの時は20を返す」というように「外部の知識を持たない設計」にしておくとどうだろうか。
フロントエンドではその成績のポイントに応じて適切なpxを算出してグラフを描画すれば良い。
この仕様であればフロントの描画方法が将来的にどう変わったとしても恐らく、バックエンドAPIには変更の必要がなくなる。
ここでは話を単純化しているので、当然の実装だと思われるだろうが。
「変えなくても良いこと」は価値である。
変える必要がなければ、そもそも変更のコストはかからず、新しいバグが生まれる可能性もない。
責務を分けると汎用性が生まれる
たとえばひとつのバックエンドAPI(のエンドポイントで返されるレスポンス)を利用して、複数のインターフェイスが実装できる。
- フロントエンドのページAではグラフを描画する
- フロントエンドのページBではテーブルに値を表示する
- モバイルアプリでは縦長のグラフを描画する
逆にバックエンドAPIがフロント実装に依存している場合は、インターフェイス単位でバックエンドの実装・変更が必要になる。
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
Discussion