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

ประโยชน์ของการแยกส่วน
การแยกส่วนมีประโยชน์มากมาย แม้ว่าแต่ละส่วนจะมุ่งเน้นไปที่การปรับปรุง ความสามารถในการบำรุงรักษาและคุณภาพโดยรวมของโค้ดเบส ตารางต่อไปนี้ สรุปประโยชน์หลัก
ประโยชน์ | สรุป |
---|---|
การนำกลับมาใช้ใหม่ | การแยกส่วนช่วยให้มีโอกาสในการแชร์โค้ดและสร้างแอปหลายแอปจากรากฐานเดียวกัน ซึ่งโมดูลก็คือองค์ประกอบพื้นฐาน แอปควรเป็นผลรวมของฟีเจอร์ต่างๆ โดยฟีเจอร์จะจัดระเบียบเป็นโมดูลแยกกัน ฟังก์ชันการทำงานที่โมดูลหนึ่งๆ มีให้อาจเปิดใช้หรือไม่เปิดใช้ในแอปหนึ่งๆ ก็ได้ เช่น :feature:news อาจเป็นส่วนหนึ่งของเวอร์ชันเต็มและแอป Wear แต่ไม่ใช่ส่วนหนึ่งของเวอร์ชันเดโม |
การควบคุมระดับการเข้าถึงอย่างเข้มงวด | โมดูลช่วยให้คุณควบคุมสิ่งที่แสดงต่อส่วนอื่นๆ ของโค้ดเบสได้อย่างง่ายดาย คุณสามารถทำเครื่องหมายทุกอย่างยกเว้นอินเทอร์เฟซสาธารณะเป็น internal หรือ private เพื่อป้องกันไม่ให้มีการใช้อินเทอร์เฟซดังกล่าวภายนอกโมดูล |
การนำส่งที่ปรับแต่งได้ | การนำส่งฟีเจอร์ Play ใช้ความสามารถขั้นสูงของ App Bundle ซึ่งช่วยให้คุณนำส่งฟีเจอร์บางอย่างของแอปแบบมีเงื่อนไขหรือตามคำขอได้ |
ประโยชน์ของการแยกส่วนจะเกิดขึ้นได้ก็ต่อเมื่อมีโค้ดเบสแบบแยกส่วนเท่านั้น คุณอาจได้รับประโยชน์ต่อไปนี้ด้วยเทคนิคอื่นๆ แต่การแยกส่วนจะช่วยให้คุณบังคับใช้ประโยชน์เหล่านี้ได้มากยิ่งขึ้น
ประโยชน์ | สรุป |
---|---|
ความสามารถในการยืดหยุ่น | ในโค้ดเบสที่มีการเชื่อมโยงกันอย่างแน่นหนา การเปลี่ยนแปลงเพียงครั้งเดียวอาจทำให้เกิดการเปลี่ยนแปลงในส่วนต่างๆ ของโค้ดที่ดูเหมือนจะไม่เกี่ยวข้อง โปรเจ็กต์ที่แยกส่วนอย่างเหมาะสมจะยึดหลักการแยกความกังวลและจำกัดการเชื่อมโยง ซึ่งช่วยให้ผู้ร่วมให้ข้อมูลมีอิสระมากขึ้น |
การเป็นเจ้าของ | นอกจากจะช่วยให้มีความเป็นอิสระแล้ว โมดูลยังใช้เพื่อบังคับใช้ความรับผิดได้ด้วย โมดูลอาจมีเจ้าของเฉพาะที่รับผิดชอบในการดูแลโค้ด แก้ไขข้อบกพร่อง เพิ่มการทดสอบ และตรวจสอบการเปลี่ยนแปลง |
การห่อหุ้ม | การห่อหุ้มหมายความว่าโค้ดแต่ละส่วนควรมีความรู้เกี่ยวกับส่วนอื่นๆ น้อยที่สุดเท่าที่จะเป็นไปได้ โค้ดที่แยกออกมาจะอ่านและทำความเข้าใจได้ง่ายกว่า |
ความสามารถในการทดสอบ | ความสามารถในการทดสอบจะระบุว่าทดสอบโค้ดได้ง่ายเพียงใด โค้ดเบสที่ทดสอบได้คือโค้ดเบสที่ทดสอบคอมโพเนนต์แยกกันได้อย่างง่ายดาย |
เวลาที่บิลด์ใช้ | ฟังก์ชันการทำงานบางอย่างของ Gradle เช่น การสร้างแบบเพิ่ม การแคชบิลด์ หรือการสร้างแบบขนาน สามารถใช้ประโยชน์จากความสามารถในการแยกส่วนเพื่อปรับปรุงประสิทธิภาพการสร้างได้ |
ข้อผิดพลาดที่พบบ่อย
ระดับความละเอียดของโค้ดเบสคือขอบเขตที่ประกอบด้วยโมดูล โค้ดเบสที่มีรายละเอียดมากขึ้นจะมีโมดูลขนาดเล็กจำนวนมาก เมื่อออกแบบโค้ดเบสแบบแยกส่วน คุณควรเลือกระดับของรายละเอียด โดยพิจารณาถึงขนาดของโค้ดเบสและความซับซ้อนที่เกี่ยวข้อง การแบ่งย่อยมากเกินไปจะทำให้ค่าใช้จ่ายเพิ่มเติมเป็นภาระ และการแบ่งย่อยหยาบเกินไปจะลดประโยชน์ของการแยกส่วน
ข้อผิดพลาดที่พบบ่อยมีดังนี้
- ละเอียดเกินไป: ทุกโมดูลจะทำให้เกิดค่าใช้จ่ายบางอย่างในรูปแบบของความซับซ้อนในการสร้างที่เพิ่มขึ้นและโค้ดสำเร็จรูป การกำหนดค่าบิลด์ที่ซับซ้อนทำให้การกำหนดค่าในโมดูลต่างๆ สอดคล้องกันเป็นเรื่องยาก โค้ด Boilerplate มากเกินไป ส่งผลให้โค้ดเบสซับซ้อนและดูแลรักษายาก หากค่าใช้จ่ายเพิ่มเติม ขัดขวางการปรับปรุงความสามารถในการปรับขนาด คุณควรพิจารณารวมโมดูลบางโมดูล
- ละเอียดเกินไป: ในทางกลับกัน หากโมดูลมีขนาดใหญ่เกินไป คุณอาจลงเอยด้วยโมโนลิธอีกรายการหนึ่งและพลาดประโยชน์ที่การแยกส่วนมีให้ เช่น ในโปรเจ็กต์ขนาดเล็ก คุณสามารถวางเลเยอร์ข้อมูล ไว้ในโมดูลเดียวได้ แต่เมื่อแอปเติบโตขึ้น คุณอาจต้องแยก ที่เก็บและแหล่งข้อมูลออกเป็นโมดูลแบบสแตนด์อโลน
- ซับซ้อนเกินไป: บางครั้งการแยกโปรเจ็กต์ออกเป็นโมดูลก็ไม่สมเหตุสมผล ปัจจัยที่สำคัญคือขนาดของโค้ดเบส หากคุณไม่คาดหวังว่าโปรเจ็กต์จะเติบโตเกินเกณฑ์ที่กำหนด การเพิ่มความสามารถในการปรับขนาดและเวลาในการสร้าง จะไม่เกี่ยวข้อง
การแยกส่วนเป็นเทคนิคที่เหมาะกับฉันไหม
หากต้องการใช้ประโยชน์จากการนำกลับมาใช้ใหม่ การควบคุมระดับการมองเห็นอย่างเข้มงวด หรือใช้การนำส่งฟีเจอร์ Play คุณจะต้องแยกแอปเป็นโมดูล หากคุณไม่ต้องการ แต่ยังคงต้องการรับประโยชน์จากการปรับขนาด การเป็นเจ้าของ การห่อหุ้ม หรือเวลาในการสร้างที่ได้รับการปรับปรุง การแยกส่วนเป็นสิ่งที่ควร พิจารณา
ตัวอย่าง
- Now in Android - แอป Android ที่ทำงานได้อย่างเต็มรูปแบบซึ่งมี การแยกส่วน
- ตัวอย่างสถาปัตยกรรมแบบหลายโมดูล