모델, 클래스 및 관계 이해

도메인 관련 언어 (DSL) 기록할 수 있는 사용자 지정 프로그램 코드와 함께 그 DSL 정의 파일에 의해 정의 됩니다.대부분의 DSL 솔루션에서 프로그램 코드에서이 파일이 생성 됩니다.

DSL 정의의 중심 기능을 설명합니다.

DSL 정의

열 때 Dsl\DslDefinition.dsl, Visual Studio 창 유사한 다음과 같은 그림 합니다.

dsl 디자이너

DSL 정의에서 가장 중요 한 정보는 DSL 정의 다이어그램에 표시 됩니다.일반적으로 다이어그램의 왼쪽에 표시 되는 DSL 탐색기에서 Dsldefinition.dsl의 일부가 되어 추가 정보 표시 됩니다.작업에 가장 자주 발생 하는 작업을 다이어그램 및 DSL Explorer 고급 사용자 지정을 합니다.

DSL 정의 다이어그램 모델 요소와 모델 요소 간의 연결을 정의 하는 관계를 정의 하는 도메인 클래스를 보여 줍니다.또한 셰이프와 모델 요소를 표시 하는 데 사용 되는 커넥터를 보여줍니다.

스윔 레인이 있는 dsl 디자이너

DSL 정의 다이어그램 또는 DSL 탐색기에서에서 항목을 선택 하면이 대 한 정보가 속성 창에 표시 됩니다.자세한 내용은 DSL 세부 정보 창에 표시 될 수 있습니다.

Bb126288.collapse_all(ko-kr,VS.110).gif모델 Dsl의 인스턴스는

A 모델 는 사용자가 만든를 DSL의 인스턴스입니다.모델 인스턴스를 정의 하는 도메인 클래스 및 인스턴스를 정의 하 여 도메인의 관계의 요소, 연결 되는 모델 요소를 포함 합니다.모델 셰이프와 모델 요소 및 링크 다이어그램에 표시 되는 연결선 있을 수도 있습니다.DSL 정의 모양 클래스, 커넥터 클래스를 클래스 다이어그램에 대 한 포함 됩니다.

DSL 정의 되는 도메인 모델.반면 모델의 도메인 관련 언어의 런타임 인스턴스화 DSL 정의 또는 도메인 모델 도메인 관련 언어의 디자인 타임 표현입니다.

도메인 클래스 모델 요소를 정의합니다.

도메인 클래스는 도메인의 다양 한 요소를 만드는 데 사용 됩니다 및 도메인 관계 요소 간의 링크입니다.이러한 요소와가 자신의 모델을 만들 때 디자인에 특정 언어의 사용자가 인스턴스화해야 하는 링크의 디자인 타임 표현입니다.

이 그림 음악 라이브러리 DSL의 사용자가 만든 모델을 보여 줍니다.음악 앨범 노래 목록이 들어 있는 상자에 표시 됩니다.아티스트 둥근 상자로 표시 됩니다 및 앨범을 들를 멤버에 연결 되어 있습니다.

생성된 DSL의 인스턴스 모델

두 가지 측면 DSL 정의 구분합니다.모델 다이어그램 모델 요소의 모양은 커넥터 클래스와 클래스 셰이프를 사용 하 여 정의 됩니다.모델에서 전달 된 정보는 도메인 클래스와 도메인 관계를 사용 하 여 정의 됩니다.

다음 그림에서는 도메인 클래스와 관계에서 DSL 정의 음악 라이브러리를 보여 줍니다.

관계 포함 및 참조

그림 4 개의 도메인 클래스를 보여 줍니다: 음악, 앨범, 음악가 노래.도메인 클래스 이름, 제목, 등과 같은 도메인 등록 정보를 정의합니다.인스턴스 모델에서 값이이 속성 중 일부를 다이어그램에 표시 됩니다.

도메인 관계는 클래스 간의입니다: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs 및 ArtistAppearedOnAlbums입니다.1에서 0으로 복합성 관계가.. *.예를 들어, 모든 노래에 정확 하 게 하나의 앨범 AlbumHasSongs 관계를 통해 관련 되어야 합니다.모든 앨범 곡 수가 있을 수 있습니다.

Bb126288.collapse_all(ko-kr,VS.110).gifDSL 정의 다이어그램 다시 정렬

이 그림에서는 앨범으로 도메인 클래스 DSL 정의 다이어그램에 여러 번 표시 될 수 있음을 확인 합니다.항상 기본 보기 및 일부 있을 수 참조 보기.

DSL 정의 다이어그램을 다시 정렬할 수 있습니다.

  • 주 교체 및를 사용 하 여 뷰를 참조는 여기 트리 상태로분할 트리 명령을.이 명령이 표시 하는 단일 도메인 클래스를 마우스 오른쪽 단추로 클릭 합니다.

  • 도메인 클래스와 클래스 셰이프 Ctrl + Up 및 Ctrl + 아래쪽 키를 눌러 순서를 변경 합니다.

  • 축소 하거나 각 모양의 상단 오른쪽에 있는 아이콘을 사용 하 여 클래스를 확장 합니다.

  • 도메인 클래스의 맨 아래에 있는 빼기 기호 (-)를 클릭 하 여 해당 트리 부분을 축소 합니다.

상속

도메인 클래스 상속을 사용 하 여 정의할 수 있습니다.상속 파생을 만들려면에서 상속 도구를 클릭, 파생 된 클래스를 누른 다음 기본 클래스입니다.모델 요소가 기본 클래스에서 상속 된 속성을 모두와 함께 자신의 도메인 클래스에 정의 된 모든 속성이 있습니다.또한 관계에서 그 역할을 상속합니다.

상속 관계, 도형 및 연결선 사이도 사용할 수 있습니다.상속 같은 그룹 내에서 유지 해야 합니다.셰이프는 도메인 클래스에서 상속할 수 없습니다.

도메인 관계

모델 요소 관계로 연결할 수 있습니다.링크는 항상 이진입니다. 이들은 정확 하 게 두 가지 요소를 연결합니다.그러나 많은 링크가 다른 개체 요소를 사용할 수 있습니다 및 경우에 사용할 수 있습니다 한 쌍의 요소 간에 두 개 이상의 링크.

요소에 여러 클래스를 정의할 수 있습니다 방금 처럼 링크의 서로 다른 클래스를 정의할 수 있습니다.클래스에 대 한 링크를 호출 되는 도메인 관계.어떤 유형의 요소 인스턴스에 연결할 수 있는 도메인 관계를 지정 합니다.관계의 끝 이라고는 역할, 도메인 관계 이름을 관계 자체 뿐만 아니라 두 개의 역할을 정의 하 고 있습니다.

두 종류의 도메인 관계: 관계 및 참조 관계를 포함 합니다.DSL 정의 다이어그램에서 관계를 포함 각 역할에 실선 있고 참조 관계 파선입니다.

Bb126288.collapse_all(ko-kr,VS.110).gif포함 관계

그 루트를 제외한 모델의 모든 요소를 포함 한 링크의 대상입니다.따라서 전체 모델에 대 한 링크를 포함 한 트리를 형성 합니다.포함 되는 관계 제약 또는 소유권을 나타냅니다.이러한 방식으로 관련 된 두 모델 요소는 부모 및 자식 라고도 합니다.자식 부모에 포함 될 것입니다.

포함 된 링크 일반적으로 명시적으로 커넥터의 다이어그램에 표시 되지 않습니다.대신, 이러한 제약으로 일반적으로 표현 됩니다.모델의 루트를 다이어그램으로 표시 되 고 요소에 포함 된 셰이프를 다이어그램으로 표시 됩니다.

예제에서는 루트 클래스 음악 Musichasalbums를 포함 AlbumHasSongs 곡 하는 앨범을 하는 포함 관계에 있습니다.노래 안에 각 앨범 목록 항목으로 표시 됩니다.음악에 음악가 클래스를 해당 인스턴스로 갖는 또한 셰이프를 다이어그램으로 표시 하는 포함 Musichasartists도 있습니다.

부모 삭제 될 때 기본적으로 포함 된 요소를 자동으로 삭제 됩니다.

모델을 저장할 serialization을 사용자 지정 하지 않으면 XML 형태로 파일에 포함 된 요소 내 부모, 중첩 된.

[!참고]

포함 하는 상속 하는 것은 아닙니다.포함 되는 관계의 자식 부모 속성을 상속 하지 않습니다.포함 된 모델 요소 간의 연결 유형입니다.상속 클래스 사이의 관계를 나타냅니다 및 모델 요소 간에 링크를 만들지 않습니다.

Bb126288.collapse_all(ko-kr,VS.110).gif포함 규칙

모든 요소의 인스턴스 모델에서 모델의 루트를 제외 하 고 정확 하 게 하나의 포함 링크의 대상 이어야 합니다.

따라서 루트 클래스를 제외 하 고 모든 도메인은 추상 클래스의 포함 관계에서 하나 이상의 대상 이거나 포함 하는 기본 클래스에서 상속 해야 합니다.클래스에 두 개 이상의 포함, 대상이 될 수 있지만 인스턴스 모델 요소는 한 번에 하나의 부모는 사용할 수 있습니다.복합성 대상에서 소스를 0에서 1까지 또는 1 이어야 합니다.

Bb126288.collapse_all(ko-kr,VS.110).gif탐색기를 포함 한 트리 표시

해당 모델 다이어그램 함께 사용자에 게 표시 하는 탐색기에서 또한 DSL 정의 만듭니다.

생성된 DSL 탐색기

탐색기 모델에서이 경우에 모든 도형에 대 한 정의 없는 모든 요소를 보여 줍니다.요소 및 포함 관계를 표시 하지만 관계를 참조할 수 없습니다.

도메인 속성 요소 값을 표시 하려면 사용자 또는 모델 다이어그램에서 모델 탐색기에서 요소를 선택 하 고 속성 창이 열립니다.다이어그램에는 표시 되지 않습니다 포함 한 모든 도메인 속성을 표시 합니다.예제에서는 각 노래 제목과 장르를 있지만 다이어그램에 제목 값만 표시 됩니다.

참조 관계

모든 종류를의 포함 되는 관계의 참조 관계를 나타냅니다.

일반적으로 참조 관계 셰이프 사이 연결선으로 다이어그램에 표시 됩니다.

모델의 XML 표현에 사용 하는 두 요소 사이의 참조 링크 표시 됩니다 모니커를 사용할 수 있습니다. 즉, 모니커 모델에서 각 요소를 고유 하 게 식별 하는 이름입니다.XML 노드에 각 모델 요소에 대 한 모니커는 다른 요소에 관계의 이름을 지정 하는 노드를 포함 합니다.

역할

모든 도메인 관계에는 두 가지 역할, 원본 역할 및 대상 역할입니다.

다음 그림에서 게시자 도메인 클래스 및 PublisherCatalog 도메인 관계 사이 있는 선을 원본 역할입니다.도메인 관계와 앨범 도메인 클래스 간의 선 대상 역할입니다.

역할 및 속성

관계에 관련 된 이름을 모델을 통과 하는 프로그램 코드를 작성할 때 특히 중요 합니다.예를 들어, DSL 솔루션을 빌드할 때 생성 되는 게시자 클래스 속성 컬렉션 앨범을 카탈로그 있습니다.앨범 클래스는 속성이 게시자 클래스의 단일 인스턴스는 게시자입니다.

DSL 정의에 관계를 만들 때 기본값 속성 및 관계 이름이 지정 됩니다.변경할 수 있습니다.

복합성

복합성 요소 수는 도메인 관계에서 동일한 역할을 가질 수 있습니다 지정 하십시오.예 0-다 (0.. *) 카탈로그 역할의 복합성 설정을 지정 하기 위해 필요한 만큼의 PublisherCatalog 관계 링크 게시자 도메인 클래스의 인스턴스가 있을 수 있습니다.

다이어그램에서 입력 하거나 수정 하는 역할의 복합성 구성의 Multiplicity 속성에는 속성 창입니다.다음 표에서이 속성에 대 한 설정을 설명합니다.

복합성 형식

설명

0.. * (많은 것 0)

도메인 클래스의 각 인스턴스에 인스턴스 관계 또는 관계의 여러 인스턴스를 가질 수 있습니다.

0에서 1까지 (하나 0)

도메인 클래스의 각 인스턴스에 인스턴스 관계 또는 관계의 둘 이상의 인스턴스가 있을 수 있습니다.

1 (1)

도메인 클래스의 각 인스턴스에 인스턴스 관계를 가질 수 있습니다.역할 클래스의 인스턴스를 두 개 이상의 인스턴스 관계를 만들 수 없습니다.유효성 검사를 사용 하는 경우 역할 클래스의 인스턴스 관계의 인스턴스가 있는 경우 유효성 검사 오류가 표시 됩니다.

1.. * (일대다)

이 복합성이이 역할에는 클래스의 각 인스턴스 관계의 여러 인스턴스를 가질 수 및 각 인스턴스의 관계의 인스턴스를 적어도 하나 있어야 합니다.유효성 검사를 사용 하는 경우 역할 클래스의 인스턴스 관계의 인스턴스가 있는 경우 유효성 검사 오류가 표시 됩니다.

도메인 클래스와의 관계

링크 저장소 모델 요소를 파생 클래스인 Linkelement의 인스턴스로 표현 됩니다.도메인 모델 다이어그램 도메인 관계에서 이러한 속성을 정의할 수 있습니다.

원본 또는 대상의 다른 관계에 관계를 만들 수도 있습니다.도메인 모델 다이어그램에서 도메인 관계를 마우스 오른쪽 단추로 클릭 하 고 다음을 클릭 클래스를 표시 하는.추가 클래스 상자에 표시 됩니다.다음 관계에 연결할 수 있습니다.

도메인 클래스와 마찬가지로 상속으로 부분적으로 관계를 정의할 수 있습니다.파생 된 관계를 선택 하 고 설정 자료 관계 속성 창에서.

파생 된 관계의 기본 관계를 전문으로 합니다.도메인 링크에서 파생 되어야 하는 것 또는 기본 관계로 연결 된 클래스와 동일한 클래스입니다.모델에서 파생 된 관계의 링크 작성 되 면 인스턴스는 파생 및 기본 관계입니다.프로그램 코드에서 기본 또는 파생된 클래스에 의해 생성 된 속성을 사용 하 여 연결의 반대쪽 끝으로 이동할 수 있습니다.

참고 항목

개념

[리디렉션] 생성된 API의 도메인 관계

기타 리소스

Domain-Specific Language Tools Glossary