편집 : 이것을 정리하고 단축했습니다.
귀하의 질문에 제시된대로 이벤트 기반 아키텍처와 MVC 아키텍처의 이점이 상호 배타적이라고 생각하지 않습니다. 이벤트 중심적이고 MVC 아키텍처와 일관성있는 코드를 디자인 할 수 있습니다.
이벤트가 발생하면 특정 이벤트가 발생할 때 실행되는 이벤트 처리기가 있습니다. 이벤트는 낮은 레벨 (마우스 동작 및 키보드 동작)을 시작하고 툴킷을 통해 상위 레벨 처리기로 전달됩니다. MVC는 핸들러의 위치를 구성하는 방법과 핸들러가 비즈니스 로직과 어떻게 인터페이싱하는지에 관한 것이다.
그래서 EventBus로 돌아갑니다. EventBus를 통해 모든 UI 이벤트를 가리키고 Model에 대한 모든 변경 사항이 다시 EventBus를 통해 View로 전달되면 EventBus 라이브러리가 MVC 아키텍처의 Controller에서 중요한 부분을 차지한다고 말할 수 있습니다.
MVC에 관해 생각할 때, 목표는 비즈니스 로직과 데이터를 데이터 표현에서 분리하는 것입니다. 이벤트 버스 (Eventbus)와 같은 것이 당신을 도울 수 있습니다. 컨트롤러 클래스는 모델에 EventBus를 묶고 UI를 다른쪽에 연결합니다. 완료되면 모델에 이벤트 스트림이 제공되었음을 알 수 있습니다. 이벤트 스트림이 GUI, 테스트 장치 또는 하드웨어 디버거에 의해 공급되는지는 알 수 없습니다.
잠시 동안 내 앱에서 이벤트 구동 코드를 사용했습니다. 이벤트 주도 코드가 MVC 패턴처럼 작동한다는 사실에 정말로 동의합니다. 여기서 MVC 패턴은 이벤트가 발생했을 때 응답이 어디서 왔는지를 뷰가 알지 못하는 곳에서 발생합니다. 하지만 제 질문은 이벤트 구동 아키텍처가 MVC 패턴으로 대체 될 수 있다는 두 번째 주장에 있습니다. 당신은 이벤트 버스를 사용한다면 (예를 들어.) 내 애플 리케이션에서 MVP 패턴을 사용할 필요가 없다고 생각합니까? – Mehrdad
이벤트 중심 MVC를 대체한다고 말하지 않았습니다. MVC와 함께 사용할 수 있습니다. 아마도 나는 Event Driven의 의미를 오해했을 것입니다. 즉, 낮은 수준의 이벤트 (타이머 오버플로 또는 사용자의 버튼 클릭)는 비즈니스 논리를 포함하여 상위 계층까지 퍼콜합니다. 높은 수준의 코드는 조작 순서를 예측/제어 할 수 없습니다. 실제로 일부 작업은 다른 스레드에서 동시에 실행할 수 있습니다. 그 반대는 어떤 종류의 폴링 루프 일 것입니다. 거기서, 타이머와 버튼의 상태는 무언가가 일어날 때까지 반복적으로 체크되고 루프는 핸들러를 호출합니다. – Teto
나는 이것을 누군가와 이야기하고 있었고, 나는 아직도 너를 오해 할 수도있다. 이벤트 버스를 사용하면 "이벤트가 발생하지 않는"프로그램을 만들 것을 제안 하시겠습니까? 아니면 MVP가 아닌가요? 이벤트 구동 방식이 아닌 곳이라면 어디서나 UI 툴킷을 찾을 수 있습니다. 그리고 EventBus는 모델에서보기를 감추는 데 먼 길을갑니다. 그렇다면 어떤 혜택을 얻지 못할 것이라고 생각하십니까? 그리고 왜? – Teto