สถาปัตยกรรม (โครงสร้าง) - มุ่งเน้นกับโครงสร้างโครงการที่มุ่งเน้นคุณสมบัติ


14

ฉันมีส่วนเกี่ยวข้องกับโครงการมีโครงสร้างไฟล์ / โฟลเดอร์ของโครงการที่มุ่งเน้นสถาปัตยกรรม:

Root
|____ Node1
    |____ Event Handlers
    |         |___ <all event handlers of project>
    |____ Events
    |         |___ <all events of project>
    |____ Request Handlers  
    |         |___ <all request handlers of project>
    |____ Requests
    |         |___ <all requests of project>
    |____ ...

มันชัดเจนจากมุมมองทางสถาปัตยกรรมของระบบ (ได้รับการเสนอโดยทีมพัฒนา)

มันเป็นโครงสร้างที่มุ่งเน้นคุณสมบัติที่ได้รับการเสนอโดยทีมนักออกแบบ:

Root
|____ Feature #1
    |____ Event Handlers
    |         |___ <all event handlers of Feature #1>
    |____ Events
    |         |___ <all events of Feature #1>
    |____ Request Handlers  
    |         |___ <all request handlers of Feature #1>
    |____ Requests
    |         |___ <all requests of Feature #1>
    |____ ...

ตัวแปรนี้อยู่ใกล้กับผู้ออกแบบและอธิบายคุณลักษณะที่จะนำไปใช้อย่างชัดเจน

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

ขอขอบคุณ.


ฉันไม่เข้าใจโครงสร้างอย่างใดอย่างหนึ่ง - อะไรคือความแตกต่างระหว่างกิจกรรมและคำขอ (และตัวจัดการเหตุการณ์และตัวจัดการคำขอ) คืออะไร
Peter Boughton

1
คำถามที่ชัดเจนมาก - และเป็นกลางเช่นกัน!
Michael K

1
จากมุมมองที่ปรับขนาดได้แนวทางที่สองควรง่ายต่อการปรับขนาดในแนวนอน
CodeART

คำตอบ:


11

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

โดยวิธีการที่ฉันรักวิธีที่คุณถามคำถามนี้จากมุมมองที่เป็นกลาง


1
+1 กับหนึ่ง caveat: สำหรับโครงการขนาดเล็กที่สองจะส่งผลให้โครงสร้างไฟล์มีขนาดใหญ่กว่ามีไฟล์ที่จะใส่มันฉันจะใช้ครั้งแรกสำหรับเหล่านั้น
Michael K

@Michael ฉันเห็นด้วย แต่ในกรณีนี้มันเป็นโครงการขนาดใหญ่
Zzz

1
+1: และถ้าคุณต้องพูดคุยกับผู้ใช้ / ลูกค้าคำศัพท์นั้นจะค่อนข้างสอดคล้องกัน
Steven Evers

4

ฉันรู้สึกสะดวกสบายกับวิธีที่สองเสมอ แต่ฉันมักจะมี "คุณสมบัติ" ที่เรียกว่าทั่วไปหรือทั่วไปสำหรับคลาสที่แชร์ / ฐานอย่างแท้จริง

แนวทางที่สองช่วยแยกสิ่งต่าง ๆ อย่างแท้จริง แต่หากไม่มีพื้นที่ "ทั่วไป" บางครั้งก็แยกสิ่งต่าง ๆ ออกเป็นส่วน ๆ ที่ไม่เหมาะสม


+1 สำหรับทั่วไปและทั่วไป (ทุกโครงการมีเครื่องมือสาธารณูปโภคทั่วไป ... )
Zzz

3

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

นี่เป็นปัญหาที่สำคัญอย่างยิ่งเมื่อการใช้งานของคุณสมบัติครอบคลุมหลาย dll, exes, ฐานข้อมูลหรือชิ้นส่วนซอฟต์แวร์อื่น ๆ


1
ฉันคิดเกี่ยวกับเรื่องนั้น แต่สิ่งอื่น ๆ ที่เท่าเทียมกันวิธีที่สองมีข้อได้เปรียบทางปรัชญาที่ชัดเจนสำหรับทุกคน แต่เป็นเรื่องเล็กน้อยที่สุดในการใช้งาน อย่างน้อยที่สุดมันเป็นข้อเสนอแนะที่ดี
Robert Harvey

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

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

1
@ Robert Harvey: แล้วปัญหาเกี่ยวกับการสร้างและการปรับใช้ล่ะ วิธีที่ง่ายกว่าเช่นการใช้ IDE เพื่อเขียนและดีบักโค้ด บางสิ่งเหล่านี้ควรมีผลกระทบที่มีประสิทธิภาพในโครงสร้างโฟลเดอร์
John Fisher

1

ต้องเห็นด้วยกับวิธีที่สองให้ทั้งสองตัวเลือก คนแรกดูเหมือนหยดอสัณฐาน อย่างน้อยรูปที่สองมีรูปร่างบ้าง

มันขึ้นอยู่กับว่าโครงการใหญ่แค่ไหน หาก "คุณสมบัติ" มีขนาดใหญ่พวกเขาแต่ละคนต้องมีที่เก็บข้อมูลที่แตกต่างกัน


1

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

นอกจากว่าคุณจะมีฟีเจอร์เพียงหยิบมือเดียวคุณจำเป็นต้องจัดกลุ่มไว้ในหมวดหมู่ - และมันไม่ได้ถูกออกแบบมาให้รองรับ (ยกเว้นว่าเป็นสิ่งที่ Node1 ตั้งใจไว้ แต่แนะนำ "X ทั้งหมด" ของโครงการ) เป็นอย่างอื่นและทำให้ฉันสงสัยว่ามันเป็น WTF - มี Node2 หรือไม่?)

ฉันอาจพิจารณาบางสิ่งเช่นนี้:

Root
|____ Event Handlers
|   |____ Category A
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Category B
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|
|____ Events
|   |____ Category A
|   |    |___ Feature #1 Events
|   |    |___ Feature #2 Events
|   |    |___ Feature #3 Events
|   |
|   |____ Category B
|   |    |___ Feature #4 Events
|   |    |___ Feature #5 Events
|   |
|

หรือสิ่งนี้:

Root
|____ Category A
|   |____ Event Handlers
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Events
|        |___ Feature #1 Events
|        |___ Feature #2 Events
|        |___ Feature #3 Events
|   
|____ Category B
|   |____ Event Handlers
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|   |____ Events
|        |___ Feature #4 Events
|        |___ Feature #5 Events


แต่พวกเขาทั้งคู่กำลังตั้งสมมติฐานซึ่งอาจไม่สมบูรณ์ถ้าคุณสามารถอัปเดตคำถามของคุณพร้อมรายละเอียดเพิ่มเติมฉันอาจเปลี่ยนใจ :)

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