주어진 MVVM 응용 프로그램에서 프레임 워크 (Caliburn.Micro 등)를 사용하지 않도록 선택하는 방법은 무엇입니까?


28

한 번은 MVVM / WPF 프로젝트를 시작했는데,이 프로젝트는 결국 구축 및 배포되었으며 많은 Caliburn.Micro MVVM 프레임 워크를 연구했습니다. 사실 : 나는 Caliburn.Micro를 사용 하지 않고 결국 MVVM 개념 (특히 ViewModelBaseand RoutedCommand클래스 만)을 구현하게되었습니다.

이제는 "단일 사용자 리치 클라이언트 오프라인 데스크톱 응용 프로그램"과 같은 줄을 따라 다소 큰 프로젝트에 할당되었고 Caliburn.Micro를 사용하기로 결정했습니다. 그리고 그것이 나의 "문제"가 시작되는 곳입니다.

이 유명한 블로그 게시물 에서 "MVVM을 사용 하는 경우 프레임 워크 가 필요 합니다"라는 제목 을 읽었습니다 .

"프레임 워크없이 MVVM과 같은 것을 시도하는 것은 엄청난 양의 작업입니다. 수많은 중복 된 코드, 바퀴를 재발 명하고 사람들이 다르게 생각하도록 재교육 합니다.

최소한 프레임 워크를 사용하면 중복 코드를 피하고 바퀴를 재발 명 할 필요가 없으므로 사람들을 재교육하는 데 집중할 수 있습니다. 재 훈련 부분은 일반적으로 피할 수 없지만 프레임 워크는 배관 코드와 구조를 제공하여 프로세스를 더 쉽게 만듭니다. "

처음 읽을 때는 동의하지만 실제 응용 프로그램 에서 Caliburn.Micro (CM)에 대한 실제 경험은 실마리 가없고 혼란 스럽습니다. 즉, 프레임 워크는 프로세스를 전혀 쉽게 만들지 못 했으므로 그 반대입니다. 오히려 (너무) 비공식 문서에 롭 아이젠 버그에 의해 제공 끊임없이 반복 예 읽기 및 제공 뒤얽힌 샘플에서 추론의 사용 패턴에 노력하고, 사물이 작동하도록 설계 할 것 같다 그들의 완전히 간접 클래스 및 인터페이스 관계를 기반 에 당신이 노련한 천재가 아니라면 부작용은 인간적으로 불가능 해 보입니다.

위의 사소한 시나리오는 내가 다루지 않은 IoC 컨테이너와 관련이 있고 내가 가지고 있지 않은 문제해결하는 것처럼 보입니다 . 내 문제와 응용 분야에 대해 생각하는 대신 이러한 것들을 배우는 데 더 많은 프로젝트 시간을 보내고 싶지 않습니다. 방금 바나나를 원했지만 CM은 바나나 바구니를 들고있는 고릴라 (IoC)를주었습니다.

이제 실제로 구현하려는 소수의 MVVM 관련 클래스로만 구성된 자체 제작 MVVM 프레임 워크로 돌아 가려고합니다. 여기서 뭔가를 잃을 경우를 대비하여 CM에 기회를 주려고합니다. 단지 경험과 무지에서 "잘못된 길"을 분명히하는 것입니다. 따라서 질문은 다음과 같습니다.

"프레임 워크가 일을 더 쉽고 자연스럽게 만든다"는 광범위한 합의가 있지만, 그 반대의 경우가 발생하면 프레임 워크를 사용해서는 안되거나 틀린 방법을 배우려고한다는 의미입니까? 처음에 프레임 워크를 사용해서는 안되는 단서가 있습니까? 아니면 간단한 MVVM 개발을 위해 CM을 사용하는 방법을 알아내는 "올바른"방법이 있습니까?


1
개인적으로 특정 행동에 사용할 각 프레임 워크에서 항목을 선택하고 나머지는 무시합니다. 예를 들어, EventAggregator메시징, NotificationObjectViewModelBase 및 RelayCommand명령에 MVVM Light를 위해 Microsoft PRISM 을 사용하는 것이 좋습니다. 중요한 것은 프레임 워크가 어떤 문제를 해결할지 파악하고 해당 솔루션 만 사용하는 것입니다. 전체 프레임 워크 라이브러리를 사용해야한다는 느낌이 들지 않습니다.
Rachel

@Rachel 나는 Caliburn.Micro와 함께이 접근법을 사용할 계획이지만 RelayCommand구현을 찾을 수 없었습니다 (ICommand 속성에 바인딩하는 대신 규칙에 따라 메소드에 직접 "바인딩"하기 때문에).
heltonbiker 2016 년

뷰를 Model / ViewModel 레이어에 얼마나 밀접하게 연결시키는 지 좋아하지 않았기 때문에 Caliburn 프레임 워크를 사용한 적이 없습니다. 귀하의 경우 RelayCommandCaliburn Micro에서 사용하는 라이브러리가 작동하지 않는 경우 다른 라이브러리에서 라이브러리를 사용할 수없는 이유 는 없습니다.
Rachel

"[caliburn]이 뷰를 MVM 계층과 얼마나 가깝게 연결하는지"에 관한 @Rachel은 정확히 무엇을 의미합니까? 더 나은 MVVM 방식으로 이러한 레이어를 묶는 "비-캘리 번 (non-caliburn)"방법은 무엇입니까? (현재 모르기 때문에 진심으로 부탁드립니다).
heltonbiker 2016 년

솔직히 나는 Caliburn Micro를 사용한 적이 없으므로 프레임 워크의 나쁜 판단이라고 생각합니다. View가 먼저 생성되어 코드 숨김 개체를 결정하는 데 대한 인상을 얻은 것을 기억합니다. View-First 개발이 마음에 들지 않아서 싫어했던 부분입니다. 또 다른 하나는 UI를 비즈니스 계층에 너무 많이 묶은 것으로 생각했기 때문에 XAML 구성 요소의 이름 지정 방법에 의존하는 자동 바인딩입니다. 그래도 프레임 워크에 대한 좋은 소식을 들었으므로 내 의견으로는 피하는 것이 좋습니다. 직접 시도해보고 마음
Rachel

답변:


16

CaliburnMicro와 MVVMLight를 사용해 보았고 Caliburn을 사용할 때 실제로 느끼는 느낌이들 것입니다. 오래된 Text = "{Bind PropertyName}"대신 Name = "PropertyName"을 사용하여 컨트롤을 속성에 바인딩 할 수 있다는 것이 정말 마법 같은 느낌입니다. end Caliburn은이 마법적인 일을하기 위해 배 밖으로 나아갑니다. 무언가 잘못되면 정말 디버깅하기가 어렵고, 일을 더 악화시키기 위해 한 가지 일을 할 수있는 방법이 많이 있습니다.

그러나 MVVMLight를 사용하면 얇고, 사용하면 MVVM 프레임 워크와 거의 100 % 비슷하며 일부 기능이 뿌려져있을 수 있습니다.

나는 이것이 "프레임 워크를 사용하지 않는 방법"에 대한 귀하의 질문에 대답하지는 않지만 솔직히 그 길을 잘못 가고 있기 때문에 그 길로 갈 것을 권할 수는 없습니다. 하나 먼저.


그렇다면 적어도 "Caliburn.Micro disorientation"에서 일종의 "치료"로 MVVMLight를 사용해야한다고 생각하십니까? 그 경우라면 반드시 살펴볼 것입니다.
heltonbiker

@heltonbiker 확실히, 가자. 최소한 MVVM Framework에 대한 발판을 마련하는 것이 훨씬 간단합니다.
kirie

나는 너무 많은 마술이 진행되고 있음에 동의합니다. AC 및 어셈블리 배경에서 온 것으로 가정합니다. E는 배경의 마술로 인해 작동하는 것을 찾기 위해서만 작동하지 않습니다. 디버깅이 불가능하고 성능 문제가 자주 발생하면 쉽게 해결할 수 없습니다.
굴림

10

MVVM이 무엇인지 인식하는 것이 중요합니다. 재 구현할 필요가없는 일부 공유 기능 (JPEG 파일 구문 분석 또는 지정된 SQL 데이터베이스 서버에 연결)이 아니라 패턴 입니다. 즉, 풍부한 GUI 구현 방법을 선택할 수있는 패턴입니다. 따라서 패턴의 구현이 간단하고 간단하다면 프레임 워크가 아니라 패턴을 사용하는 데 부끄러움이 필요하다고 생각하지 않습니다.

실제로, 프레임 워크로서의 전체 패턴 아이디어가 너무 멀리 나아 갔다고 생각합니다. 패턴이 되려면 솔루션 클래스의 일반적인 형태 여야합니다. 이것이 그렇기 때문에 패턴을 사용하는 시스템에 맞게 패턴을 조정해야하며, 모든 크기에 맞는 패턴을 사용하려고하면 그렇게 할 수 없습니다. 패턴 구현을 애플리케이션 디자이너에게 맡기고 아키텍처보다는 기능을 캡슐화하는 라이브러리를 제공하는 것이 훨씬 더 건설적입니다.


2
또한 Microsoft가 제공하는 MVVM (기본적으로 WPF)은 부족합니다. 노련한 개발자로 자신을 생각하는 프로그래머들조차 매우 실망합니다. 마술 문자열, 런타임에서 모호한 예외, 라디오 버튼 그룹을 열거 형에 바인딩하는 것과 같은 가장 기본적인 것들은 stackoverflow.com/q/397556/168719 처럼 보입니다 -프레임 워크는 무엇을 할 수 있습니까? 하나가 복잡성의 수준을 에코, 또는 그 위에 정말 두꺼운 추상화를 제공하기 위해 노력에 그들은이
콘라드 Morawski

2
@KonradMorawski WPF 자체는 MVVM이 아닙니다. WPF로 코드 숨김을 수행 할 수는 있지만 MVVM이 아닙니다. 따라서 WPF 및 MVVM을 수행하려면 MVVM 프레임 워크를 사용하거나 직접 구현해야합니다.
Andy

1
@Andy는 물론 WPF는 MMVM을 위한 것 입니다. WPF에 기본 제공되는 MVVM 기능을 말합니다. 나는 여전히 뒤에 코드를 할 수있는 알
콘라드 Morawski

@KonradMorawski MVVM과 함께 WPF를 사용할 수 있으며 WPF에는 그러한 가능성을 염두에두고 구축했지만 WPF에는 MVVM 관련 기능이 내장되어 있지 않습니다. WinForms와 함께 MVP를 사용할 수있는 것처럼 WinForms는 해당 패턴을 사용할 수있는 특정 기능을 제공하지 않습니다.
Andy

3
@Andy 어쩌면 우리는 지금 정의를 논쟁하고있을 것입니다. 내 말은 MVVM 가능하게 모든 "접착제"이미 있다는 것입니다 - XAML에서 데이터 바인딩 DataContext
콘라드 Morawski

7

WPF에 대한 나의 첫 경험은 Caliburn.Micro를 사용했기 때문에 이것은 아마도 대부분의 개발자와는 상당히 다릅니다. WPF와 Caliburn.Micro는 WinForms에서 오는 가파른 학습 곡선이라는 것을 알았습니다. 그러나 둘 다에 대한 경험이 있으면 쌍으로 사용하는 즐거움을 발견했습니다. 현재 Caliburn.Micro를 사용하지 않는 다른 조직에서 일하고 있는데 코드베이스가 부풀어지고 불필요하게 복잡 해지는 중복 배관 코드가 많이 있습니다.

Caliburn.Micro에는 디버깅이 복잡 할 수 있지만 문제가 발생하면 다시는 고통을 덜 겪을 가능성이 있다는 데 동의합니다. 향상된 개발 속도, 더 깨끗하고 깔끔한 코드와 더 나은 MVVM을 장려하는 전체 프레임 워크는 나에게 가치가 있습니다.

Caliburn.Micro는 또한 재고 WPF를 무효화하지 않으며, 그 위에 빌드되기 때문에 원하는 경우 WPF 기능을 계속 사용할 수 있으며 Caliburn을 원하는 경우 몇 비트 및 조각으로 사용할 수 있습니다. 이것은 TypeScript와 JavaScript가 서로 공존하는 방식과 비슷합니다.

기회가 주어진다면 향후 작업 할 새 WPF 프로젝트에서 Caliburn.Micro를 가장 확실히 사용할 것입니다.


3
답변 주셔서 감사합니다. 2 년 후, 나는 의존성 주입 컨테이너 (Conpendency Injection Containers)의 개념을 이해 한 후에 이러한 프레임 워크를 "수락"하는 것이 훨씬 쉽다는 것을 알게되었다.
heltonbiker

1

Caliburn.Micro를 사용하여 좌절감을 느끼는 사람은 다음 프레임 워크를 살펴보십시오. Stylet

Caliburn.Micro에서 영감을 얻었습니다. 일어나는 일에 대해 혼란스러워하는 많은 마법을 제거합니다. 또한 설명서는 기술 전문 용어를 사용한다고 가정하지 않고 훨씬 더 평범한 언어로 작성되었습니다. 초보자에게는 훨씬 좋습니다.

또한 Stylet은 ViewModel-First 접근 방식을 취합니다. Caliburn.Micro와 다른 많은 프레임 워크는 View-First 접근 방식을 취하는데, 이는 다소 어색한 문제가 있습니다. SOLID 원칙과 패턴 코드를 이미 잘 알고 있다면 ViewModel-First 방식이 더 자연 스러울 것입니다. 뷰 모델이 아닌 로직이 시스템을 구동해야한다는 관점을 취하기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.