하나의 모듈은 단 하나의 일만 해야 한다
<장점>
테스팅하기 쉽다
결합도가 낮아진다
관심사 분리가 가능하다
⇒ 3-tier-architecture를 잘 따른다.
즉, 프레젠테이션, 비즈니스, 데이터 레이어로 구성된다.
모델: 비즈니스 객체를 표현
서비스: 핵심 비즈니스 로직을 표현
레포지토리: 데이터베이스와 소통하는 경로
핸들러: 프레젠테이션 레이어 역할
소프트웨어 엔티티들 - 클래스, 모듈, 함수 등- 확장에 대해서는 열려 있어야 하고, 변경에 대해선 닫혀 있어야 한다.