2009-04-10 4 views
0

나는 기본적으로 같은 일을 할 수있는 (설계) 응용 프로그램이 있습니다 :제정신 디자인 대안

클래스 홈페이지, 클래스 BusinessLogic, 클래스 후 UserInterface

BusinessLogic 및 후 UserInterface는 라이브러리 등이 될 수 있도록 설계되었습니다 -하지에 - 지속적으로 개발되었지만, 클래스 Main에서 개발자가 사용했습니다.

BusinessLogic의 생성자는 또한 텍스트 기반 메뉴를 표시하고 터미널 입력을받는 UserInterface를 인스턴스화합니다. 이 입력에 따라 해당 BusinessLogic 객체의 관련 메소드를 호출하여 관련 기능을 실행합니다.

그러나 이것은 순환 참조이며 UserInterface가 해당 BusinessLogic 객체를 호출하는 명백한 방법이 없습니다 (BusinessLogic 객체 식별자를 하드 코드하지 않고도 더 나쁜 습관입니다!).

이것은 논리적 인 디자인으로 보이지만 프로그래밍 측면에서 구현하기가 어렵습니다.

하나의 대안은 UI가 BusinessLogic의 생성자로 입력 데이터를 반환하도록하는 것이지만 BusinessLogic이 입력 분석을 처리하지 못하도록하고 UI가이를위한 합리적인 장소 인 것처럼 보입니다.

아이디어가 있으십니까?

+0

"BusinessLogic 개체 식별자가 하드 코드 된"은 "부모"BusinessLogic UserInterface 필드로 의미하는? –

답변

2

Model-View-Controller pattern을 시도해야합니다. 귀하의 경우 모델과 컨트롤러가 동일하게 나타날 수 있습니다. 인터페이스를 통해 클래스를 서로 분리 한 다음 (예 : Main에서) 외부 클래스를 작성하면 모든 사람의 생활이 단순 해집니다.

+0

오, 와우, 생각 했어야했다 : 나는 그것을 잘 알고있다 : 나는 그것을 구현하는 가장 좋은 방법은 다음과 같다 : class Main, 클래스 BusinessLogic, 클래스 UI (뷰), 클래스 Controller (컨트롤러)), 효과적으로 데이터, UI 구성 요소, 입력 분석 및 비즈니스 로직 분리, 맞습니까? :) – wiseguy

+0

글쎄, 데이터베이스는 모델의 일종이지만, 실제 모델로 그 데이터의 표현이 있어야 응용 프로그램에서 사용할 수 있습니다. 해결중인 문제를 나타내는 개체입니다. 귀하가 말하는 "BusinessLogic"부분 일 수 있습니다. –

-1

Model-View-Controller 패턴을 사용하려는 것처럼 들릴 수 있습니다.

또한 파트 간의 인스턴스화 종속성을 줄이려면 Spring과 마찬가지로 dependency-injection을 사용하는 것이 좋습니다.