Featured image of post 32. 프레임워크는 세부사항이다

32. 프레임워크는 세부사항이다

6부 - 세부사항

아무리 해도 프레임워크는 아키텍처가 될 수 없다.

프레임워크 제작자

프레임워크 제작자는 자신이 해결해야 할 고유한 문제를 위해 프레임워크를 제작한 것 이므로, 내가 풀려는 문제와 완벽하게 일치할수는 없다.

혼인 관계의 비대칭성

프레임워크 제작자와 사용자의 관계는 놀라울 정도로 비대칭 적이며 프레임워크 제작자는 당신에게 프레임워크와 혼인하기를 요구하는 것 처럼 보인다.

프레임워크 제작자는 당신의 애플리케이션이 가능하면 프레임워크에 공고하게 결합될 것을 강하게 역설한다.

이러한 결합은 제작자에게는 위험 요소가 되지 않으며, 프레임워크에대해 절대적인 제어권을 쥐고 있는 입장에서 오히려 프레임워크와 결합되기를 바란다.

한술 더 떠 제작자는 사용자도 프레임워크에 결합되어 관계를 깨지 못하는 것을 기대하고 있다.

제작자는 프레임워크에대해 장시간에 걸친 헌신을 요청하지만, 그에 상응하는 헌신을 받을수 는 없을 것이다.

모든 위험과 부담은 당신이 감수할 뿐, 제작자가 감수하는 건 아무것도 없다.

위험요인

프레임워크의 아키텍처는 깔끔하지 않은 경우가 많다.
프레임워크는 의존성 규칙을 위반하는 경향이 있다.

  • 업무 객체를 만들 때 프레임워크 코드를 상속할 것을 요구한다.
  • 고유한 엔티티에 코드가 상속되면 애플리케이션의 가장 안쪽 원과 프레임워크의 결합이 발생한다.

프레임워크가 한번 원 안으로 들어가버리면 다시는 원 밖으로 나오지 않을 것이다.

결국 싸우게된다.

프레임워크가 애플리케이션의 초기 기능을 만드는데 도움이 될 것이지만, 제품이 성숙해지면서 프레임워크가 제공하는 기능과 틀을 벗어나게 될 것이다.

앞으로의 변화

프레임워크는 애플리케이션에게 도움되지 않는 방향으로 진화할 수도 있다.

더 나은 프레임워크

새롭고 더 나은 프레임워크가 등장해서 갈아타고 싶을 수도 있다.

해결책

프레임워크와 결혼하지 말라!

프레임워크를 사용할 수는 있지만 결합해서는 안된다.

프레임워크는 아키텍처의 바깥쪽 원에 속하는 세부사항으로 취급해야한다.

업무 객체를 만들 때 프레임워크가 자신의 기반 클래스로부터 파생하기를 요구한다면, 프락시를 만들고, 업무 규칙에 플러그인할 수 있는 컴포넌트에 이 프락시를 위치시켜 프레임워크가 핵심 코드 안으로 들어오지 못하게 해야한다.

대신 핵심 코드에 플러그인할 수 있는 컴포넌트에 프레임워크를 통합하고, 의존성 규칙을 준수한다.

이제 선언합니다.

애플리케이션이 프레임워크와 결혼하고자 한다면 애플리케이션의 남은 생애 동안 그 프레임워크와 항상 함께 해야 한다는 사실을 반드시 명심해야한다.

결코 가볍게 시작할 수 있는 관계가 아니다.

결론

프레임워크와의 첫 만남부터 바로 결혼하려 들지 말라.

가급적이면 프레임워크를 가능한 한 오랫동안 아키텍처 경계 너머에 두자.