테스트 및 유지 관리 용이성을 개선하기 위해 비즈니스 로직에서 프레임워크를 성공적으로 분리하는 방법

테스트 및 유지 관리 용이성을 개선하기 위해 비즈니스 로직에서 프레임워크를 성공적으로 분리하는 방법

2022-10-03 last update

4 minutes reading
안녕하세요 여러분, 안녕하십니까?

God Objects에 대해 들어본 적이 있습니까? 절대? 이미? 그러나 이것이 도대체 무엇인지 설명하겠습니다.

In object-oriented programming, a God Object (sometimes also called an Omniscient or All-knowing object) is an object that references a large number of distinct types, has too many unrelated or uncategorized methods, or some combination of both. The God object is an example of an anti-pattern and a code smell. definition from wikipedia



볼드체로 된 문장을 주목하라. 이것이 하나님의 주된 문제이고, 그것을 반(反)패턴/원칙으로 만드는 문제이기도 하다. 특히 단일책임의 원칙에 어긋나기 때문이다. 예를 살펴보겠습니다.

import { postModel } from "../models/post";
import { Post } from "../types"
import express from "express";
import { Request, Response } from express
const router = express.Router()


class controller {
  static async handle (request: Request, response: Response): Promise<Post[]> {

   try{
    if (request["query"] == {}) {
      return response.status(400).json({
        statusCode: 400,
        message: "must inform query parameters"
      })
    }
    const { query } = request;
    const posts: Promise<Post[]> = await postModel.find(query).lean();

    return response.status(201).json(posts)
  }catch(err) {
    return response.status(500).json({
      statusCode: 500,
      message: "internal server error"
    })
  }

  }
}

router.get("/posts", controller.handle);

export controller;