こう 聞かれます
- 「画面、
処理、 データの 出し入れを 分けるのは なぜですか」 - 「1 つの
関数に、 受け取り、 計算、 データベースへの 保存、 メールの 送信が 全部入っています。 どう 整理しますか」 - 「層を
分けると、 ファイルが 増えて 面倒ではないですか」 (裏から聞く形)
面接官が 見ている点
- 「きれいだから」ではなく、
変更や テストで 何が うれしいかを言えるか - どの
層が どの 層を 呼ぶか、という 向きを 意識しているか - 小さな
アプリでは 分けすぎない、という 釣り合いを 持っているか
短い答え
- 変わる
理由が 違うので、 画面の 見た 目を 変えても 計算や 保存に 響かないよう、 置き場を 分けます。 - 計算の
決まりを 画面や データベースから 切り離すと、 その 部分だけを 速く 単体で 試せます。 - 画面が
処理を 呼び、 処理が データの 出し入れを 呼ぶ、という 一方の 向きに そろえ、 逆向きには 呼ばせません。
少し 詳しい答え
3 つの 層に 分けた小さな例
データの
JavaScript
// データの出し入れ
const repo = {
find(id) {
return { id, price: 500 };
},
};
// 処理
function withTax(yen) {
return Math.floor(yen * 1.1);
}
// 画面
function render(item) {
const { id, price } = item;
const yen = withTax(price);
return `商品 ${id} は ${yen} 円`;
}
const item = repo.find(7);
console.log(render(item));
console.log(withTax(100));商品 7 は 550 円
110最後の
何が うれしいか
- 影響が小さい
表示の 文を 変えても、 計算と 保存の コードは 触りません。 保存先を 別の データベースに 替えても、 画面は 変わりません - 試しやすい
処理の 層は、 データベースや 画面が 無くても 動くので、 単体テストで 端の 値まで 速く 確かめられます - 探しやすい
不具合が 出た とき、 見た 目の 問題か、 計算か、 保存かで、 見る 場所が 決まります
呼ぶ向き
画面は
小さな
作った
よく ある間違い
- 「分けるときれいだから」とだけ答える
変更の 影響が 狭まる、 試しやすくなる、のように、 何が うれしいかで答えます - 下の
層が 上の層を呼ぶデータの 出し入れから 画面を 直接書き換えると、 向きが 混ざって、 どこを 直せば よいか 分から なくなります - 小さな
アプリでも 最初から 細かく分ける 手間が 増えるだけの こともあります。 分ける 理由が 出てきた 所から分けます
深掘りの問い
- 「処理の
層を データベース無しで 試すには」データの 出し入れを 外から 渡せる 形にし、 試すときは 決まった 値を 返す偽物に 差し替える、と答えます - 「データベースの
更新と メールの 送信で、 片方だけ 失敗したら、 どの 層で 決めますか」 処理の 層で、 どちらを 先にし、 失敗したら どう 戻すかを 決める、と答えます - 「この
分け方に 名前は ありますか」 責務の 分離と 呼ばれ、 層に 分ける 作りや、 画面と データを 分ける 作りとして 広く 使われている、と答えます