วิธีสร้างเว็บแอปพลิเคชั่นแบบแยกส่วนอย่างสมบูรณ์ [ปิด]


34

ในอีกไม่กี่เดือนข้างหน้าเราจะเริ่มโครงการที่เราใช้ระบบที่เราสร้างขึ้นเพื่อลูกค้า (v1) และสร้างใหม่โดยเริ่มจากศูนย์ เป้าหมายของเรากับ v2 คือการทำให้เป็นแบบแยกส่วนเพื่อให้ลูกค้าเฉพาะรายนี้จะมีชุดโมดูลของตนเองที่ใช้จากนั้นลูกค้ารายอื่นอาจใช้ชุดโมดูลที่แตกต่างกันโดยสิ้นเชิง เคล็ดลับที่นี่คือ บริษัท A อาจมีชุดการชำระเงินและโมดูลผู้ใช้ที่เปลี่ยนวิธีการทำงานของระบบ บริษัท B อาจยึดตามขั้นตอนการชำระเงินมาตรฐาน แต่กำหนดวิธีการเรียกดูผลิตภัณฑ์

อะไรคือวิธีที่ดีในสถาปัตยกรรมแอปพลิเคชันเมื่อคุณสร้างแอปพลิเคชันตั้งแต่เริ่มต้นที่คุณต้องการให้มีการCoreใช้ร่วมกันในหมู่ลูกค้าทั้งหมดในขณะที่ยังคงความยืดหยุ่นสำหรับสิ่งที่จะแก้ไขโดยเฉพาะสำหรับลูกค้า?

ฉันเคยเห็น hooks ของ CodeIgniter และไม่คิดว่ามันเป็นทางออกที่ดีเพราะเราสามารถจบได้ด้วย 250 hooks และมันยังไม่ยืดหยุ่นพอ โซลูชั่นอื่น ๆ มีอะไรบ้าง เป็นการดีที่เราไม่จำเป็นต้องลากเส้นในทราย

คำตอบ:


26

เพื่อให้ได้โมดูลาร์ที่มีการจัดระเบียบสูงและแยกย่อยคุณสามารถทำตามรูปแบบสถาปัตยกรรมMVCแบบลำดับชั้นซึ่งบางครั้งเรียกว่า Presentation - abstraction - control (แม้ว่าจะไม่ใช่รูปแบบเดียวกันอย่างเคร่งครัด) Kohana , ล้อแม็ก , คล่องแคล่วและFuelPHPสนับสนุน HMVC กำเนิด*และ Kohana ของวิธีการ HMVC จะกล่าวถึงในการประยุกต์ใช้มาตราส่วนเว็บด้วย HMVCและเพิ่มประสิทธิภาพ HMVC Web Applications เพื่อให้มีประสิทธิภาพโดยแซมเดอ Freyssinet

น่าเสียดายที่ CodeIgniter ไม่รองรับ HMVC ฉันได้สร้างห้องสมุดของตัวเองเพื่อให้การจัดเรียงของการสนับสนุน HMVC ใน CodeIgniter บางส่วนรับแรงบันดาลใจจากการwiredesignz ของ codeigniter-แบบแยกส่วนส่วนขยาย มีการแนะนำบทความHMVCเป็นอย่างดีที่ nettus + ซึ่งกล่าวถึงส่วนขยายของ CodeIgniter และ Wiredesignz รูปภาพและคำพูดต่อไปนี้มาจากบทช่วยสอนนั้น:

ป้อนคำอธิบายรูปภาพที่นี่

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

ในที่สุดคุณอยู่ในเส้นทางที่ถูกต้องด้วย hooks แม้ว่าคุณจะนำสถาปัตยกรรม HMVC มาใช้จะมีปัญหาบางอย่างที่คุณจะต้องแก้ไขด้วย hooks ขึ้นอยู่กับการนำไปใช้และระดับของระบบอัตโนมัติที่คุณกำลังมองหา . การใช้ hooks ที่ดีจะเป็นpre_controllerตะขอที่จะทำให้แน่ใจว่ามีการพึ่งพาทั้งหมดสำหรับโมดูลที่ติดตั้งอยู่ตัวอย่างเช่น

* อาจมีคนอื่นที่ฉันไม่รู้จัก


1
ASP.NET MVC รองรับสิ่งนี้หรือไม่?
Robert Harvey

@RobertHarvey ฉันมีความคิด ...
Yannis

@ Robert Harvey สำหรับฉันนี่ดูเหมือนว่าจะมีรูปแบบมากกว่ากรอบ บางทีฉันอาจจะขาดอะไรบางอย่างไป แต่ฉันไม่สามารถเห็นได้ว่าทำไมฉันถึงทำสิ่งนี้ไม่ได้ด้วยการสืบทอดใน ASP.NET MVC
Jeremy

3
@ Jeremy: มันเป็นเรื่องยากในมุมมองโดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะใช้มุมมองอีกครั้ง มันดูน่าสนใจ แต่ฉันพบว่ามันยากที่จะเห็นภาพที่ระดับน็อตและสลักเกลียว
Robert Harvey

ในแผนภาพด้านบนดูเหมือนว่ามุมมองระดับบนกำลังถูกสร้างขึ้นจากมุมมองขนาดเล็กที่อยู่ด้านล่างในลำดับชั้น สามารถทำได้ในระดับหนึ่งด้วยRenderAction()
Robert Harvey

5

ฉันไม่ใช่คนที่แต่งตัวประหลาด PHP แต่ในด้านจาวาสคริปต์ถ้าคุณจะมีโมดูลจำนวนมากที่คุณต้องการให้เป็นอิสระมากที่สุดมีหลายระบบสำหรับสิ่งนี้เช่นRequireJSที่มีจาวาสคริปต์ โมดูลที่ประกาศการขึ้นต่อกันของโมดูลอื่นและเฟรมเวิร์กทำให้แน่ใจว่าโหลดได้เมื่อจำเป็น

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

เฟรมเวิร์กเหล่านี้ใช้ไม่ได้มาก (หรืออาจจะทั้งหมด) หากเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ของคุณกำลังจัดการหรือสร้างจาวาสคริปต์ของคุณ แต่คุณอาจต้องการให้จาวาสคริปต์ของคุณเป็นอิสระจากเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ของคุณ

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


0

ต่อไปนี้เป็นคำแนะนำเกี่ยวกับวิธีการออกแบบโมดูลาร์: https://class.coursera.org/saas/lecture/preview/9

ด้วยวิธีนี้: " SOAสามารถเห็นได้ในความต่อเนื่องจากแนวคิดแบบเก่าของการคำนวณแบบกระจายและการเขียนโปรแกรมแบบแยกส่วนผ่านทาง SOA และการปฏิบัติในปัจจุบันของการผสม, SaaS , ... "

การจัดระเบียบรหัส HMVC ด้วยตัวเองไม่จำเป็นต้องนำไปสู่การแยกส่วน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.