저는 서비스 레이어에 유효성 검사 코드를 넣으라고하는 많은 책과 기사 예제를 보았습니다. 도메인 객체를 "벙어리"(일명 순수 POCO)로 유지하고 도메인 객체가 서비스 계층에서 수행 할 수있는 모든 유효성 검사를 처리합니다.서비스 계층 유효성 검사 대 도메인 개체 유효성 검사; 도메인 객체의 잠재적 인 "남용"?
서비스 레이어 (Service Layer)는 너무나 많은 책임이 있습니다 (또는 적어도 그렇게 할 수 있습니다). 사용자 인증, 역할 인증, IoC (로거, 오류 처리기 등)에 대한 종속성 객체 스크립팅, 도메인 객체 스크립팅, 리포지토리 스크립팅 및 리포지토리에 도메인 객체 전달 등의 기능을 제공합니다.
서비스 레이어에서 이러한 규칙을 모두 작성하지 않으면 도메인 객체에 심각한 위협이 될까요? 예를 들어, 일부 프로그래머는 도메인 객체에 대해 직접 소비 코드를 작성하고 서비스 레이어를 모두 무시하기로 결정합니까? 그것은 나쁘지 만 믿을만한 상황입니다.
모든 도메인 개체 유효성 검사를 포함하여 서비스 계층에 많은 책임을 맡길 경우 누군가가 직접 도메인 개체를 "보호"할 수있는 방법이 있습니까? 예를 들어 어쩌면 도메인 객체가 특정 클라이언트 (이 경우 서비스 레이어)에서 사용되지 않고있는 것일 수 있습니다.
좋은 디자인은 도메인 객체가 누구를 호출하고 어떻게 호출되는지에 대해 알 필요가 없다고 생각합니다.
도메인 객체를 "잠그는"방법이 없다면 왜 많은 기사, 서적 등은 도메인 객체 유효성 검사를 서비스 레이어에 적용하는 것이 좋습니다. 나는 방위 프로그래밍의 입장을 취하여, 방탄복으로 도메인 객체를 만들고, UI와 BAL/DAL 간의 요청 전달 및 수신을위한 간단한 코드 레이어를 위해 서비스 레이어에 의존해야한다고 생각합니다.
누구나 서비스 계층을 우회 한 사람들로부터 도메인 객체의 "남용"에 대한 실제 프로젝트 경험이 있습니까?
# 2는 데이터 전송 객체와 비슷합니다. DTO를 사용하거나, 최종 소비자가 설정/가져야하는 속성 만 공개하는 인터페이스를 반환 할 수 있습니까? 몇 가지 다른 접근법을 가지고 놀아 보겠습니다.DTO를 피하기 위해 프로젝트에 또 다른 복잡한 레이어를 추가 할 수 있기를 희망했습니다. 답장을 보내 주셔서 감사합니다! –
@indiecodemonkey 그렇습니다. 하지만 요점은 API를 잠그는 방법이 있다는 것입니다. – hvgotcodes