2017-05-20 2 views
0

나는 DDD의 응용 프로그램이 있고 SignalR 내 계층에 맞는 어디 있는지 이해하려고 노력하고 있어요 : 새로운 데이터가있는 경우SignalR은 DDD 아키텍처에서 어디에 속합니까?

1. Presentation (Angular) 
2. Distributed Services (Web API) 
3. Application 
4. Domain 
5. Data 

는 기본적으로 내 SignalR 허브 클라이언트 (각도 웹 응용 프로그램)을 알려줍니다. 내가 간격을두고 데이터베이스를 검사하고 새 데이터가있을 때 클라이언트에 알리는 백그라운드 스레드에서 백그라운드 서비스를 실행합니다.

나는 이런 식으로 생각하는 경향입니다 :

  1. SignalR 허브는 Presentation 계층에 속한다. 내 프리젠 테이션 프로젝트가 순수한 클라이언트 측 (Angular)이라는 점을 감안할 때, 허브 용 프레젠테이션에서 새 프로젝트를 추가 할 것입니다.
  2. 간격으로 데이터베이스를 확인하는 백그라운드 서비스는 Application 계층에 적합합니다. SignalR로 구현할 Notify 메서드로 INotify 인터페이스를 삽입 할 것입니다.

DDD 원칙에 맞습니까?

답변

3

DDD 모든 이 데이터는 잘 정의 된 방식으로 발생하고에 변경 보장에 대한 어디를 통해 잘 이해할 수있는 유비쿼터스 언어에서 용어 정의 변경 사항을 실행하는 코드 전체 비즈니스 (개발자 팀뿐만 아니라).

DDD는 사용자와 다른 시스템과의 인터페이스에 사용되는 메커니즘에 대해 침묵합니다. 이미 계층화 된 아키텍처를 권장하는 것 외에는 이미 수행 한 것처럼 들립니다.

그래서 - 여기 DDD에 대해 너무 많이 걱정하지 것이다 - 그러나 당신의 전반적인 아키텍처 접근 방식을 고려 가치가있다 -, 포트라고 당신의 접근 방식에 잘 일치 하나 계층화 된 아키텍처 패턴의 측면에서 & 어댑터 또는 양파 아키텍처. (12)

이 아키텍처에서 시스템 외부는 특정 기술과 응용 프로그램 계층간에 적용되는 일련의 어댑터로 간주됩니다. 귀하의 경우 WebAPI 레이어는 어댑터의 예입니다.

새 SignalR 어댑터를 만드는 것이 좋습니다. WebAPI 어댑터와 동일한 '레벨'로 간주 할 수 있습니다 (포트 및 어댑터 용어로는 '출력'어댑터이기 때문에 오른쪽 아래에 다이어그램으로 표시 할 수 있음). 양파의).

백그라운드 프로세스의 위치에서 - 개인적으로는 응용 프로그램에서 유스 케이스 나 프로세스 흐름을 안내하지 않으므로 개인적으로 응용 프로그램 계층의 일부로 간주하지 않을 것입니다. 따라서 SignalR 어댑터에 넣거나 새로운 전용 구성 요소를 만들 수 있습니다.

그런데 DDD의 또 다른 개념 (DomainEvents)을 발견 할 수 있습니다. 배경 스레드에 대한 필요성을 완전히 제거 할 수 있습니다. SignalR 어댑터에는 DomainEvents를 처리하기 위해 등록하는 이벤트 핸들러가 포함되어 있습니다.이 핸들러에서는 SignalR을 통해 이벤트에 대한 정보를 클라이언트 측 프리젠 테이션 레이어로 전파하므로 데이터베이스를 전혀 폴링 할 필요가 없습니다! (경고 - 도메인 이벤트 구현에 따라, 집계가 성공적으로 지속되기 전에 SignalR을 통해 광고 이벤트의 위험을 고려해야 할 수도 있지만 전체 주제입니다.)

+0

감사합니다. 고맙습니다, 감사합니다! – user11081980