트랜잭션 스크립트 시스템을 기반으로 Clean 시스템 구축
4558 단어 CleanArchitectureDDD
아직 개발 중이라 큰 성과는 못 봤지만 비슷한 상황에 있는 분들에게 참고가 됐으면 좋겠습니다.
데이터 객체 중심의 기존 시스템
대상은 어떤 업무 응용 프로그램의 백엔드로 관계 데이터베이스(RDB)를 중심으로 많은 구성 요소가 이동하고 있다.
구성 요소는 비동기식 메시지 수신, 일회용, UI용 WebAPI 등 수십 가지 이동된 이미지입니다.
각 구성 요소의 입력과 출력, 논리 부분은 분리되어 있지만 데이터 접근의 실현은 공통적이다.
기본적으로 RDB표의 한 줄을 Getter/setter만 있는 데이터 대상에 비추고 반복해서 비벼서 결과를 저장하고 반환합니다.이것이 바로 이른바 사무 스크립트 모델이다.
또한 각 구성 요소의 구조는 아래 그림과 같은 차원 구조이다.
기존 시스템의 어려움
이 시스템을 계속 수정하면 각양각색의 문제를 볼 수 있다.
이 시스템을 계속 수정하면 각양각색의 문제를 볼 수 있다.
이 문제들을 해결할 방법이 없습니까?해결책으로 주목되는 것은 DDD, Clean Architecture입니다.
DDD+Clean Archeitecture 적용
기존의 모든 팩스를 팩스로 보내기가 어려웠기 때문에 먼저 새로 개발된 구성 요소를 결정하는 데 대해 구조를 다시 고려하기로 했습니다.
새 어셈블리의 구속은 다음과 같습니다.
Clean Archeitecture를 따라 기존 Data Access 레이어를 사용합니다.
내가 그 특징을 설명할게.
입력-처리-출력 단일행을 Clean으로
Controller를 통해 입력을 받아 Application에 적힌 순서대로 처리한 다음Presenter로 출력하면 Clean Archeitecture 모양이 됩니다.
여기서 중요한 것은 애플이 논리를 설정하지 않고 처리 순서만 기록하는 것이다.의식적으로 이걸 설계하면 복잡하게 얽힌 반을 쫓지 않고 어떤 처리를 하고 있는지 이해하기 쉽다.
실제 학급의 관계는 아래 그림과 같다.
인터페이스를 설정하면 입력과 출력의 실현에 의존하지 않을 수 있다.이렇게 하면 메시지 Quee의 방향 등을 변경할 때도 유연하게 대응할 수 있다.
이번에는 입력과 출력이 모두 메시지 Quee이기 때문에 출력 부분은 Presenter로 그렇게 채택되었다.
한편, 스프링 MVC 등의 웹API를 사용하는 경우 규격상 어렵다.(응답을 Controller의 반환값으로 되돌려야 하기 때문)
그런 경우에는 Presenter를 끄고 Controller로 반납하는 것이 좋습니다.1
도메인 모델을 만들고 객체를 Domain에 배치
애플은 처리 순서만 의식하고 Domain은 비즈니스 논리만 반영한다.
도메인 모델을 반영하는 클래스, 도메인 객체를 찾습니다.
도메인 이름 모델에 대해 역 전문가와 함께 고려한 후 조립합니다.
PlanetUML로 오브젝트 맵을 만들면서 진행하면 비교적 쉽다.다음 그림이 바로 예다.
(P.356, 그림10-7에 따라 제작되었다. 프로젝트 관리를 방해하는 도구에 필요한 후방 프로젝트의 역 모델을 고찰했다.)
역 모델과 그 실현된 역 대상은 기교가 필요하다.이 기사는 생략했지만 다른 DDD 관련 기사나 책을 읽으면 기억에 남을 것 같아요.
Gateway를 통해 도메인 객체와 데이터 객체의 차이점 흡수
역 대상은 상업 논리, 전문적으로'하고 싶은 일'의 대상이기 때문에 데이터베이스가 편리한 데이터 대상과 적응할 수 없다.
이러한 차이를 흡수하기 위해 Gateway는 데이터 대상과 영역 대상을 전환했다.
학급의 관계는 아래 그림과 같다.
Data Access 부분은 기존 시스템의 것을 사용해서 Gateway로 그것을 변환합니다.전환 처리가 전체적으로 Repository Impl에 놓여도 복잡해지기 때문에 비치는 반과Converter만 분리해서 정의합니다.
게이트웨이의 전환 덕분에 기존 데이터 접근 부분의 실현을 계승하고 역모델을 활용한 디자인도 구축했다.
또 향후 RDB 자체가 교체되더라도 게이트웨이 이하 내용을 수정하면 논리에 영향을 주지 않을 수 있다.
총결산
DDD+클린 어치텍처를 활용해 이전 자산을 활용하면서 보수성이 높은 디자인을 완성했다고 생각한다.
아직 노력 중이지만 소감은 이렇다.
nrs씨의 자바 구현 기사를 참고하십시오: https://nrslib.com/clean-architecture-with-java/↩
Reference
이 문제에 관하여(트랜잭션 스크립트 시스템을 기반으로 Clean 시스템 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/abekoh/items/f8d392ac4835efa82b28텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)