DDD 책을 꼭 읽어봐야 한다. (도메인 주도 설계(위키북스), 도메인 주도 설계 핵심(에이콘출판사))
__eq__
, __hash__
__eq__
를 변경하지 않았다면__hash__
를 변경해선 안된다.
저장소 패턴은 영속적 저장소를 추상화한 것이다.
핵심 로직과 인프라 관련 사항을 분리하는 방법으로 의존성 역전 원칙을 사용
추상화가 데이터베이스의 복잡성을 감춰서 시스템을 테스트하기 더 좋게 만든다.
이 책에서 사용하는 프레임워크가 덜 중요해지는 방법을 보여준다.
각 계층이 자신의 바로 아래 계층에만 의존하게 만드는 것이 목표다.
ORM이 제공하는 가장 중요한 기능은 역속성 무지(persistence ignorance)다. 도메인 모델이 데이터를 어떻게 적재하는지 또는 어떻게 영속화하는지에 대해 알 필요가 없다는 의미다.
영속성 무지가 성립하면 특정 데이터베이스 기술에 도메인이 직접 의존하지 않도록 유지할 수 있다.
...
이런 관점에서 보면 ORM을 사용하는 것은 이미 DIP의 한 예다. 하드코딩한 SQL에 의존하는 대신 추상화인 ORM에 의존한다. 하지만 이것만으로는 충분하지 않다.
의존성이란?
Dependency between two components is a measure of the probability that changes to one component could affect also the other
코드가 복잡해지만 필연적으로 다양한 객체 간의 협력 관계가 만들어진다. 협력하기 위해서는 다른 객체가 존재한 다는 사실을 알고 있어야 하고, 다른 객체가 어떤 방식으로 "메시지"를 수신하는 지도 알고 있어야 한다. 이러한 객체의 지식이 의존성을 만든다 (오브젝트를 참고했음)
애플리케이션 설계가 유연해지려면, 실행 컨텍스트에 대한 구체적인 사항을 최소한으로 지니고 있어야 한다. 그래야 기능 추가, 로직 변경 또는 테스트를 작성하는 데도 수월한 코드를 만들 수 있다.
의존성 주입이란?
사용하는 객체가 아닌 외부의 독립적인 객체가 인스턴스를 생성한 후 이를 전달해서 의존성을 해결하는 방법을 의존성 주입이라고 부른다.
왜 의존성 주입이 필요한가?
객체의 생성을 다른 곳(컨테이너)에서 담당해서 결합도를 낮춘다
낮은 결합도로 변경에 용이하고, 다른 객체와의 협력 관계에 더 집중하게 해준다
Fake, Mocking 객체를 주입해 테스트하기 쉽게 만든다
출처: https://www.humphreyahn.dev/blog/dependency-injector