2016-12-14 3 views
2

나는 단지 SOLID 원칙을 더 익히기 위해 노력하지만 이전의 코드 (SOLID 아님)에 새 구조를 구현하여 막혔습니다.이전 코드에서 솔리드 원칙을 사용하여 새로운 기능 구현

나는이 Room.Class

public class Room { 
    private String roomCode; 
    private String roomDescription; 
    // getter/setter 
} 

지금 나는 roomDescription에 대한 번역이 필요합니다. 나는 interface

public interface ITranslation {  
    String findTranslation();  
} 

를 작성하기 시작하고 기존 코드에 implementation

public class RoomDescriptionTranslation implements ITranslation { 

@Override 
public String findTranslation() { 
    return "translated Room"; 
} 

codesdescriptions 일부 Rooms를 생성하는 서비스 클래스가있다. 이 Rooms은 뷰 (jsp 빈과 같이)에서도 사용됩니다.

새로운 요구 사항은 번역 된 설명이보기에 있어야합니다.

따라서 제 질문은 기존의 Rooms의 번역 로직을 구현해야하는 곳입니다.

  • Rooms이 생성 된 기존 serivce 클래스에서 구현해야합니까?
  • 또는 Room의 내부 필드 여야합니까?
  • 아니면 그냥 description이 번역 된 새로운 서비스 클래스를 만들어야합니까?

올바른 방향으로 이동하려면 포인터가 필요합니다.

+0

번역 논리를 추가하면 이해할 수있는 것처럼 번역 논리를 추가하면 클래스에 두 가지 책임이 있습니다. 현재로서는 "Single Responsibility"가 없다. 따라서 새로운 수업을 만들고 게으르거나 기존 수업에 추가해야하는 경우 여기로 전화를 걸 수 있습니다. – NewUser

+0

객실 코드를 사용하여 설명 텍스트를 찾고 싶습니까? –

+0

@SME_Dev 이미 설명이 있습니다. 그러나 그것의 번역이 필요하고 또한보기에 번역 된 설명이 필요합니다. – Patrick

답변

1

첫 번째 또는 세 번째 옵션 일 수 있지만 두 번째 옵션은 내 의견으로는 사용할 수 없습니다. 페이지C의 속성입니다, 속성 페이지 및 클래스 C를 들어

: 어떤 클래스를 설계 일반적으로 한 가지 중요한 질문이 생각?

귀하의 경우 질문은 다음과 같습니다. 번역은 방의 속성입니까? 의미 상으로는 그렇지 않다는 소리입니다.

그런 다음 룸 서비스 클래스에서 같은 질문을 할 수 있습니다. 그 대답은 서비스 클래스를 어떻게 정의 했느냐에 달려 있습니다.다시 한 번 속성이 클래스에 속하는지 여부를 결정하는 데 도움이되는 또 다른 규칙은 다음과 같습니다.

이 클래스를 설명하는 하나의 단어 또는 구문은 무엇입니까?

이것은 OOP에있는 클래스와 SOLID에있는 S의 아이디어에 대한 것입니다. 일단이 질문을하고 수업에 대한 하나의 목적을 설명 할 수 있다면, 어떤 물건이이 수업에 속하는지 아닌지에 대한 첫 번째 질문을 물어볼 수 있습니다.

서비스 클래스가 "모든 방과 관련된 작업 처리"(올바른 경우는 아니지만이 경우) 인 경우 여기에 하나 이상의 조치, 즉 번역을 추가 할 수 있습니다. 그러나 그렇지 않다면 번역 서비스를 새로 만들 수 있습니다. 이

  • 하지 않는

    1. 추가와 같은
    2. 이 (다른 옵션에 비해) 쉽게 펼 수 있을까요
    3. 독립 뭔가 더 많은 언어를 보이는이 모든 것을 고려

      , 나는 새로운 번역 서비스를 가진쪽으로 더 기울어 기존 코드를 변경해야합니다.

    다시 한 번 전체적인 사항에 영향을 미치는 다른 요소가있을 수 있습니다.

  • +0

    좋은 설명. 감사합니다 – Patrick

    0

    이 모델을 SOLID에서 볼 때만 사용하려면 TranslatedRoom extends Room 모델을 만들고이 새 모델에서는 번역에주의해야합니다. 물론

    는 등 뷰에 대한 모델을 만들어 서비스를 리팩토링 할 수있는 경우

    한 가지 더, 우리는이 번역 방을 보여해야하는 경우이 아이디어는 좋다 (어쩌면 SOLID에서 S입니다)/이러한 견해들.

    0

    텍스트를 번역하려면 이미 java에 존재하는 국제화 솔루션을 사용해야합니다.

    귀하의 솔루션에서 귀찮은 유지 관리 문제가 발생하고 반환 할 모든 문자열은 if으로 둘러싸여 있습니다.

    +0

    죄송합니다, 그것은 국제화에 의존하지 않습니다. '디럭스 룸'과 같은 객실 설명이 있으며 다른 방법으로 번역해야합니다. 언어가 아닙니다. – Patrick