WPF 학습 곡선은 얼마나 나쁜가요?
저는 WPF가 (당신이 얼마나 지식이 있거나 경험이 있는지에 따라) 꽤 가파른 학습 곡선을 가지고 있다는 것을 여러 사람들에게 읽고 들었습니다.대부분의 사람들이 데모나 스타터 프로젝트를 실행할 수 있는 것처럼 보이지만, 그 후에는 여러 가지 문제로 인해 오랜 시간 동안 꼼짝 못하게 됩니다.구체적으로 무엇이 배우거나 이해하기 어려운가(레이어, SDK, XAML, 데이터 바인딩 등) 궁금하며, 그러한 어려운 주제를 피하고 완화하는 방법에 대해 제안이 있습니까?
WPF는 다릅니다. 그것으로부터 벗어날 수 없습니다.
저의 주요 조언은 XAML을 두려워하지 말라는 것입니다. 그것을 수용하십시오. 그것이 바로 힘이 있는 곳입니다!
제가 설명해 드릴게요.
생산성을 높이기 위해 몇 번의 키 입력으로 창의 맨 레이아웃을 만들 수 있기 때문에 텍스트 보기에 XAML을 쓰는 것을 선호합니다.정기적으로 코드를 입력하는 경우 이 방법을 사용하여 창을 빠르게 개발할 수 있습니다.그런 다음 시각적 편집기를 사용하여 보기를 예쁘게 만들 수 있습니다.
각"XAML의 약신이만 XAML의요기면다한억소"라는 한다면,new해당 개체와 해당 XAML 요소의 각 속성이 해당 개체의 속성이므로 XAML을 개체 생성 및 속성 할당으로 생각할 수 있습니다.코드를 작성하는 것과 매우 유사합니다.
만약 당신이 시각 디자이너에게 너무 많은 시간을 보낸다면, 당신은 이것을 감상할 수 없을 것이고, 어떤 사람들에게는 이것이 학습 곡선을 느리게 할 것입니다.
최근 Hansel Minutes 팟캐스트에서 관심을 가질 수 있습니다.
또한 Composite의 모든 부분을 구독하지 않더라도 View 및 View-Model의 개념을 일찍 배울 것을 강력히 권장합니다.WPF는 정말 도움이 됩니다.
Karsten Januszewski의 멋진 기사가 있습니다: Hiting the Curve: WPF and Productivity: 흥미로울 수 있습니다.
WPF에는 곡선이 있습니다.저는 이제 많은 개발자들이 그 곡선을 그리는 것을 보았습니다.그리고 그 곡선은 가파릅니다.우리는 개발자와 개발자의 경험/직감 수준에 따라 2주에서 2개월 사이의 곡선을 이야기하고 있습니다.완전한 신비의 순간들과 풍부한 조명의 순간들이 있을 것입니다.개발자가 깊고 잘 고안된 UI 플랫폼을 발견하는 것을 기뻐한다면, 그것은 동시에 고통스럽고 즐겁습니다.그것은 친숙하면서도 동시에 외계인입니다.다른 UI 개발 패러다임과 많은 유사점이 있습니다. 스타일은 CSS와 같은 느낌입니다. 뒤에 있는 XAML 코드는 ASP와 같은 느낌입니다.NET, 글쎄요. 3D는 DX나 OpenGL 같은 느낌이 듭니다.라우팅된 이벤트는 다음과 같습니다.NET 이벤트, 뭐 그런 거죠.종속 속성은 일종의 속성처럼 느껴집니다.목록은 계속될 수 있습니다.하지만 이러한 익숙한 은유들을 인정하면, 통제 템플릿, 스토리보드, 데이터 바인딩과 같은 많은 외계인 개념들이 즉시 떠오릅니다.이 곡선은 사소한 곡선이 아니며 1일차, 심지어 1주차, 심지어 1개월차에도 생산적일 것이라고 기대하지 않습니다.
그래도 다 그럴 가치가 있어요! ;)
WPF 학습의 어려움은 모델보다는 API입니다.Windows Forms(윈도우 폼)에서 사용하는 것과는 매우 다른 멘탈 모델입니다.
UI 요소를 필수적으로 채우는 방법을 쓰는 것이 아니라 일반적으로 데이터를 개체의 속성에 바인딩합니다.복잡한 행동을 하기 위해서는 일반적으로 어떤 수준의 구성을 사용합니다.
예를 들어 목록에 원하는 항목이 있는 경우 텍스트와 이미지가 차례로 표시됩니다.Windows 양식에서는 목록을 가져와 반복합니다.목록의 각 항목에 대해 항목과 텍스트에 대한 컨트롤을 만들고 그림을 추가한 다음 새 하위 컨트롤을 목록에 추가합니다.하나의 컨트롤 등을 만드는 대신 하위 항목을 추가할 수 있습니다.
WPF는 이 문제를 매우 다르게 처리할 것입니다.WPF에서는 최상위 수준에서 컨테이너 개체를 선언하고 목록에 바인딩합니다.
그런 다음 해당 컨테이너에 항목을 표시하는 데 사용할 템플릿을 제공합니다.템플릿은 기본적으로 목록이 채워지는 클래스의 인스턴스에서 바인딩된 하위 요소의 위치를 정의하는 또 다른 컨트롤입니다.
그것은 결국 매우 구성적인 느낌으로 끝나고, 터무니없이 강력합니다.또한 대부분의 개발자들이 익숙한 모델과는 매우 다른 모델이기 때문에 모델을 내부화할 수 있을 때까지 Windows Forms/등과 같은 방식으로 작업을 수행하는 데 문제가 발생하는 경우가 매우 흔합니다.
하지만 일단 모델에 익숙해지면 다른 API로 돌아가는 것은 고통스럽습니다.그들이 갑자기 어려워서가 아니라, 일이 얼마나 쉬울 수 있는지 알기 때문입니다.
제 질문 이력에서 유추할 수 있듯이, 저는 확실히 그것이 가파른 학습 곡선이라는 것을 알았습니다.당신은 제 경험을 거의 정확하게 묘사하고 있습니다.취미가 있는 응용 프로그램만을 위한 WPF 프로그래밍을 하는 정규 학생(소프트웨어 공학이 아닌 수학 및 물리학)으로서 다소 좌절감을 느껴왔습니다.저는 WPF에서 새로운 응용프로그램을 만들거나 이전 응용프로그램의 일부를 WPF로 포팅하려고 시도했지만, 항상 지나치게 어려워 보이는 작은 것에 집착했습니다.기본적으로 시간 문제 때문에 제가 하지 못한 한 가지 일은 책이나 일련의 튜토리얼과 함께 앉아서 차근차근 검토하는 것입니다.만약 당신이 전문 개발자라면, 그것은 훨씬 더 가능할 것이고 WPF를 훨씬 더 쉽게 만들 것입니다.
가장 큰 문제는 모델-뷰-뷰 모델 패러다임(예: 제 질문)을 이해하는 것이라고 생각합니다.WinForms에서는 폼에 몇 가지 항목을 드래그 앤 드롭하고, 속성을 엉망으로 만들고, 코드 뒤에 있는 이벤트를 연결할 수 있지만, 이제는 뷰, 모델 및 뷰 모델로 분할하는 것에 대해 생각해야 합니다.이벤트 뒤에 숨겨진 많은 코드는 검증 규칙이나 데이터 바인딩이 됩니다.제 애플리케이션 중 어떤 것도 실제로 "데이터 조작" 애플리케이션이 아니라는 것은 도움이 되지 않을 수도 있습니다. 즉, 고객 정보의 데이터베이스나 다른 데이터베이스를 조작하지 않습니다. 이러한 애플리케이션의 대부분은 타당합니다.대신 "사용자가 URI를 입력하는 텍스트 상자를 원하고, '다운로드'라고 표시된 버튼이 유효한 URI를 포함하는 경우에만 활성화되기를 원합니다."와 같은 작은 것들이 정말 복잡해지기 시작합니다. URI가 내 모델에서 어디에 들어맞는지, 내 모델에서 어디에 들어맞는지에 대해 생각해야 합니다.유효성 검사 프레임워크를 연결하고 버튼 및 텍스트 상자의 데이터 바인딩 속성을 이러한 모든 요소에 연결합니다.
또 다른 성가신 문제는 얼마나 많은 것들이 프레임워크에서 분명히 누락되었는지입니다.예를 들어 목록 보기를 정렬합니다.
그러나 결국 WPF는 많은 이점을 가지고 있습니다.레이아웃 프레임워크는 주로 픽셀 기반 WinForms 모델보다 훨씬 더 좋아 보입니다.그것은 세고 UI, heh :P와 같은 현대적인 글꼴을 사용합니다.그리고 그것의 합성 기능 또한 꽤 훌륭합니다. 예를 들어, 버튼에 이미지를 넣는 것이 얼마나 자연스러운가 (기본적으로 이미지 XAML 태그를 버튼 XAML 태그 안에 넣기만 하면 됩니다.);아직 시도하지는 않았지만, 내부에 컨트롤이 있는 체크박스에 대한 제 문제도 해결할 수 있을 것 같습니다.
저는 계속 가지고 놀고 있습니다.4년 이상 NET(대부분 윈도우즈 Forms 애플리케이션).바인딩은 알려지지 않은 것이 아니며 모든 C# 애플리케이션에서 모범 사례를 사용하려고 노력합니다.지난 한 달 동안, 저는 그 직업을 위해 WPF를 배워왔고 그것이 매우 강력하지만 일을 성취하는 것이 훨씬 어렵다는 것을 인정해야 합니다.적은 노력으로 훨씬 더 많은 작업을 수행하고 멋진 디자인을 달성할 수 있지만, 실제로 어떻게 작동하는지 알아야 합니다. 크기가 크기 때문에 어렵습니다.
게다가 디버깅은 더 어렵습니다. 따라서 학습 속도도 더 느려집니다.제가 생각하는 문제는 Visual Studio의 IDE가 XAML에서 별로 도움이 되지 않고 바인딩이나 XML 태그에 있는 다른 것들을 수행할 때 IntelliSense of C#의 일부 기능을 빠르게 놓치게 되는 것입니다.저는 좋아하지만 네, 학습 곡선이 매끄럽지 않습니다.
꽤 가파를 수 있습니다.
저는 한 달의 대부분을 WPF로 실험하고 현재 제품의 모형을 작성하는 데 보냈으며, 데이터 바인딩 모델에 대한 직관을 개발하거나 심지어 Microsoft가 WPF를 사용하는 데 어떤 의미가 있는지 파악하지도 못했습니다.ASP의 기초를 파악하는 데 걸리는 시간이 훨씬 짧았습니다.NET MVC.
[당사의 애플리케이션은 많은 실시간 데이터를 표시/의존하며, Nathan의 Windows Presentation Foundation 책을 사용했습니다.아마도 다른 책이 더 적절했을 것입니다.]
WPF는 작동 방식에 대한 일반적인 아이디어를 얻으면 쉽습니다. "WPF - 방법 및 이유"를 사용해 보십시오.가장 큰 문제는 Windows Forms와 약간의 그래픽으로 구현할 수 있는 응용 프로그램이 여전히 많이 있는지 여부를 해결하는 것입니다.
저는 또한 XAML에 들어가는 것에 대한 이전의 의견에 동의합니다 - 그것은 약간 더 정교한 HTML과 같고 유일한 진짜 어려움은 무엇을 하는지 알아내는 것입니다.프로젝트에서 나중에 꼼짝 못하게 되는 것에 대해서는 - 프로젝트에서 항상 나중에 꼼짝 못하게 되지 않습니까?그것은 당신이 1%를 하려고 노력하기 시작할 때입니다.
네, 그것은 쉬운 걸음이 아닙니다. 하지만 두려워하지 마세요.WPF에 관한 것은, 그것은 아름답게 설계되어 있어서 그것을 배울 때 지속적으로 긍정적인 감정 피드백을 받을 수 있습니다.당신은 앉아서 그것을 가지고 노는 것을 좋아하고 몇 분마다 "WOW"라고 외칩니다;)
그것은 '그것은 의존한다'는 대답 중 하나가 될 것입니다. 하지만 정말로 의존하는 것은 당신이 지속적으로 당신의 기술을 향상시키려고 노력하는 종류의 개발자인지 여부입니다.그렇다면 궁극적으로 몇 가지로 귀결됩니다.
WPF 언리쉬드(다른 책들은 이용 가능하지만 저는 전적으로 이 책을 추천합니다)를 구입하고, 예시를 살펴보고 약 2개월 안에 그것 없이 어떻게 일을 해냈는지 궁금할 것입니다.
그것은 로켓 과학이 아니며 다룰 패러다임 전환 개념이 없습니다.사실, 여러분이 논리와 발표 사이를 잘 구분하는 데 익숙하다면, 그것은 딱 들어맞을 것입니다.
숙달된 수준에 도달하기 위해서는 아마도 6개월에서 12개월 정도의 시간을 가지고 노는 것으로 보입니다.
행운을 빌어요.
제가 함께 일했던 몇 명의 사람들이 그것을 배워야 했기 때문에, 그들은 정말로 Expression Blend의 모든 튜토리얼을 살펴볼 것을 추천했습니다.이를 통해 WPF에 대한 좋은 배경 지식과 WPF를 사용할 때 더 나은 도구를 사용할 수 있게 되었습니다.
HTML 또는 XML 또는 유사한 기반 언어에 대한 경험이 있는 경우, 특히 웹 설계 경험이 있는 경우에는 매우 어렵지 않습니다.WinForms 배경을 엄격하게 사용하는 경우 학습 곡선이 약간 가파릅니다.저는 현재 WPF를 직접 배우고 있으며 광범위한 웹 개발 배경을 가지고 있기 때문에 대부분의 WPF 개념을 익히는 것이 그렇게 어렵지 않다고 생각합니다.저는 WindowsClient.net 의 온라인 튜토리얼 비디오가 다소 체계적이지 못하더라도 매우 유용하다는 것을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/1212245/how-bad-is-the-wpf-learning-curve
'programing' 카테고리의 다른 글
| Azure Function 구성에 APPINSIGHTS_INSTRINGKEY와 APPLICATIONINSIGHT_CONNECTION_STRING이 모두 필요한 이유는 무엇입니까? (0) | 2023.05.04 |
|---|---|
| 이클립스에서 안드로이드 앱의 아이콘을 변경하는 방법은 무엇입니까? (0) | 2023.04.29 |
| 절대적이지만 상위에 상대적인 위치 (0) | 2023.04.29 |
| 'Microsoft' 유형의 COM 개체를 캐스트할 수 없습니다.사무실. 인터럽트.Excel.ApplicationClass'에서 'Microsoft'로 이동합니다.사무실. 인터럽트.Excel.응용 프로그램' (0) | 2023.04.29 |
| 코드에서 WPF 레이블의 Style 속성을 설정하시겠습니까? (0) | 2023.04.29 |