2017-09-16 5 views
-2

클라이언트는 param 중 하나만 제출하면됩니다.클라이언트에게 잘못된 매개 변수를 전달하는 매개 변수를 전달하고 있습니까?

매개 변수가 firstName 또는 middleName 또는 lastName과 일치하는 레코드를 검색해야합니다.

는 스프링 프로젝트이며,이 같은 봄의 데이터를 활용하여이 방법을 썼다

findByFirstNameOrMiddleNameOrLastName(param, param, param); 
:
List<Record> findByFirstNameOrMiddleNameOrLastName(String fn, String mn, String ln); 

그리고 서비스 계층에서, 나는대로 중복 된 매개 변수를 전달하여이 메서드를 호출하고

내가 이것을 할 때, 메소드에 세 개의 다른 인수를 전달하면 같은 변수를 디자인 재검토가 필요하다는 검토 주석이 있습니다.

나는 동일한 정보를 한 번 이상 메서드에 전달하는 것이 좋지 않다고 상기 한 내용을 이해합니다. 는 또한 동일 하나 PARAM을 가지고이 같은 문제를 해결할 수 @Query 주석을 사용하여 작성 될 수 있다는 것을 이해 (이 너무 검토에 의해 제안되는 것입니다) :

@Query("{$or : [{ 'firstName' : ?0 }, { 'middleName' : ?0 }, { 'lastName' : ?0 }] }") 
List<Record> findByFirstNameOrMiddleNameOrLastName(String n); 


하지만 내 지점을 여기에 마찬가지로

findByFirstNameOrMiddleNameOrLastName(fParam, mParam, lParam); 

을 : 나는 다른 서비스 계층 실제로 다른 PARAMS로 검색 할 경우, 그들은 단지 같은 다른 값을 전달하여 같은 방법을 사용할 수 있도록 동네 짱의 방법으로 그것을 생각이 방법을 도입한다 다른 조합은 다른 입력 조합을 메서드에 전달하는 것만으로도 사용할 수 있습니다.

내가 여기 순진 수 있습니다,하지만 난이 방법의 장점을 참조하십시오 전원이 클라이언트 코드에 주어진대로,이 같은 방법은 요구를 반환하여 다른 쿼리와 방법을 결정 자신의 입력 그대로 결과 집합.

@Query 접근 방식을 사용하고 다른 서비스 계층에서 서로 다른 세 개 또는 두 개의 매개 변수로 쿼리해야하는 경우이를 수행하기 위해 여러 가지 방법을 사용해야합니다. 내 질문에해야 할 일은 다음과 같습니다.

새 쌍 쿼리 요구 사항이 발생할 때마다 중복 매개 변수를 전달하지 않아야하므로 새 메서드를 작성하거나 클라이언트 코드에 컨트롤을 제공하여 원하는대로 전달해야합니다 (심지어 복제) 하나의 일반적인 방법을 가지고?

업데이트 : 이제 우리는 하나 개의 인수 솔루션 갔을를 들어

. 다음과 같음 :

그래도 나는 그것에 대해 토론하고 제안 할 것이 열려있다.

나는이 질문을 중재자주의 사항에 표시하여 codereview.stackexchange로 이동하도록 요청했습니다.com

+1

필요한 경우 동일한 값을 기반으로 검색하는 방법입니다. 구현할 필요가있는 것입니다. 3 매개 변수 솔루션은 현재 존재하는 문제를 해결하지 않으며 결코 존재할 수 없습니다. 그래서 나는 개인적으로 당신의 평론가와 동의 할 것이고,이 질문은 의견을 바탕으로 한 것이고이 사이트에 좋지는 않다. https://codereview.stackexchange.com/가 그것을위한 적당한 장소 일 수있다. – Oleg

답변

0

미래의 응용 프로그램이 사용자의 nickname 필드를 지원하고 검색 유스 케이스가 닉네임을 포함하도록 확장되어야한다면 어떨까요? 저장소 인터페이스의 메소드에 하나 이상의 매개 변수를 추가하여 모든 클라이언트에 영향을 미치지 않겠습니까 아니면 쿼리에서 추상화하겠습니까?
디자인 관점에서 사용자에게 search 오퍼레이션을 제공하면 매개 변수와 일치하는 필드는 소비자 (서비스 계층)가 알 수없는 구현 세부 사항이므로 쿼리 주석이 더 좋습니다.
앞으로 다른 쌍의 요구 사항이 생기면 필드를 DB 구현 세부 사항보다는 유스 케이스의 일부로 생각하고 싶습니다. 이 경우 search 메소드는 매개 변수 인 두 세트의 인수를 취할 수 있고 다른 하나는 조회해야하는 필드입니다. 데이터베이스 구현에서 필드에 대한 매개 변수와 일치하는 쿼리를 가질 수 있습니다.

관련 문제