ข้อจำกัดความรับผิดชอบ: นี่เป็นบทความแรกในชุดที่จะอธิบายการทอผ้าใน .net บทความนี้มีไว้สำหรับผู้ที่รู้ ศูนย์ เกี่ยวกับหัวข้อนี้และต้องการเริ่มบริโภคเครื่องทอผ้า ดังนั้น ข้ามไปได้เลยหากคุณรู้พื้นฐานอยู่แล้ว (หรืออาจอ่านเพื่อเรียนรู้สิ่งใหม่ๆ) หากภาษาอังกฤษไม่ใช่ภาษาอังกฤษของคุณ คุณสามารถใช้งานเวอร์ชัน "ในภาษาโปรตุเกส" ได้ที่นี่

พบบทความที่สองในชุดนี้ ที่นี่

บทนำ 🎉

ฉันเริ่มซีรีส์นี้ด้วยเหตุผลสองประการ เหตุผลหนึ่งคือเพราะการเขียนเกี่ยวกับวิชาที่ฉันกำลังศึกษาอยู่ช่วยให้ฉันเรียนรู้ได้ดีขึ้นมาก ประการที่สอง ซึ่งอาจเป็นเหตุผลที่สำคัญที่สุดก็คือเนื่องจากมีบทความเกี่ยวกับหัวข้อนี้น้อยมาก สิ่งที่มีอยู่นั้นไม่ได้อธิบายขั้นตอนที่ต้องเข้าใจช่างทออย่างถี่ถ้วนนัก ฉันอยู่นี่แล้ว กำลังพยายามเติมเต็มช่องว่างเหล่านั้น

ไม่ว่าคุณจะเคยได้ยินเรื่องการทอผ้ามาก่อนหรือไม่ก็ตาม บทความนี้เขียนขึ้นภายใต้สมมติฐานที่ว่าคุณรู้เรื่องนี้เป็นศูนย์จริงๆ ฉันเพียงขอให้คุณรู้จัก C# บ้างและเต็มใจที่จะลองสิ่งใหม่ๆ ที่นี่คุณจะได้เรียนรู้พื้นฐานเกี่ยวกับวิธีใช้ช่างทอผ้า แต่ในตอนท้ายของซีรีส์นี้ เราจะเขียนช่างทอผ้าของเราเองและดูไฟล์ .dll

ทอผ้า? 🤔

การทอผ้าเป็นแนวคิดที่ทำให้ผู้คนหวาดกลัว เป็นการดำเนินการจัดการไฟล์ .dll ที่คอมไพล์แล้วและใส่คำแนะนำเพิ่มเติมลงไป สามารถใช้สิ่งนี้ได้ เช่น เพื่อลดปริมาณสำเร็จรูปในโค้ดเบสของคุณ โดยให้คอมพิวเตอร์ทำงานซ้ำๆ แทนที่จะให้มนุษย์ทำ ซึ่งทำให้เกิดการคัดลอกและวางข้อผิดพลาด® อย่างหลีกเลี่ยงไม่ได้

เหตุผลที่การทอผ้าทำให้ผู้คนกลัวก็เพราะว่าการยุ่งกับ .dllให้ความรู้สึกเหมือนกับการพูดว่า 'เฮ้ ฉันรู้จัก IL มากกว่าทีม Roslyn' ซึ่งเป็นข้อความที่แทบจะทุกครั้ง เท็จ (Jon Skeet เป็นข้อยกเว้นที่ชัดเจนประการหนึ่ง) ฉันได้รับข้อกังวลนี้ (ฉันรู้สึกอย่างนั้นในตอนแรก) แต่ถึงแม้แนวทางนี้จะดูเปราะบางและแนวคิดเองก็อาจฟังดูต้องใช้ความพยายามมากเกินไป แต่สถานะปัจจุบันของเครื่องมือสำหรับช่างทอผ้านั้นดีและใช้งานง่ายจนคุณจะไม่เสียใจเลย ใช้มันก่อน!

เพียงเพื่อพิสูจน์ความมุ่งมั่นของฉันที่มีต่อช่างทอผ้า ในช่วง 3 ปีที่ผ่านมา ฉันจำไม่ได้ว่าได้ส่งแอปพลิเคชันที่ไม่ได้ใช้แอปพลิเคชันเหล่านั้นมาด้วย (แอปพลิเคชันที่ฉันกำลังดำเนินการอยู่คือแอปมือถือของ Toggl ซึ่ง เป็น OSS และสามารถพบได้ ที่นี่) Weavers ยังใช้โดย Realm ซึ่งเป็นฐานข้อมูลแรกบนมือถือ เพื่อฉีดการเรียกเนทิฟไปยังโค้ด C++ ในทุกคุณสมบัติของคลาสที่สืบทอดมาจาก RealmObject

แล้วฉันจะเริ่มต้นอย่างไร‍? 🤓

การใช้งานแบบทอที่พบบ่อยที่สุดคือการถอด INotifyPropertyChangeboilerplate ออก เมื่อใช้อินเทอร์เฟซนี้ คุณต้องแน่ใจว่าคุณสมบัติแต่ละรายการของคุณ:

  • มีการเปรียบเทียบความเท่าเทียมกันบ้าง
  • คืนทุนก่อนกำหนดหากค่าไม่เปลี่ยนแปลง
  • ตั้งค่าของฟิลด์สำรอง
  • แจ้งว่าทรัพย์สินมีการเปลี่ยนแปลง

ซึ่งหมายความว่าคุณไม่สามารถใช้คุณสมบัติอัตโนมัติ คุณลักษณะ C# ที่ไม่จำเป็นต้องจัดการฟิลด์สำรอง และคุณสมบัติของคุณจะมีลักษณะดังนี้:

รหัส 11 บรรทัดสำหรับแต่ละคุณสมบัติ? ไม่🙅

ทอผ้าเพื่อช่วยชีวิต ⛑

ดังนั้นเราจึงระบุงานที่ทั้งเกิดซ้ำและน่าเบื่อ โค้ดจะเหมือนกันมาก และเราจะจับได้ว่าคัดลอก/วางโค้ดนี้บ่อยกว่าปกติ เราควรทำอย่างไรต่อไป? ใช้ช่างทอผ้า!

ด้วยเหตุนี้ เราจะใช้ "Fody" เป็นเครื่องมือที่ทำหน้าที่ประปาทั้งหมดที่จำเป็นในระหว่างขั้นตอนการสร้าง ดังนั้นเราจึงไม่ต้องจัดการกับ MSBuild ด้วยตัวเอง จำตอนที่ฉันบอกว่าการทอผ้าเป็นเรื่องง่ายๆ ได้ไหม? นั่นเป็นเพราะว่าโฟดี้คอยสนับสนุนคุณ

อย่างไรก็ตาม Fody ไม่ได้ทำอะไรเลยด้วยตัวมันเอง เป็นเพียงช่องทางให้เราใช้ Add-in เท่านั้น ต่อไปในซีรีส์นี้ เราจะมาดูกันว่าเราจะสร้าง Add-in ของเราเองได้อย่างไร แต่สำหรับตอนนี้ เราจะลองใช้ปลั๊กอิน PropertyChanged ที่ผ่านการทดสอบมาอย่างดีและใช้กันอย่างแพร่หลาย

เนื่องจาก Fody ใช้ MSBuild จึงทำงานบน Visual Studio สำหรับทั้ง Windows และ Mac สิ่งที่คุณต้องทำคือติดตั้งแพ็คเกจ NuGet PropertyChanged.Fody มันจะเพิ่มแพ็คเกจ Fody เป็นการพึ่งพาและเพิ่มไฟล์ FodyWeavers.xml ให้กับโปรเจ็กต์ของคุณ เปิดไฟล์นี้และตรวจสอบให้แน่ใจว่ามีชื่อของปลั๊กอินที่คุณต้องการใช้ ดังนี้:

เอาล่ะ! คุณเพียงแค่ติดตั้งแพ็คเกจ NuGet และตรวจสอบว่าไฟล์ XML มีคำอยู่ในนั้น และในทางกลับกัน ViewModel 11-loc-per-property ของคุณตอนนี้จะเป็นดังนี้:

ค่อนข้างเรียบร้อยใช่มั้ย?

มันดูดี แต่มันได้ผลเหรอ? 😢

ตามที่ระบุไว้ก่อนหน้านี้ การทอผ้าเป็นเทคนิคที่ใช้กันอย่างแพร่หลายในหมู่นักพัฒนา .NET แพ็คเกจ PropertyChanged มีการดาวน์โหลดเกือบครึ่งล้านครั้ง และ Realm (ซึ่งต้องใช้ Fody ด้วย) มียอดดาวน์โหลดเกือบ 100,000 ครั้ง

หากสถิติการใช้งานและบริษัทที่ใช้ Fody ไม่เพียงพอที่จะเปลี่ยนความสงสัยของคุณเกี่ยวกับการทอผ้า โปรดติดตามบทความสองบทความถัดไป ซึ่งเราจะเจาะลึกลงไปถึงลักษณะของ CIL และวิธีที่คุณสามารถจัดการกับ dll ที่คอมไพล์แล้วเพื่อทำสิ่งที่คุณต้องการได้เช่นกัน

ในระหว่างนี้ สำรวจ Fody ด้วยตัวเอง! ติดตั้ง PropertyChanged.Fody ในโปรเจ็กต์ทดสอบ อ่าน เอกสารของมัน ตรวจสอบ ปลั๊กอินอื่น ๆ และอย่าลังเลที่จะติดต่อเรา บน Twitter หากคุณต้องการความช่วยเหลือใดๆ!