구성 요소 기반 아키텍처
구성 요소 기반 아키텍처는 설계를 메서드, 이벤트 및 속성을 포함하는 잘 정의 된 통신 인터페이스를 나타내는 개별 기능 또는 논리적 구성 요소로 분해하는 데 중점을 둡니다. 더 높은 수준의 추상화를 제공하고 문제를 구성 요소 파티션과 관련된 하위 문제로 나눕니다.
구성 요소 기반 아키텍처의 주요 목표는 component reusability. 구성 요소는 소프트웨어 요소의 기능과 동작을 재사용 가능하고 자체 배포 가능한 바이너리 단위로 캡슐화합니다. COM / DCOM, JavaBean, EJB, CORBA, .NET, 웹 서비스 및 그리드 서비스와 같은 많은 표준 구성 요소 프레임 워크가 있습니다. 이러한 기술은 단순히 끌어서 놓기 작업으로 재사용 할 수있는 그래픽 JavaBean 구성 요소, MS ActiveX 구성 요소 및 COM 구성 요소와 같은 로컬 데스크톱 GUI 응용 프로그램 디자인에 널리 사용됩니다.
구성 요소 지향 소프트웨어 설계는 다음과 같은 기존의 객체 지향 접근 방식에 비해 많은 이점이 있습니다.
기존 구성 요소를 재사용하여 시장 출시 시간과 개발 비용을 줄입니다.
기존 구성 요소를 재사용하여 안정성이 향상되었습니다.
구성 요소 란?
구성 요소는 구현을 캡슐화하고 상위 수준 인터페이스로 내보내는 잘 정의 된 기능의 모듈 식, 이식 가능, 교체 및 재사용 가능 집합입니다.
구성 요소는 특정 기능 또는 기능 집합을 캡슐화하여 다른 구성 요소와 상호 작용하기위한 소프트웨어 개체입니다. 명확하게 정의 된 인터페이스가 있으며 아키텍처 내의 모든 구성 요소에 공통적 인 권장 동작을 따릅니다.
소프트웨어 구성 요소는 계약 상 지정된 인터페이스와 명시 적 컨텍스트 종속성 만있는 구성 단위로 정의 할 수 있습니다. 즉, 소프트웨어 구성 요소는 독립적으로 배포 할 수 있으며 타사에서 구성 할 수 있습니다.
구성 요소보기
컴포넌트는 객체 지향보기, 기존보기 및 프로세스 관련보기의 세 가지보기를 가질 수 있습니다.
Object-oriented view
구성 요소는 하나 이상의 협력 클래스 집합으로 간주됩니다. 각 문제 도메인 클래스 (분석) 및 인프라 클래스 (설계)는 구현에 적용되는 모든 속성과 작업을 식별하기 위해 설명됩니다. 또한 클래스가 통신하고 협력 할 수 있도록 인터페이스를 정의하는 것도 포함됩니다.
Conventional view
이는 처리 논리, 처리 논리를 구현하는 데 필요한 내부 데이터 구조 및 구성 요소를 호출하고 데이터를 전달할 수있는 인터페이스를 통합하는 프로그램의 기능 요소 또는 모듈로 간주됩니다.
Process-related view
이보기에서 시스템은 처음부터 각 구성 요소를 만드는 대신 라이브러리에서 유지 관리되는 기존 구성 요소에서 빌드합니다. 소프트웨어 아키텍처가 공식화되면 라이브러리에서 구성 요소가 선택되어 아키텍처를 채우는 데 사용됩니다.
UI (사용자 인터페이스) 구성 요소에는 그리드, 컨트롤이라고하는 단추가 포함되며 유틸리티 구성 요소는 다른 구성 요소에서 사용되는 특정 기능 하위 집합을 표시합니다.
다른 일반적인 유형의 구성 요소는 리소스를 많이 사용하고 자주 액세스하지 않으며 JIT (Just-In-Time) 접근 방식을 사용하여 활성화해야하는 구성 요소입니다.
EJB (Enterprise JavaBean), .NET 구성 요소 및 CORBA 구성 요소와 같은 엔터프라이즈 비즈니스 응용 프로그램 및 인터넷 웹 응용 프로그램에 배포되는 많은 구성 요소가 보이지 않습니다.
구성 요소의 특성
Reusability− 구성 요소는 일반적으로 다른 응용 프로그램의 다른 상황에서 재사용되도록 설계되었습니다. 그러나 일부 구성 요소는 특정 작업을 위해 설계 될 수 있습니다.
Replaceable − 구성품은 다른 유사한 구성품으로 자유롭게 대체 할 수 있습니다.
Not context specific − 구성 요소는 다양한 환경과 상황에서 작동하도록 설계되었습니다.
Extensible − 기존 구성 요소에서 구성 요소를 확장하여 새로운 동작을 제공 할 수 있습니다.
Encapsulated − AA 구성 요소는 호출자가 기능을 사용할 수 있도록하는 인터페이스를 나타내며 내부 프로세스 나 내부 변수 또는 상태에 대한 세부 정보를 노출하지 않습니다.
Independent − 구성 요소는 다른 구성 요소에 대한 종속성을 최소화하도록 설계되었습니다.
구성 요소 기반 설계의 원리
구성 요소 수준 디자인은 소스 코드로 번역 할 수있는 일부 중간 표현 (예 : 그래픽, 표 또는 텍스트 기반)을 사용하여 표현할 수 있습니다. 데이터 구조, 인터페이스 및 알고리즘의 설계는 오류의 도입을 피할 수 있도록 잘 확립 된 지침을 따라야합니다.
소프트웨어 시스템은 재사용 가능하고 응집력이 있으며 캡슐화 된 구성 요소 단위로 분해됩니다.
각 구성 요소에는 필요한 포트와 제공된 포트를 지정하는 자체 인터페이스가 있습니다. 각 구성 요소는 세부 구현을 숨 깁니다.
구성 요소는 구성 요소의 기존 부분에 대한 내부 코드를 만들거나 디자인을 수정할 필요없이 확장되어야합니다.
추상화에 의존하는 구성 요소는 다른 구체적인 구성 요소에 의존하지 않으므로 확장 성이 높아집니다.
커넥터는 구성 요소를 연결하여 구성 요소 간의 상호 작용을 지정하고 결정합니다. 상호 작용 유형은 구성 요소의 인터페이스에 의해 지정됩니다.
구성 요소 상호 작용은 메서드 호출, 비동기 호출, 브로드 캐스트, 메시지 기반 상호 작용, 데이터 스트림 통신 및 기타 프로토콜 특정 상호 작용의 형태를 취할 수 있습니다.
서버 클래스의 경우 주요 클라이언트 범주에 서비스를 제공하기 위해 특수 인터페이스를 만들어야합니다. 특정 범주의 클라이언트와 관련된 작업 만 인터페이스에 지정해야합니다.
구성 요소는 다른 구성 요소로 확장 될 수 있으며 여전히 자체 확장 점을 제공합니다. 플러그인 기반 아키텍처의 개념입니다. 이를 통해 플러그인이 다른 플러그인 API를 제공 할 수 있습니다.
구성 요소 수준 설계 지침
아키텍처 모델의 일부로 지정된 구성 요소에 대한 명명 규칙을 만든 다음 구성 요소 수준 모델의 일부로 구체화하거나 정교화합니다.
문제 도메인에서 아키텍처 구성 요소 이름을 얻고 아키텍처 모델을 보는 모든 이해 관계자에게 의미가 있는지 확인합니다.
다른 엔터티에 대한 관련 종속성없이 독립적으로 존재할 수있는 비즈니스 프로세스 엔터티를 추출합니다.
이러한 독립 엔티티를 새로운 구성 요소로 인식하고 발견합니다.
구현 별 의미를 반영하는 인프라 구성 요소 이름을 사용합니다.
모든 종속성을 왼쪽에서 오른쪽으로, 상속을 맨 위 (기본 클래스)에서 맨 아래 (파생 클래스)로 모델링합니다.
구성 요소 종속성을 직접 구성 요소 간 종속성으로 나타내지 않고 인터페이스로 모델링합니다.
구성 요소 수준 설계 수행
해석 모델 및 아키텍처 모델에 정의 된대로 문제 도메인에 해당하는 모든 설계 클래스를 인식합니다.
인프라 도메인에 해당하는 모든 디자인 클래스를 인식합니다.
재사용 가능한 구성 요소로 획득되지 않은 모든 디자인 클래스를 설명하고 메시지 세부 정보를 지정합니다.
각 구성 요소에 대한 적절한 인터페이스를 식별하고 속성을 정교화하고이를 구현하는 데 필요한 데이터 유형 및 데이터 구조를 정의합니다.
의사 코드 또는 UML 활동 다이어그램을 통해 각 작업 내의 처리 흐름을 자세히 설명합니다.
영구 데이터 원본 (데이터베이스 및 파일)을 설명하고이를 관리하는 데 필요한 클래스를 식별합니다.
클래스 또는 구성 요소에 대한 동작 표현을 개발하고 정교하게 만듭니다. 이는 분석 모델에 대해 생성 된 UML 상태 다이어그램을 정교화하고 디자인 클래스와 관련된 모든 사용 사례를 검토하여 수행 할 수 있습니다.
추가 구현 세부 사항을 제공하기 위해 배치 다이어그램을 정교하게 작성합니다.
클래스 인스턴스를 사용하고 특정 하드웨어 및 운영 체제 환경을 지정하여 시스템에서 주요 패키지 또는 구성 요소 클래스의 위치를 보여줍니다.
최종 결정은 확립 된 설계 원칙과 지침을 사용하여 내릴 수 있습니다. 숙련 된 디자이너는 최종 디자인 모델을 결정하기 전에 모든 (또는 대부분의) 대체 디자인 솔루션을 고려합니다.
장점
Ease of deployment − 새로운 호환 버전을 사용할 수있게되면 다른 구성 요소 나 시스템 전체에 영향을주지 않고 기존 버전을 쉽게 교체 할 수 있습니다.
Reduced cost − 타사 구성 요소를 사용하면 개발 및 유지 관리 비용을 분산시킬 수 있습니다.
Ease of development − 구성 요소는 잘 알려진 인터페이스를 구현하여 정의 된 기능을 제공하므로 시스템의 다른 부분에 영향을주지 않고 개발할 수 있습니다.
Reusable − 재사용 가능한 구성 요소를 사용하면 여러 응용 프로그램 또는 시스템에 개발 및 유지 관리 비용을 분산하는 데 사용할 수 있습니다.
Modification of technical complexity − 컴포넌트는 컴포넌트 컨테이너와 그 서비스를 사용하여 복잡성을 수정합니다.
Reliability − 각 개별 부품의 신뢰성은 재사용을 통해 전체 시스템의 신뢰성을 향상시키기 때문에 전체 시스템 신뢰성이 증가합니다.
System maintenance and evolution − 시스템의 나머지 부분에 영향을주지 않고 구현을 변경하고 업데이트하기 쉽습니다.
Independent− 구성 요소의 독립성 및 유연한 연결. 서로 다른 그룹의 구성 요소를 병렬로 독립적으로 개발합니다. 소프트웨어 개발 및 향후 소프트웨어 개발을위한 생산성.