โปรเจ็กต์ที่มีโมดูล Gradle หลายรายการเรียกว่าโปรเจ็กต์แบบหลายโมดูล คู่มือนี้ครอบคลุมแนวทางปฏิบัติแนะนำและรูปแบบที่แนะนำสำหรับการพัฒนาแอป Android แบบหลายโมดูล
ในระดับพื้นฐานปัญหาฐานโค้ดที่เพิ่มขึ้น
ในโค้ดเบสที่มีขนาดใหญ่ขึ้นเรื่อยๆ ความสามารถในการปรับขนาด ความอ่านง่าย และคุณภาพโค้ดโดยรวมมักจะลดลงเมื่อเวลาผ่านไป ปัญหานี้เกิดขึ้นเนื่องจากโค้ดเบสมีขนาดใหญ่ขึ้นเรื่อยๆ โดยที่ผู้ดูแลไม่ได้ใช้มาตรการที่มีประสิทธิภาพเพื่อบังคับใช้โครงสร้างที่ดูแลรักษาได้ง่าย การจัดโมดูลเป็นวิธีจัดโครงสร้างฐานโค้ดในลักษณะที่ปรับปรุงความสามารถในการบำรุงรักษาและช่วยหลีกเลี่ยงปัญหาเหล่านี้
การแยกส่วนคืออะไร
การแยกโมดูลเป็นแนวทางการจัดระเบียบโค้ดเบสออกเป็นส่วนที่เชื่อมโยงกันแบบหลวมๆ และเป็นส่วนที่มีการทำงานเป็นอิสระ แต่ละส่วนคือโมดูล แต่ละข้อบังคับจะแยกกันและมีวัตถุประสงค์ที่ชัดเจน การแบ่งปัญหาออกเป็นโจทย์ย่อยที่เล็กลงและแก้ได้ง่ายขึ้นจะช่วยลดความซับซ้อนของการออกแบบและการดูแลรักษาระบบขนาดใหญ่
![](https://developer.android.google.cn/static/topic/modularization/images/1_sample_dep_graph.png?authuser=002&hl=th)
ประโยชน์ของการแยกโมดูล
ประโยชน์ของการจัดโมดูลมีมากมาย แต่ประโยชน์แต่ละอย่างมุ่งเน้นที่การปรับปรุงความสามารถในการบำรุงรักษาและคุณภาพโดยรวมของโค้ดเบส ตารางด้านล่างจะสรุปข้อดีที่สําคัญ
สิทธิประโยชน์ | สรุป |
---|---|
การนำกลับมาใช้ใหม่ได้ | การจัดโมดูลช่วยให้สามารถแชร์โค้ดและสร้างแอปหลายแอปจากรากฐานเดียวกัน โมดูลเป็นองค์ประกอบพื้นฐานที่มีประสิทธิภาพ แอปควรเป็นชุดฟีเจอร์ที่จัดระเบียบเป็นโมดูลแยกกัน ฟังก์ชันการทำงานของโมดูลหนึ่งๆ อาจเปิดหรือปิดใช้ในแอปหนึ่งๆ ก็ได้ เช่น :feature:news อาจเป็นส่วนหนึ่งของตัวแปรเวอร์ชันเต็มและแอป Wear แต่ไม่ได้เป็นส่วนหนึ่งของตัวแปรเวอร์ชันเดโม |
การควบคุมระดับการมองเห็นอย่างเข้มงวด | โมดูลช่วยให้คุณควบคุมสิ่งที่เปิดเผยต่อส่วนอื่นๆ ของโค้ดเบสได้อย่างง่ายดาย คุณสามารถทําเครื่องหมายทุกอย่างยกเว้นอินเทอร์เฟซสาธารณะเป็น internal หรือ private เพื่อไม่ให้มีการใช้ภายนอกโมดูล |
การแสดงโฆษณาที่ปรับแต่งได้ | การนำส่งฟีเจอร์ Play ใช้ความสามารถขั้นสูงของ App Bundle ซึ่งช่วยให้คุณนำส่งฟีเจอร์บางอย่างของแอปแบบมีเงื่อนไขหรือตามคำขอได้ |
ประโยชน์ข้างต้นจะบรรลุได้ก็ต่อเมื่อมีโค้ดฐานแบบโมดูลเท่านั้น ประโยชน์ต่อไปนี้อาจทำได้ด้วยเทคนิคอื่นๆ แต่การแยกโมดูลจะช่วยคุณบังคับใช้ประโยชน์เหล่านั้นได้มากขึ้น
สิทธิประโยชน์ | สรุป |
---|---|
ความสามารถในการยืดหยุ่น | ในโค้ดฐานที่เชื่อมโยงกันอย่างแน่นหนา การเปลี่ยนแปลงเพียงครั้งเดียวอาจทริกเกอร์การเปลี่ยนแปลงที่ตามมาในโค้ดส่วนต่างๆ ที่ดูเหมือนจะไม่เกี่ยวข้อง โปรเจ็กต์ที่แยกโมดูลอย่างเหมาะสมจะเป็นไปตามหลักการการแยกข้อกังวล จึงจำกัดการเชื่อมโยง ซึ่งช่วยให้ผู้มีส่วนร่วมมีอำนาจมากขึ้น |
การเป็นเจ้าของ | นอกจากช่วยให้มีอิสระแล้ว โมดูลยังใช้เพื่อบังคับใช้ความรับผิดชอบได้ด้วย โมดูลอาจมีเจ้าของเฉพาะที่รับผิดชอบในการดูแลรักษาโค้ด แก้ไขข้อบกพร่อง เพิ่มการทดสอบ และตรวจสอบการเปลี่ยนแปลง |
การห่อหุ้มข้อมูล | การรวมช่องสัญญาณหมายความว่าแต่ละส่วนของโค้ดควรมีข้อมูลเกี่ยวกับส่วนอื่นๆ น้อยที่สุด โค้ดที่แยกต่างหากจะอ่านและทำความเข้าใจได้ง่ายขึ้น |
ความสามารถในการทดสอบ | ความสามารถในการทดสอบแสดงถึงระดับความง่ายในการทดสอบโค้ด โค้ดที่ทดสอบได้คือโค้ดที่ทดสอบองค์ประกอบแยกกันได้ง่ายๆ |
เวลาบิลด์ | ฟังก์ชันบางอย่างของ Gradle เช่น การสร้างแบบเพิ่ม แคชการสร้าง หรือการสร้างแบบขนาน สามารถใช้ความเป็นโมดูลเพื่อปรับปรุงประสิทธิภาพการสร้างได้ |
ปัญหาที่พบได้ทั่วไป
ความละเอียดของโค้ดเบสคือระดับที่ประกอบด้วยข้อบังคับ โค้ดเบสที่ละเอียดยิ่งขึ้นจะมีโมดูลขนาดเล็กจำนวนมากขึ้น เมื่อออกแบบโค้ดเบสแบบโมดูล คุณควรเลือกระดับรายละเอียด โดยพิจารณาจากขนาดของฐานโค้ดและความซับซ้อนที่เกี่ยวข้อง การแยกย่อยมากเกินไปจะทำให้มีค่าใช้จ่ายเพิ่มเติม และการจัดกลุ่มที่รวมมากเกินไปจะลดประโยชน์ของการแยกโมดูล
ข้อผิดพลาดที่พบบ่อยมีดังนี้
- มีความละเอียดมากเกินไป: โมดูลแต่ละรายการจะเพิ่มค่าใช้จ่ายบางส่วนในรูปแบบของความซับซ้อนของการสร้างที่เพิ่มขึ้นและโค้ดที่ซ้ำกัน การกําหนดค่าบิลด์ที่ซับซ้อนทําให้การกําหนดค่าสอดคล้องกันในโมดูลต่างๆ เป็นเรื่องยาก โค้ดที่ต้องเขียนซ้ำมากเกินไปส่งผลให้โค้ดเบสมีความซับซ้อนและดูแลรักษาได้ยาก หากค่าใช้จ่ายเพิ่มเติมขัดขวางการปรับปรุงความสามารถในการปรับขนาด คุณควรพิจารณารวมโมดูลบางรายการเข้าด้วยกัน
- มีความละเอียดหยาบเกินไป: ในทางกลับกัน หากโมดูลมีขนาดใหญ่เกินไป คุณอาจได้โมโนลิทอีกรายการหนึ่งและพลาดประโยชน์ที่การแยกโมดูลมีให้ เช่น ในโปรเจ็กต์ขนาดเล็ก คุณวางเลเยอร์ข้อมูลไว้ในโมดูลเดียวได้ แต่เมื่อเวลาผ่านไป คุณอาจต้องแยกที่เก็บและแหล่งข้อมูลออกเป็นโมดูลแบบสแตนด์อโลน
- ซับซ้อนเกินไป: การทำโปรเจ็กต์เป็นแบบโมดูลนั้นไม่เหมาะเสมอไป ปัจจัยที่โดดเด่นคือขนาดของโค้ดเบส หากคุณไม่คาดว่าโปรเจ็กต์จะเติบโตเกินเกณฑ์ที่กำหนด คุณจะไม่ได้รับประโยชน์ด้านความสามารถในการปรับขนาดและเวลาในการสร้าง
การจัดโมดูลเป็นเทคนิคที่เหมาะกับฉันไหม
หากต้องการใช้ประโยชน์จากความสามารถในการนํามาใช้ซ้ำ การควบคุมระดับการเข้าถึงที่เข้มงวด หรือต้องการใช้การนำส่งฟีเจอร์ Play คุณก็ควรแยกแอปเป็นโมดูล หากไม่ได้ใช้ แต่ยังคงต้องการรับประโยชน์จากความสามารถในการปรับขนาด การเป็นเจ้าของ การรวม หรือเวลาสร้างที่ดีขึ้น ก็ควรพิจารณาการใช้การแยกโมดูล
ตัวอย่าง
- พร้อมใช้งานใน Android แล้ว - แอป Android ที่ทำงานได้อย่างเต็มรูปแบบพร้อมการแยกส่วน
- ตัวอย่างสถาปัตยกรรมแบบหลายโมดูล