목적
|
디자인 모델의 조직에 새 모델 요소를 고려
필요한 경우 디자인 모델 구조의 밸런스 다시 조정
|
새 요소가 디자인 모델에 추가되었을 때 디자인 모델의 요소를 다시 패키징하는 것이 자주 필요합니다. 재패키징은 여러 목표를 달성합니다. 패키지 사이의 결합을 줄이고 디자인 모델에서 패키지 내의 응집력을 개선합니다.
궁극적인 목적은 서로 다른 패키지(및 서브시스템)가 별도의 개인이나 팀에 의해 서로 독립적으로 디자인 및 개발될 수 있도록 하는 것입니다. 완벽한 독립은 달성하기가 거의 불가능하지만, 패키지 사이의 느슨한 결합은
대규모 또는 복잡한 시스템의 개발 용이성을 개선하는 경향이 있습니다.
'일반' 모델 구조(모든 패키지 및 서브시스템이 시스템에서 동일한 개념 레벨에 상주하는 구조)는 소규모 시스템에 적합하며, 더 큰 시스템은 '계층화'라고 부르는 추가 구조화 도구가 필요합니다(중간 산출물 가이드라인: 계층화 참조). 계층화 규칙은 특정 유형의 패키지 사이에 허용되는 관계에 대한 제한을 정의합니다. 이러한 규칙이 특정 종속성이
존재하지 않아야 함을 인식합니다. 즉, 응용프로그램 기능성이 특정 운영 체제 또는 윈도윙 시스템 서비스에 직접 종속되지 않아야 합니다. 응용프로그램 기능성을 하위 레벨 구현 서비스의 변경으로부터 분리하는 논리적
운영 체제와 윈도잉 서비스를 포함하는 중간 계층이 있어야 합니다. 계층화는 변경의 영향을 줄이는 방법을 제공합니다. 패키지와 서브시스템 사이의 종속성을 제한하는 규칙을 강제로 실행하고 패키지와 서브시스템 사이의
결합 정도를 줄여서 시스템이 보다 강력하게 됩니다. 시스템은 변경을 허용합니다.
새 모델 요소가 시스템에 추가될 때 단일 팀이 관리할 수 없을 만큼 기존 패키지가 너무 커질 수 있습니다. 패키지는 패키지 내에서 강력하게 응집성을 갖지만 패키지 사이에는 느슨하게 결합되는 여러 패키지로 분할되어야
합니다. 이를 수행하는 방법이 어려울 수 있습니다. 일부 요소는 두 패키지 모두에 의해 사용되기 때문에 하나의 특정 패키지에 배치하기 어려울 수 있습니다. 두 가지 가능한 솔루션이 있습니다. 요소를 각 패키지에
하나씩 여러 오브젝트로 분할하거나(이것은 요소가 여러 가지 '개성' 또는 어느 정도 공통 원소를 갖지 않는 책임 세트를 갖는 경우에 가능함), 모든 상위 계층 요소가 동일하게 의존할 수 있는 하위 계층의 패키지로
요소를 이동하십시오.
시스템의 복잡도가 커질수록 유지보수 가능하고 이해할 수 있는 구조를 갖기 위해 많은 수의 계층이 필요하게 됩니다. 그러나 계층 수에 따라서 복잡도는 증가하고 이해 가능한 정도는 줄어들므로 7 - 10 이상의 계층은
가장 큰 시스템에서조차 드뭅니다.
미들웨어 및 시스템 소프트웨어 계층을 포함한 계층화 예제가 아래에 표시됩니다.
Java/웹 기반 응용프로그램에 대한 샘플 패키지 계층화. 참고: 일반적으로 TCP/IP 서비스의 사용이 Java VM, java.rmi 및 웹 브라우저 내에 캡슐화되기 때문에 TCP/IP 패키지에 대한 종속성은
명시적으로 모델링되지 않습니다. 여기에서는 설명을 위해서만 표시됩니다.
서브시스템 및 계층에 대한 책임을 개인이나 팀에 배정하십시오. 각 패키지 또는 서브시스템은 한 개인(범위가 작은 경우) 또는 한 팀(범위가 큰 경우)의 책임이어야 합니다.
|