계층화 설계 2 - 추상화 벽과 이어지는 포스트이다.
계층화 설계 패턴 - 작은 인터페이스
작은 인터페이스 패턴은 새로운 코드를 추가할 위치에 관한 것이다.
예시:
addData()
함수가 실행될때에 서버에 로그를 찍어주는 api call을 해야한다. submitLogOnPost()
함수를 어디에 위치해야할까?
단순히 생각하면
addData()
를 할때에 넣어주면 될거같지만 addData()
함수는 계산이다. submitLogOnPost()
는 액션이기에 포함하고 있는 addData()
함수도 액션으로 변경되며 테스트가 어려워진다.또한
onUpdate()
시에는 로그를 찍을 필요가 없기때문에 onPost()
함수의 마지막 단계에서 넣어주면 된다.
계산이 액션으로 바뀌지 않았고, 불필요한 계층의 변경이나 확장도 일어나지 않았다.함수가 하려는 일이 무엇인지 정확히 파악하고 계층에 잘 배치하는것이 작은 인터페이스 패턴을 실천하는 방법이다.
추상화 벽을 빈틈없이 나누고 필요한 함수만 가지고 있는 것이 완벽한 추상화 벽 패턴이지만 이게 실제로 가능할지는 모르겠다. 다만 내가 작성하는 코드의 목적이 어떤 계층에 속하는지 아는 정도면 좋을 것 같다.
계층화 설계 패턴 - 편리한 계층
위에 설명한 3개의 패턴은 계층화 설계의 이상적인 방법에 대해 설명한다.
편리한 계층 패턴은 더 현실적이고 실용적인 면을 다룬다. 이전에 다룬 3개의 패턴을 적용하면 완벽한 프로그래밍 설계가 된것 같지만 사실 현업에서 3개의 패턴을 완벽하게 구현하는것은 어렵다.
기한 내에 프로젝트를 끝내야하고, 빠르게 프로토타입을 만들어 시장의 반응을 살피고 이 프로덕트의 유지 할지 말지에 대한 고민을 하는 스타트업에서 일하는 개발자에게는 시간의 여유가 없다.
지금 개발하는 프로젝트의 코드들이 개발하기 편리한가를 냉정하게 보고 만일 너무 많은 계층을 드나들어 유지보수 하기 불편하다면 다시 위에 패턴들을 조금씩 적용해보는게 좋다. 개발자로서의 생산성과 비즈니스 요구사항의 균형에서 정도를 정하는 것이 편리한 계층이다.