내 경험에서 나온 원칙은, 프로젝트의 주 프레임워크를 위해 래퍼를 만들지 않는 것이다.
예를 들어 내가 스프링 부트를 프레임워크로 선택했다면, 나중에 스프링을 다른 프레임워크로 대체할 수 있도록 그 클래스를 래핑하지는 않는다. 스프링 부트가 도메인 클래스에 퍼지지 않도록 최선을 다하지만, 컨트롤러 클래스를 스프링에서 독립시키기 위해 컨트롤러 클래스를 래핑하지는 않는다. 스프링은 리포지터리 클래스를 구현할 때 유용한 기능도 제공한다. 이를 사용하면 여러분의 리포지터리는 스프링의 몇몇 기능과 결합되며 프레임워크 독립적인 클래스가 되지 못한다. 하지만 이는 큰 문제가 되지 않는다. 여기서는 자바 프레임워크를 예로 들었지만, 다른 언어에서 비슷한 프레임워크를 선택할 때도 마찬가지다. 루비 온 레일즈나 ASP.NET 코어를 선택했다면, 특별한 이유가 없는 한 해당 프레임워크를 받아들이는 것이 좋다.