LowCode (Mendix) Advanced/Advanced Domain Model Skills

Inheritance - being special and one of a kind

Caryou 2024. 6. 18. 10:37

학습 목표

이 모듈을 마치면 다음을 수행 할 수 있습니다.

  • 상속 사용 시기 결정
  • 도메인 모델에 상속 적용
  • 페이지에서 상속 활용
  • 상속 또는 1-1 연결 사용 중에서 선택

소개

이 모듈에서는 상속 기능을 사용하여 응용 프로그램을 강화하는 방법을 배웁니다. Adrian의 앱은 팀 관리자와 함께 확장되어야 합니다. Adrian은 TeamPlayer와 마찬가지로 사람이기도 하지만 특정 팀 관리자 정보를 저장하려고 합니다. 특정 팀 플레이어 정보와 다릅니다.

다음 강의에서는 현재 버전의 Adrian 앱이 포함된 모델 프로젝트 패키지를 사용하여 프로젝트를 설정합니다.


환경

Mendix studio Pro 버전 9.12.4


 

Mendix에서는 상속을 일반화 (generalization) 라고 한다. 예시로는 다음과 같습니다.

  • A Dog is a specialization of Animal
  • A Car is a specialization of Vehicle

[그림 1]

ㄱ일반화(상속)된 엔터티는 특성, 연결, 이벤트 처리기 마이크로 흐름, 유효성 검사 규칙 및 일반화된 엔터티의 다른 모든 속성을 상속합니다. 이렇게 하면 논리를 재사용하고, 깨끗한 엔터티를 유지하고, 응용 프로그램을 관리하는 것이 더 편리해집니다.

[그림 2]

상속을 하는 방법은 다음과 같습니다.

[그림 3]

 

상속이 DB 구조에 미치는 영향

 

두 개의 단일 엔터티가 있는 경우 둘 다 자체 데이터베이스 테이블과 고유한 기본 키 ID를 갖습니다.

[그림 4]

 

 

하지만 Car 엔터티에서 Vehicle 엔터티를 일반화(상속) 하는 순간 Vehicle 테이블의 열은 다음과 같이 확장 됩니다.

[그림 5]

 

SubMetaObjectName에 해당하는 값은 Vehicle에서 객체를 만들었는지, Car에서 객체를 만들었는지에 따라 갈립니다.

 

상속을 받은 엔터티는 자신과 부모 테이블에 각각 데이터가 저장되고 동일한 ID를 사용하지만

런타임의 개체는 모든 특성을 포함하는 단일 개체입니다.

[그림 6]

 

상속 List View

 

Vehicle 엔터티를 상속받은 엔터티별로 template을 지정할 수 있습니다.

[그림 7]

엔터티별 템플릿 추가 방법 ▼

[그림 8]

 

List View에 onclick 이벤트를 걸어 엔터티별 데이터 접근 방법 ▼

[그림 9]

만약 다음과 같이 Train의 Sequence Flow가 없다면

기차도 Vehicle이기 때문에 Vehicle 의 Sequence Flow를 따른다.

[그림 10]

만약 Train 엔터티속 EngineType 특성에 접근하려 한다면 Train으로 캐스팅 한 후에만 액세스 가능합니다.

( 참고 / [그림 1] or [그림 6] )

 

 

상속 vs 1-1 논리 사용

팀별로 로고가 있는 앱을 확장하려는 다음 경우를 상상해 보겠습니다. 팀이 Image에서 직접 상속하고 이미지 엔터티의 기본 동작을 사용하여 이미지를 업로드하고 저장하는 것이 좋은 솔루션일까요?

두 경우를 모두 검토하고 팀 로고에 대한 1-1 연결로 상속을 대체하게 되는 중요한 차이점을 살펴보겠습니다.

“Is” vs. “Has”

상속과 1-1 연관 중에서 선택하는 열쇠는 먼저 다음 두 가지 "is" 질문에 답하는 것입니다.

  • 엔터티가 부모 엔터티의 진정한 전문화인가요?
  • 전문화를 처리할 때 부모 엔터티의 특성, 연결 및 동작을 항상 사용할 수 있어야 합니까?

이것을 차량과 사람 케이스에 적용하면 대답은 '예'가 될 것입니다. 차량의 무게와 색상도 자동차의 속성이며, 무게와 색상이 없는 자동차는 존재하지 않습니다. 또는 개인의 전체 이름과 이메일 주소도 플레이어 또는 스태프의 속성이며 전체 이름이 없는 플레이어는 존재하지 않습니다.

이것을 Team and Logo 케이스에 적용하면 대답은 '아니오'가 될 것입니다. 로고가 모든 경우에 팀에 필요한 것은 아닙니다.

따라서 가장 좋은 방법은 이미지를 업로드하고 저장하기 위해 image 엔터티의 이미지 기본 동작을 상속하기 위해 image에서 상속하는 로고 엔터티를 사용하는 것입니다. 그런 다음 팀과 로고 엔터티 사이에 1-1 연결을 추가하여 각 팀이 로고를 가질 수 있도록 합니다.

 

상속과 1-1 연관 사이에는 큰 차이가 있습니다. 주요 차이점은 상속은 "is" 관계인 반면 1-1 연결은 "might have" 관계라는 것입니다. "is" 관계는 자동차가 차량의 한 유형임을 의미하고, "might have" 관계는 팀에 로고가 있을 수 있지만 필수는 아님을 의미합니다.

 

 

 

출처 : Mendix Academy - Advanced Domain Model Skills