다음을 통해 공유


도메인 특정 언어를 사용자 지정하는 코드 작성

이 섹션에서는 사용자 지정 코드를 사용하여 DSL(도메인 특정 언어)의 모델에 액세스하고 모델을 수정하거나 만드는 방법을 보여 줍니다.

DSL에 대한 코드 작성 컨텍스트

DSL을 사용하는 코드를 작성할 수 있는 몇 가지 컨텍스트가 있습니다.

메모리 내 저장소

DslDefinition.dsl에 정의하는 클래스 인스턴스는 IMS(메모리 내 저장소) 또는 저장소라는 데이터 구조로 유지됩니다. DSL로 정의하는 클래스는 항상 저장소를 생성자에 대 한 인수로 사용합니다. 예를 들어 다음은 DSL이 Example이라는 클래스를 정의하는 경우입니다.

Example element = new Example (theStore);

일반 개체와 달리 저장소에 개체를 유지하면 여러 이점이 있습니다.

  • 트랜잭션. 일련의 관련된 변경 내용을 트랜잭션으로 그룹화할 수 있습니다.

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
    {
      // make several changes to Store elements here
      t.Commit();
    }
    

    변경하는 동안 예외가 발생하여 최종 Commit()이 수행되지 않으면 저장소가 이전 상태로 다시 설정됩니다. 이렇게 하면 오류로 인해 모델이 일관되지 않은 상태로 남아 있지 않도록 할 수 있습니다. 자세한 내용은 프로그램 코드에서 모델 탐색 및 업데이트를 참조하세요.

  • 이진 관계. 두 클래스 간 관계를 정의하는 경우 양쪽 끝의 인스턴스에 다른 끝으로 이동하는 속성이 포함됩니다. 두 끝은 항상 동기화됩니다. 예를 들어 부모자식이라는 역할을 사용하여 부모 자식 관계를 정의하는 경우 다음을 작성할 수 있습니다.

    John.Children.Add(Mary)

    이제 다음 식은 둘 다 true입니다.

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    다음을 작성하여 동일한 결과를 달성할 수도 있습니다.

    Mary.Parents.Add(John)

    자세한 내용은 프로그램 코드에서 모델 탐색 및 업데이트를 참조하세요.

  • 규칙 및 이벤트. 지정된 변경이 이루어질 때마다 실행되는 규칙을 정의할 수 있습니다. 예를 들어 제시된 모델 요소로 다이어그램의 모양을 최신 상태로 유지하도록 규칙을 사용합니다. 자세한 내용은 변경 내용에 대한 응답 및 전파를 참조하세요.

  • Serialization. 저장소는 포함된 개체를 파일에 대해 serialize하는 표준 방법을 제공합니다. serialize 및 deserialize 규칙을 사용자 지정할 수 있습니다. 자세한 내용은 파일 스토리지 및 XML Serialization 사용자 지정을 참조하세요.