コピペは共通化のサイン
同じような処理が複数箇所に現れると、ソースコードのコピペをしたくなります。まさにこのタイミングが、DRY原則を活用する最大のポイントです。
定数の共通化
コピペをするということは、同様のコードを複数箇所に書くということです。つまり、Repeatしていることになるので、DRY原則に反することになります。
例えば下記のコードを見てみましょう。
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'camp';
$charset = 'utf8mb4';
$dsn = 'mysql:dbname=' . $dbname . ';host=' . $host . ';charset=' . $charset;
何の変哲も無い、DB接続用の各種設定値です。
これらの設定値、何気なく各ファイルにコピペしていると
- ユーザー名が変更になった
- 文字コードをutf8からutf8mb4に変更したい
- DBサーバがlocalhostから別サーバに変更になった
といったことが起こった場合に全てのファイルで変更を行う必要が出てきます。それにより
- 作業量の増加
- 修正漏れの可能性
といったデメリットが発生します。これらは、DRY原則に反してコピペしたことが問題です。
const.php
define('DB_HOST', 'localhost')
define('DB_USER', 'root');
define('DB_PASSWD', 'password');
define('DB_NAME', 'camp');
define('DB_CHARSET', 'utf8mb4');
define('DSN', 'mysql:dbname='.DB_NAME.';host=' . DB_HOST . ';charset=' . DB_CHARSET);
のように定数化して別ファイルに切り分け、require_onceで読み込むことで、設定値を共通化し、DRY原則を守ることができます。
共通化のコツ
- 定数は別ファイルに切り分ける
- 同じ式が複数回書かれていたら、変数に代入して再利用する
- 同じ処理内容が複数回登場していたら、関数化する
これらを意識するだけで、コピペを劇的に減らすことができます。
コピペせずに済ませるのが現時点では難しい箇所もありますが、そういった箇所を「いかにコピペせずに共通化して済ませるか?」を考えていくことで関数の使いこなしが上手くなり、オブジェクト指向にも繋がってきます。
まずはできる限りコピペを減らせるよう、常に意識することから始めてみましょう。