MVVM ใน WPF ล้าสมัยหรือไม่ [ปิด]


18

ขณะนี้ฉันกำลังพยายามหา MVVM สำหรับ WPF - ไม่ได้หมายความว่าเอาหัวของฉันไปคิด แต่รอบ ๆ ถั่วและกลอนที่เกิดขึ้นจริงในการทำสิ่งใดก็ตาม

สิ่งที่ฉันสังเกตเห็นคือกรอบมากมายและส่วนใหญ่ / โพสต์บล็อกทั้งหมดมาจาก 'วัย' ที่ผ่านมา

นี่เป็นเพราะตอนนี้มันเป็นหมวกที่เก่าและนักเขียนบล็อกได้ย้ายไปสู่สิ่งที่ยิ่งใหญ่ต่อไปหรือเพียงเพราะพวกเขาได้พูดทุกอย่างที่จะพูด?

ในคำอื่น ๆ มีบางสิ่งที่ฉันหายไปที่นี่?


1
MVVM Frameworks สำหรับ WPF ได้รับการปรับปรุงอย่างต่อเนื่อง หัวข้อใหม่ร้อนการเขียนโปรแกรมปฏิกิริยา [google มัน!] สามารถใช้ได้เป็น MVVM ผ่านReactiveUI 3 ใน10 อันดับดาวน์โหลด wpf nugetคือเฟรมเวิร์ก MVVM: Prism.WPF, MvvmCross, Caliburn.Micro AFAIK สิ่งเหล่านี้ยังสนับสนุน Xamarin.Forms และ UWP ดังนั้นจะเกี่ยวข้องกับอีกหลายปีข้างหน้า
ToolmakerSteve

คำตอบ:


6

MVVM ไม่ล้าสมัย แต่มัน overplayed เริ่มต้นด้วย ฉันไม่เคยชอบมันและมันทำให้ฉันอยู่ใน WinForms นานเกินไป ฉันไม่เห็นป่าสำหรับต้นไม้ฉันโยนลูกน้อยออกไปพร้อมกับอาบน้ำ ตอนนี้ฉันได้ WPF มาแล้วและฉันไม่ได้คิดที่จะผสมโค้ดกับมาร์กอัป แต่ฉันชอบสไตล์ Android ในการผสานมาร์กอัปในที่เดียวและยกเลิกการลงมือด้วยการปลดเปลื้องในรหัสของฉัน (ซึ่งคุณสามารถทำได้ใน WPF แม้ว่ามันจะไม่ได้อินเทรนด์ที่จะทำเช่นนั้นด้วยเหตุผลใดก็ตาม)

ด้วยวิธีนี้คุณจะได้รับการควบคุมที่ละเอียดยิ่งขึ้นและไม่ต้องกังวลกับการจัดการ "ที่เปลี่ยนแปลง" ทุกที่ ฉันรู้สึกว่านี่เป็นจริงได้มากขึ้นเพราะการทดสอบจะไม่จับถ้าคุณพลาดเหตุการณ์ "เปลี่ยนแปลง"

คุณสูญเสียบิตของ "declarative" --ness ซึ่งดูเหมือนว่าเป็นแนวโน้มในวันนี้ (เช่นหากวิดเจ็ตสองรายการถูกแมปกับค่าเดียวกันใน MVVM คุณสามารถทำได้ในขณะที่โค้ดที่จำเป็นคุณต้องตั้งค่าทั้งสองอย่าง) . แต่ถึงแม้จะมี MVVM นั่นก็ใช้ได้กับกรณีที่ไม่เป็นทางการเท่านั้น หากวิดเจ็ตบางตัวต้องแสดงบันทึกของวิดเจ็ตอื่นคุณจะต้องเขียนตัวจัดการอื่นและเหตุการณ์ "onchanged" อีกอันและคุณจะต้องขยายนิยามของคำว่า "declarative" เพื่อบอกว่ามันเป็นเช่นนั้น

อัปเดตปี 2015

WPF MVVM เป็นวิวัฒนาการในเวลานั้น เช่นเดียวกับ WPF แต่พวกเขาทั้งคู่มีหูด WPF ธรรมดามีอยู่ภายในมากเกินไป (รวมถึงมันถูกสร้างบน XML) และเป็นความเจ็บปวดที่จะจัดการ (จริง ๆ แล้วถ้า WPF ใช้วิธี "ไลบรารี่" มากกว่าวิธี "เฟรมเวิร์ก" มันอาจกลายเป็นสิ่งที่เจ๋งจริงๆและจักรวาลเทคโนโลยีทั้งหมดอาจแตกต่างอย่างสิ้นเชิงตอนนี้) ความคิดของ MVVM เป็นดี แต่พยายามที่จะพอดีกับ MVVM เข้า WPF ค่อนข้าง hacky ตั้งแต่วันที่ 1) C # ไม่สามารถจริงๆแสดงมันไม่มากสำเร็จรูปและ 2) WinForms พระธาตุเช่นป๊อปอัปกิริยาก็ยังคงแพร่หลายอุดมการณ์ แต่ไม่สามารถ ถูกแสดงอย่างง่ายดายใน MVVM ดังนั้นมันจึงถูกดูดทั้งหมด

ดังกล่าวยังคงเป็นตัวเลือกที่เหมือนจริงบน Windows เมื่อคุณต้องการความโปร่งใสหรือ GPU สำหรับแอพ LOB

แน่นอนว่า React ทำให้ MVVM ล้าสมัยแล้ว ฉันผิดหวังที่ VS2015 ไม่มีเคาน์เตอร์แบบดั้งเดิม สำหรับตอนนี้เรายังคงใช้ WPF แบบดิบ (ซึ่งก็โอเค แต่ให้ความรู้สึกเก่า (ให้ความรู้สึกเหมือนเก่ากับ winforms ในขณะนี้) และไม่มีฟังก์ชั่นในตัวมากมาย (ให้ความรู้สึกเหมือนโครงการเจ๋ง ๆ หรือกับ -VVVM ซึ่ง ณ จุดนี้รู้สึกเหมือนไม่มีค่าใช้จ่ายมากนักเนื่องจากแม้แต่MVVM ที่ดี (เชิงมุม 1) ก็ยังมีข้อบกพร่องอยู่

ฉันจะหลีกเลี่ยง WPF MVVM มันเป็นเลเยอร์พิเศษและไม่มีใครสนใจอีกต่อไป


3
อืม .. ฉันรู้ว่าส่วนหนึ่งเป็นเรื่องของศาสนา แต่ฉันเริ่มด้วย MVVM ใน WPF โดยใช้ Cinch กลับมา .. 2010? และฉันชอบมันมาก ตั้งแต่นั้นมาฉันก็ย้ายไปที่ Caliburn.Micro และ Angular และยังคงรักมัน - เห็นได้ชัดว่ามีข้อบกพร่องมากมายใน MVVM อย่างที่คุณบอก MVVM อาจรู้สึกค่อนข้างละเอียด แต่ความสามารถในการอ่านโดยรวมและช่องว่างของการออกแบบ / การนำไปปฏิบัติที่ชัดเจนยังคงทำให้ฉันรู้สึกคุ้มค่า
cwap

4
"แน่นอนว่า React ทำให้ MVVM ล้าสมัย" - แต่อุตสาหกรรมส่วนใหญ่ใช้ Angular
Den

ทั้งหมดนี้มากเกินไปจนกว่าคุณจะตัดสินใจย้ายแอปเดสก์ท็อปของคุณไปยังเว็บและสิ่งที่คุณมีก็คือโค้ดที่ใช้ยึดติดกับการควบคุม WPF ทั้งหมด
CAD bloke

1
ดังนั้นไม่ตอบสนองและสภาพแวดล้อม JavaScript เป็น Angular หรือไม่ มันเกี่ยวข้องกับ WPF อย่างไร? หรือฉันกำลังคิดถึงบางสิ่งอยู่
Berin Loritsch

1
@BerinLoritsch - คุณไม่ได้พลาดอะไร ย่อหน้านั้นไม่เกี่ยวข้องกับคำถามและคำตอบนี้ เห็นได้ชัดว่า Dax ได้ "ย้ายที่" จาก WPF ไปยังการเขียนโปรแกรมเว็บ แอปเปิ้ลและส้ม
ToolmakerSteve

2

ทั้งหมดพูดและทำมีข้อ จำกัด ว่าคุณสามารถทำอะไรกับกรอบ MVVM

มันเป็น "เสร็จสิ้น" เนื่องจาก WPF ไม่ได้ย้ายไปตั้งแต่ Microsoft เปิดตัว หากมีการปรับปรุงเทคโนโลยีห้องสมุดจะต้องปรับปรุงด้วย สิ่งนี้ไม่ได้เกิดขึ้น


ดังนั้นมันเป็น WPF ที่ 'ล้าสมัย' หรือไม่? เกี่ยวกับประโยคแรกของคุณ: ใน UI ของชีวิตจริงและรหัสนั้นเกี่ยวพันกันเกินกว่าจะทำให้เป็นข้อเสนอที่เป็นจริงได้หรือไม่หรือการปรับแต่งบางอย่างใน WPF ทำให้ Holy Grail (หรือเกือบ)
Benjol

3
@Benjol - ดูเหมือนว่า Microsoft ละทิ้ง WPF (หรืออย่างน้อยก็ไม่มีการอัพเดตเทคโนโลยีอีกต่อไป) ประเด็นของฉันเกี่ยวกับกรอบ MVVM ก็คือจุดประสงค์ของพวกเขามีเพียงเล็กน้อยที่จะดำเนินการต่อและขยายพวกเขาบนแพลตฟอร์มค้าง ฉันไม่รู้ว่าทำไม Microsoft หยุดอัปเดต WPF แต่ฉันสงสัยว่าเป็นสิ่งที่คุณแนะนำ - มีโอกาสมากขึ้นที่ Windows 8 และ RT จะเอาทรัพยากรออกไปจาก WPF
Oded

18
นี่ไม่เป็นความจริง. WPF ได้รับการอัปเดตหลายครั้งล่าสุดใน NET 4.5: msdn.microsoft.com/en-us/library/bb613588.aspx
17 จาก 26

3
นอกจากนี้ยังเป็นที่น่าสังเกตว่า MS สนับสนุนเทคโนโลยีสำหรับนักพัฒนาของพวกเขาตลอดไป MFC วางจำหน่ายในปี 1992 ยังคงได้รับการแก้ไขข้อบกพร่องกับแต่ละรุ่น / service pack ของ Visual Studio
17 ของ 26

5
ฉันยังไปไกลเท่าที่อ้างว่าการขาดการเพิ่มล่าสุดไปยัง WPF เป็นตัวบ่งชี้ถึงความสมบูรณ์ นอกจากนี้เมื่อ @Oded แตะต้องแอพเดสก์ท็อปในขณะที่ยังมีคุณค่าอยู่ตอนนี้จะถูกแทนที่ด้วยแอพมือถือ ถึงกระนั้นก็เป็นที่น่ากล่าวถึงว่าส่วนใหญ่ของ WPF เริ่มต้น (การเขียนโปรแกรม UI ที่เปิดเผย, MVVM, DependencyProperties และ Data Binding) ตอนนี้อาศัยอยู่ในเทคโนโลยี WinRT และเว็บ (เฟรมเวิร์ก JS หลายเฟรม) นี่คือค่านิยมหลักที่ทำให้ฟิลด์นี้ก้าวหน้าอย่างมีนัยสำคัญและฉันเชื่อว่าพวกเขาจะทำเช่นนี้ต่อไปเป็นเวลานาน
เซบาสเตียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.