
테스트 및 유지 관리 용이성을 개선하기 위해 비즈니스 로직에서 프레임워크를 성공적으로 분리하는 방법
안녕하세요 여러분, 안녕하십니까?
God Objects에 대해 들어본 적이 있습니까? 절대? 이미? 그러나 이것이 도대체 무엇인지 설명하겠습니다.
볼드체로 된 문장을 주목하라. 이것이 하나님의 주된 문제이고, 그것을 반(反)패턴/원칙으로 만드는 문제이기도 하다. 특히 단일책임의 원칙에 어긋나기 때문이다. 예를 살펴보겠습니다.
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;