일부 코드 (Java)를 검토하고 비즈니스 논리 흐름 차트를 기반으로 변경합니다. 현재 코드는 많은 양의 if 문을 사용합니다. 시도하고 싶은 곳에서 멀리 떨어져 있습니다. 나는 다형성에 대해 읽었으며, 내 상황에 그것을 적용하는 방법에 대해 머리를 감싸려고 노력하고있다. 하나의 조건부 레벨에서 작동하도록 만들 수 있지만 여러 조건부 레벨에서 더 확장해야하는 어려움이 있습니다. 이 코드는 이전 단계의 변수가 전달되는 'Logic'메소드를 사용하여 런타임에 실행됩니다.다른 스위치/중첩 피하기 - Java
실례 : 우리는 2 개의 동물원 '동물원 A'와 '동물원 B'와 '집'을 가지고 있습니다. 이들 각각은 '장소'입니다. 각 동물원에는 4 개의 '위치', '북쪽', '남쪽', '동쪽'및 '서쪽'이 있습니다. '집'에는 위치가 하나뿐입니다. 우리는 몇 가지 변수에 기초하여 사람에게 '목적지'를 지정하려고합니다. 이 변수는 다음과 같습니다. '장소'는 우리 장소 (동물원 A, 동물원 B, 집)와 관련이 있습니다. 'Direction'은 Google의 위치 (N, S, E, W)와 관련이 있습니다. 흐름 차트 :
그래서 |----- | 'HOME'
|Place?| ----- > *destination = 'home'*
|----- |
Zoo A | Zoo B
|---------------|----------------------------------------|
|----------| |----------|
|Direction?| |Direction?|
|----------| |----------|
| North | North
----------- *destination = 'Zoo A North' ----------- *destination = 'Zoo B North'
| East | East
----------- *destination = 'Zoo A East' ----------- *destination = 'Zoo B East'
| South | South
----------- *destination = 'Zoo A South' ----------- *destination = 'Zoo B South'
| West | West
----------- *destination = 'Zoo A West' ----------- *destination = 'Zoo B West'
사람 X는 동물원 (A)의 장소와 남부의 방향이있는 경우가의 대상을 가져야한다 '동물원 남쪽의'
내가 사용 현재 아주 못생긴 코드를 if 문 :
if(Place = 'HOME')
destination = 'HOME'
if(Place = 'Zoo A')
if(Direction = North)
destination = 'Zoo A North')
if(Direct = East)
destination = 'Zoo A East')
...
if(Place = 'Zoo B')
if(Direction = North)
destination = 'Zoo B North')
if(Direct = East)
destination = 'Zoo B East')
...
변수를 ENUM으로 사용하여 중첩 된 스위치로 전환 할 수 있습니다. 그러나 나는 그것으로 떨어지는 나쁜 습관을 가지고 있기 때문에 if - else/switch 의존성을 피하려고 노력하고있다. 팩토리 디자인을 사용하여 장소 클래스를 생성 한 다음 각 위치 및 대상에서 다형성을 사용하여 실험했지만 지나치게 복잡해지기 시작했습니다. if/switch에서 벗어날 가치가 있습니까? 나는 단지 그것을 과도하게 만들려고 노력하고 있는가?
로직 태클 방법에 대한 제안 사항은 다음과 같습니다. 감사합니다
예를 들어 무엇을 하려는지 완전히 명확하지 않습니다. "장소"와 "방향"문자열 또는 다른 종류의 객체입니까? 어느 쪽이든, 간단한 예제는'Zoo' 클래스에서'goNorth()'메소드 등을 만드는 것일 수 있습니다. 나는 이것이 당신의 문제를 해결할 것이라는 것을 완전히 확신하지는 못합니다. 왜냐하면 당신이하려고하는 것에 대해 완전히 명확하지 않기 때문입니다. –
@ Code-Guru - 단순화를 위해 모든 문자열을 사용한다고 가정 해 보겠습니다. 내가하려는 것은 흐름의 상단에서 시작하고 변수 (방향 및 장소)에 따라 최종 '목적지'로 끝납니다. 그러나 가장 관리하기 쉽고 유지하기 쉬운 방법으로 유지하려면 – NathanS