2017-09-15 2 views
2

MVC 패턴에서 우리는 REST 응용 프로그램을 개발 중입니다.제어 계층에 의사 결정 문 작성

서비스 계층은 Optional<T>을 반환합니다. 여기서 T는 모든 클래스가 될 수 있습니다.

Controller 레이어에는 결과가 Optional.empty인지 테스트 한 다음 실제 데이터를 반환하는 []을 반환하는 조건문이 있습니다.

return ABCService.getById("").map(send actual data).orElse(Collections.empty()); 

제어 코드에이 코드를 쓰는 것이 좋습니다.

우리는 null을 반환하고 싶지 않기 때문에 Optional<T>을 반환합니다. 우리가 컨트롤 레이어에서 그 조건을 사용하지 않는다면 서비스 레이어에서 돌아 오는 Optional도 제거해야합니다. 이것은 좋은 습관이라고 생각하지 않습니다.

누군가 위의 코드를 추가하는 것이 좋은 습관이 아닌 이유를 설명해주세요. 결과가 어떻게 될 수 있습니까 ??

+0

''무언가를하십시오 ''와'무언가를하십시오 ''는''map''과'orElse'의 의도와 일치하는 * values ​​*인데 짜증이납니다. 실제로 그 내용은 당신이 실제로 동작을 설명하고 있음을 암시합니다. – Holger

+2

코드가 프리젠 테이션 로직이 아니므로 컨트롤러에 없어야합니다. 코드가 프리젠 테이션 로직이라면 컨트롤러에 있어야합니다. 그래서 모든 것은 실제로 어떤 일을하고 실제로 어떤 일을하는지에 달려 있습니다. –

+0

내 질문이 업데이트되었습니다. –

답변

1

컨트롤러는 제공해야하는 형식으로 데이터를 표시 할 책임이 있습니다. 원시 데이터 (서비스에서 정상적으로 처리되는 페치/업데이트와 같은 작업)는 처리하지 않고 데이터가 어떻게 표시되는지 알려줍니다.

따라서 .map(send actual data)이 비즈니스 로직 계층과 관련이 없다고 생각하면 코드 스 니펫을 사용할 수 있습니다.

남은 또 다른 질문은이 사건을 처리 할 방법을 올바르게 작성하는 방법입니다. "Clean Code"에 따르면 두 가지 방법 (각각 비어있는 데이터와 비어 있지 않은 데이터)을 작성하는 것이 좋습니다.

+1

이 도움이 되었습니까? 질문이 남아있는 경우, 당신은 자유롭게 물어볼 수 있습니다 :) – Andrew

+0

예, 많은 질문이 있습니다 .. https://softwareengineering.stackexchange.com/questions/357565/writing-decision-statement-on-control-layer 나는 이것을 물어 보았다. 여기에 질문. 사람들은 내가 힘들게 돌아오고 있다고 말하고있다. ** 선택 가능 **. 정말 그렇습니까? 표준에 따라 API를 만들 수있는 방법이 있습니까 ?? –