2013-04-07 1 views
0

시스템 설명 : 시스템은 기본적으로 외부 시스템의 메시지를 처리합니다.외부 시스템의 데이터 정리를위한 로직을 어디에 둘 것인지

시스템을 모델링 한 방법은 다음과 같습니다. 1. 외부 시스템에서 메시지 (신속한 메시지)를받는 anti corruption 레이어를 만들었습니다. ACL은 또한 데이터를 정리할 권한이 있으며, 마지막으로 ACL은 처리를 위해 도메인 서비스에 메시지를 전송합니다. 2.이 메시지를 처리하는 실제 도메인을 보유하고 있으며 일부 계산 등을 수행합니다.

신속한 메시지에있는 데이터를 '정리'하는 논리를 어디에 둘 것인지 파악하는 데 문제가 있습니다.

스위프트 메시지 : 각 SWIFT 메시지는 다양한 분야와 각각의 값 그래서 마찬가지로

{ 
    :field1://value 1 *** 
    :field2://value2!! 
    :unwantedField3://value3 
} 

내가 필드의 목록을 포함 메시지라는 실체를 가지고이 포함 된 텍스트의 단지 BLOB입니다. 내가 직면하고있는 문제는 메시지의 BLOB를 Message 엔터티로 변환하는 것이다. 이는 각 필드를 다음 필드와 다르게 추출해야하기 때문입니다. 따라서 상기 예에서, 필드 1의 값이 값 1이어야

  1. ,없이 *, FIELD2의
  2. 값이없는 값 2이어야!
  3. 필드 3는 총

을 무시해야 4 가지 fieldTypes이있다. 그래서 제 질문은, 어디에서

  1. 내가 다른 각 필드를 청소하는 if 문이있는 외부 '서비스'에 배치해야합니까, 필드
    를 정리하는 로직을 배치해야합니까입니까? (빈혈 모델)
  2. 필드 값 개체 자체를 청소 논리를 넣어, 각 필드 자체를 청소하는 방법을 알고 있으므로 (이 문제는이 필드 개체가 도메인에 상주하는 및 나는 내가 있어야한다고 생각합니다. 도메인의 데이터를 정리하는 논리 도메인은
  3. 내가 텍스트의 BLOB에서 필드를 추출 청소 않는 ACL에서 특별 수업()

를 생성 할) 깨끗한 데이터를 다루는 그리고이 모든 작업을 수행 로직이 ACL에 있거나 도메인으로 이동합니다. 외부 데이터 정리 로직이 도메인에 있지 않아야한다는 감각이 있습니다. 비즈니스가 없기 때문에 도메인에 앉아서는 안됩니다.

public class Message: Entity<long> 
{ 
    public IList<Field> Fields{get; set;} 
} 

public class Field: ValueObject 
{ 
    string Tag {get; set;} // this is what it looks for in the swift message BLOB of text from the external system 
    string Value {get;set;} 
} 

답변

1

ACL의 목적은 데이터를 도메인에 완전히 적응시키는 것입니다. 도메인이 다른 시스템의 세부 사항을 알 필요가 없도록 데이터를 변환하거나 정리해야합니다. 따라서 ACL은 정리를위한 올바른 장소입니다. 그러나 필드가 매우 복잡한 경우 필드 특정 논리를 처리하기 위해 ACL에 여러 어댑터 클래스가있는 것이 좋습니다. 도메인으로 전달되기 전에 데이터가 완전히 번역되었는지 확인하십시오.

+0

이 '어댑터'클래스에 관한 올바른 방향을 알려줄만큼 친절하십니까?내가 지금까지 가지고있는 것은 도메인에서 4 가지 필드 유형을 가지고 있는데 모두 Field를 상속합니다.이 4 가지 필드 유형을 사용하는 이유는 다른 정리/번역을 적용 할 수 있기 때문입니다. 청소가 복잡하지 않다, 내가 위에서 언급 한 것과 정확히 같다. 내가해야 할 일은 첫 번째 필드에서 *를 제거하고! 두 번째 필드에 세 번째 필드는 값의 시작과 끝에서 제거해야하는 몇 가지 문자가 있습니다. 예를 들어 값이 -value4 ° 일 수 있습니다. 모두 제거해야합니다. - ° ° – sawe

+1

태그 정보를 저장하지 않겠습니다. 귀하의 도메인 개체; 그것은 ACL을 깨고 신속한 메시지의 세부 사항이 도메인으로 유출되도록 허용합니다. 귀하의 도메인이 신속한 메시지의 구성 및 관리가 아니라면. 그렇지 않다면 ACL은 데이터를 도메인 특정 컨텍스트로 변환해야합니다. 이 경우 구문 분석 논리는 매우 간단하므로 스위블 블롭을 사용하여 내 도메인 객체를 생성하는 단일 빌더 메소드를 ACL에서 사용할 가능성이 큽니다. – Nescio

관련 문제