ฉันเคยเริ่มโครงการ MVVM / WPF ซึ่งสร้างและปรับใช้ในที่สุดและเพื่อที่ฉันศึกษา Caliburn.Micro MVVM Framework จำนวนมาก ความจริงก็คือ: ฉันลงเอยด้วยการไม่ใช้ Caliburn.Micro สำหรับสิ่งนั้นและลงเอยด้วยการนำแนวคิด MVVM มาใช้ด้วยตัวเอง (โดยเฉพาะแค่ViewModelBase
และRoutedCommand
คลาส)
ตอนนี้ฉันได้รับมอบหมายให้ทำโครงการขนาดใหญ่กว่าในบรรทัดเดียวกัน: "แอปพลิเคชันเดสก์ท็อปออฟไลน์ไคลเอนต์สำหรับผู้ใช้ที่มีผู้ใช้หลายคน" ดังนั้นจะพูดและฉันตัดสินใจใช้ Caliburn.Micro และนั่นคือสิ่งที่ "ปัญหา" ของฉันเริ่มต้นขึ้น
ฉันได้อ่านในโพสต์บล็อกที่มีชื่อเสียงชื่อเรื่องว่า "ถ้าคุณใช้ MVVM คุณต้องมีกรอบ" นั่น:
"พยายามที่จะทำสิ่งที่ต้องการโดยไม่ต้อง MVVM กรอบเป็นจำนวนมากของการทำงาน. ตันของรหัสที่ซ้ำกัน reinventing ล้อและฝึกอบรมคนที่จะคิดแตกต่างกัน
อย่างน้อยด้วยเฟรมเวิร์กที่คุณหลีกเลี่ยงรหัสที่ซ้ำกันและหวังว่าจะไม่ต้องบูรณาการล้อ - ช่วยให้คุณสามารถมุ่งเน้นไปที่การฝึกอบรมผู้คน ส่วนการอบรมขึ้นใหม่นั้นไม่สามารถหลีกเลี่ยงได้โดยทั่วไป แต่เฟรมเวิร์กจัดเตรียมรหัสการประปาและโครงสร้างทำให้กระบวนการง่ายขึ้น "
ฉันจะเห็นด้วยกับการอ่านครั้งแรก แต่ประสบการณ์จริงของฉันกับ Caliburn.Micro (CM) ในแอปพลิเคชันจริงของฉันคือการ cluelessness และ disorientation นั่นคือกรอบงานไม่ได้ทำให้กระบวนการง่ายขึ้นเลยตรงกันข้าม อ่านตัวอย่างที่เคยทำซ้ำให้โดยร็อบไอเซนเบิร์กในเอกสารค่อนข้าง (เกินไป) อย่างไม่เป็นทางการและพยายามที่จะรูปแบบการใช้สรุปจากตัวอย่างที่ซับซ้อนให้และการเรียนและอินเตอร์เฟซทางอ้อมอย่างเต็มที่ความสัมพันธ์ของพวกเขาสิ่งที่ดูเหมือนจะถูกออกแบบมาเพื่อการทำงานตามบน ผลข้างเคียงดูเหมือนเป็นไปไม่ได้อย่างมนุษย์ปุถุชนถ้าคุณไม่ได้เป็นอัจฉริยะตามฤดูกาล (ขออภัยในความโวยวาย แต่ฉันคิดว่าคุณรู้ว่าฉันหมายถึงอะไร)
ไม่พูดถึงว่าใด ๆ ดังกล่าวข้างต้นน่ารำคาญสถานการณ์ดูเหมือนจะเกี่ยวข้องกับภาชนะ IoC ซึ่งเป็นสิ่งที่ผมไม่เคยทำงานร่วมกับและที่ดูเหมือนจะแก้ปัญหาผมอาจจะไม่ได้มี ฉันไม่รู้สึกอยากใช้เวลาโครงการมากขึ้นในการเรียนรู้สิ่งเหล่านั้นแทนที่จะคิดถึงปัญหาและโดเมนแอปพลิเคชัน ฉันแค่อยากได้กล้วย แต่ CM ให้กอริลลา (IoC) กับฉันถือตะกร้ากล้วย
ตอนนี้ฉันกำลังพิจารณาที่จะย้ายกลับไปที่กรอบ MVVM ที่บ้านของฉัน - ประกอบด้วยคลาสเรียนเฉพาะ MVVM จำนวนหนึ่งที่ฉันต้องการนำไปใช้จริง - อย่างน้อยฉันก็อยากให้โอกาสกับ CM ในกรณีที่ฉันทำอะไรบางอย่างที่นี่หรือ เพียงแค่ทำสิ่งต่าง ๆ อย่าง "ผิดทาง" จากความไม่รู้และความไม่รู้ที่แท้จริง ดังนั้นคำถามคือ:
มีมติอย่างกว้างขวางว่า "กรอบการทำงานทำให้สิ่งต่าง ๆ ง่ายขึ้นและเป็นธรรมชาติมากขึ้น" แต่ถ้าฉันบังเอิญพบสิ่งที่ตรงกันข้ามสิ่งนี้หมายความว่าฉันไม่ควรใช้กรอบงานหรือว่าฉันกำลังพยายามเรียนรู้วิธีที่ผิด? มีเงื่อนงำที่ฉันไม่ควรแม้แต่จะใช้เฟรมเวิร์กในตอนแรกหรือไม่? หรือมีวิธีที่ "ถูกต้อง" ในการหาวิธีการใช้ CM สำหรับการพัฒนา MVVM อย่างง่าย?
RelayCommand
ใช้งานได้ (เพราะมัน "ผูก" กับวิธีโดยตรงโดยวิธีการประชุมแทนที่จะผูกพันกับคุณสมบัติ ICommand)
RelayCommand
จากไลบรารีอื่นถ้าสิ่งที่ Caliburn Micro ใช้ไม่ได้ผลสำหรับคุณ
EventAggregator
สำหรับการส่งข้อความและNotificationObject
สำหรับ ViewModelBase และ MVVM LightRelayCommand
สำหรับคำสั่ง สิ่งสำคัญคือการระบุปัญหาที่กรอบจะแก้ให้คุณและใช้วิธีแก้ปัญหาเหล่านั้นเท่านั้น อย่ารู้สึกว่าคุณถูกบังคับให้ใช้ไลบรารีเฟรมเวิร์กทั้งหมด