2

글쎄, 데이터 매퍼에서 Java의 ResultSet Object를 사용하여 도메인 모델을 생성하는 방법을 궁금해했다. 필자는 Martin Fowler의 책을 읽었으며, 그의 예제에서 ResultSet의 각 필드를 도메인 매 개 변수의 로컬 변수로로드하여 도메인 모델을 만든 다음 이러한 모든 로컬 변수를 도메인 모델의 생성자에 하나씩 전달합니다.데이터 맵퍼 패턴을 사용하여 Java 결과 집합으로 도메인 모델을 만드는 방법은 무엇입니까?

테이블에 2-5 열이 포함되어있는 경우에만 문제가 발생합니다. 그렇지 않으면 10 개 이상의 로컬 변수와 10 개 이상의 매개 변수를 허용하는 생성자가 생깁니다. 나는 5 개 이상의 매개 변수를 받아들이는 생성자 나 메소드를 좋아하지 않는다. 10+는 너무 많다. 내 도메인 모델의 생성자에도 UnitOfWork와 같은 종속성 주입의 인수가 있음을 언급하지 않습니다. 한마디로 말하면, 생성자의 서명을 엉망으로 만들고 싶지 않습니다.

두 가지 가능한 솔루션이 있지만 두 가지 모두 문제가있는 것으로 보입니다. 나는 전체 ResultSet을 도메인 모델의 생성자에 확실히 전달할 수 있습니다. 이렇게하면 생성자는 2-3 개의 매개 변수 만 갖게됩니다. 이것과 관련된 문제도 있습니다. 도메인 모델과 도메인 계층은 이제 ResultSet의 존재를 인식합니다. 내가 아는 한 데이터 매퍼는 도메인 모델과 결과 집합 사이의 조정자 역할을 수행해야합니다. 도메인 모델이 결과 집합을 직접 조작하는 경우 이는 잘못된 아키텍처 설계입니다. 장기적으로는 더 많은 문제를 일으킬 것입니다.

또한 빈 도메인 모델을 먼저 만든 다음 해당 설정 메서드를 사용하여 필드에 값을 추가 할 수도 있습니다. 이 접근 방식의 문제점은 도메인 모델의 상태를 새 것으로, 더럽고, 제거했거나, 깨끗하게 모니터링하는 UnitOfWork가 있다는 것입니다. UnitOfWork의 메커니즘은 도메인 모델의 setter 메서드가 호출 될 때마다 개체를 더티 (dirty)로 표시하고 DB 업데이트를 보류 (pending)한다는 것입니다. 결과적으로 빈 도메인 모델 + 설정 메소드를 사용하면 setter가 호출 될 때마다 객체가 더티라고 표시됩니다. 도메인 모델을 반환하기 전에 깨끗하게 표시 할 수 있지만 개체 컬렉션을로드 할 때 전체 프로세스가 여전히 느립니다.

그래서 어떻게 생각하십니까? 우아하고 자원을 소비하지 않는 Java ResultSet을 사용하여 도메인 모델을 생성하는 다른 방법이 있습니까? 나는 아이디어가 없습니다 ...

답변

0

Builder pattern을 사용하여 ResultSet에서 모델을 빌드하는 것이 좋습니다.