2011-08-26 4 views
0

저는 현재 OOP를 책과 웹 사이트에서 배우고 있습니다. 나는 연습해야 할 시점에있다. 절차적인 방법으로 수행하는 방법을 알고있는 작은 프로젝트를 시작했습니다. 그러나 OOP 방식으로 시도 할 때 질문이 떠납니다.클래스 책임 정의에 도움이 필요합니다.

내 프로젝트 개념은 다음과 같습니다. 직장에서 우리 시스템에 상호 연결을 구성/보관/관리하고 싶습니다. 나는 2 개의 클래스를 사용한다. 장치 및 인터페이스.

장치에는 일부 인터페이스가 있습니다.

  • 무효 addInterface (문자열 이름)
  • 무효 removeInterface (인터페이스 I)
  • 인터페이스 getInterface (인터페이스 내가) 내가 쓴해야 # : 인터페이스 getInterface (문자열 인터페이스 이름
    장치 클래스는 다음 methodes이)
  • 무효 printAllInterface()

인터페이스 클래스가 다음 methodes :

,
  • 공극 connectInterface (인터페이스 interfaceToConnectTo)
  • 공극 disconnectInterface (인터페이스 interfaceToDisconnectFrom)
  • 공극 printAllConnection()

는 기본적으로, 두 디바이스를 만들고 각각 어떤 인터페이스를 추가 최종적 일부 접속을 인터페이스 간.

장치는 모든 인터페이스를 알고 있습니다. 인터페이스는 연결된 모든 다른 인터페이스를 알고 있습니다.

하지만 인터페이스가 주어지면 어떤 장치에 속하는지 어떻게 알 수 있습니까?

인터페이스가 장치를 인식하면 밀접하게 결합됩니다. 지금까지 배운 것에 대해서는 실제로 그렇게 좋지는 않습니다. 다른 방법은 내가 찾고있는 인터페이스가 있는지 모든 장치를 찾아 보는 것입니다. 정말 비효율적 인 것 같습니다. 나는 명백한 무엇인가 놓쳤다라고 확신한다. 아무도 그것을 볼 수 있습니까?

감사

갱신 : 이것은 MS Visio 파일의 모양과의 연결로 볼 수있다 . 인터페이스는 실제로 셰이프의 커넥터 일뿐입니다. 장치는 모양입니다.

답변

1

당신이 주어진 InterfaceDevice을 결정할 수 있어야 요구 사항이있는 경우, 그 DeviceInterface 이미 단단히 당신이 그것을 구분하지 않은 경우에도 연결되어 있다는 것을 의미한다. 두 클래스를 분리하면 더 이상 Interfaces이 모두 Device에 속한다고 가정 할 수 없습니다.

그것은 모든 Interface 객체가 Device에 속해 있어야하는 경우라면, 내가 어떤 문제가 InterfacesetDevice/getDevice 방법을 가지고 볼 수 없습니다. 예, 순환 종속성을 만들지 만 특정 도메인을 모델링하는 가장 좋은 방법 인 것 같습니다.모든 Device을 검색 할 때 특정 Interface이 포함되어 있는지 확인하는 것은 제 생각에는 훨씬 더 나쁜 디자인 결정입니다.

그러나 에 속하지 않고 Interface이 존재하거나 완전히 다른 클래스에 속하는 것이 바람직한 경우 더 높은 수준에서 아키텍처를 재고해야합니다. 무언가의 라인을 따라 : Interface에서 가져올 필요가 없도록 어떻게 이러한 클래스를 재구성 할 수 있습니까? 답변은 귀하의 특정 도메인에 따라 달라지며, 귀하의 질문에있는 정보를 통해서만 알 수 있습니다.

+0

인터페이스가 장치에 속해야한다는 것은 사실입니다. 이 순환 참조는 내 디자인에 뭔가 잘못되었다고 생각하게 만들었습니다. – Jason

0

기존 인터페이스에 대한 간단한 설명입니다. 인터페이스의 인쇄 방법을 다른 인터페이스로 옮겨서 장치 인터페이스가 제어하는 ​​인터페이스를 유지하는 단일 책임을 갖도록해야합니다. 또한, "Interface getInterface (Interface pInterface)"메소드는 Input 인수로 리턴하고 리턴합니까? 답변에 관해서는, 위의 대답이 제기되는 몇 가지 질문이 있습니다. 올바르게 이해하면 addInterface()가 호출 될 때 장치 클래스가 인터페이스를 생성합니다. 유스 케이스가 반환되는 인터페이스가 주어진 경우, 인터페이스의 getDevice()는 괜찮습니다 (setDevice() 메소드를 추가하지 않을 것입니다; 인터페이스가 항상 인터페이스의 경우 Device가 인터페이스의 생성자로 전달 될 수 있습니다) 장치에 속합니다. 편집 : 그러나 인터페이스에 연결된 장치가 런타임에 변경 될 수 있도록 사용 사례에 대한 인상을 api 사용자에게 제공하려는 경우 setDevice() 메서드를 더 선호 할 수 있습니다.

+0

나중에 _core_가 적절하게 디자인되었을 때 Model/View/Controler 패턴을 사용할 계획이었습니다. 그들은 그대로 디버깅 할 수 있습니다. 원래 게시물에서 언급해야합니다. – Jason