คำถามติดแท็ก architecture

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

11
เต็มไปด้วยข้อบกพร่องแบบมัลติเธรด
ในทีมใหม่ของฉันที่ฉันจัดการรหัสส่วนใหญ่ของเราคือแพลตฟอร์มซ็อกเก็ต TCP และรหัสเครือข่าย http C ++ ทั้งหมด ส่วนใหญ่มาจากผู้พัฒนารายอื่นที่ออกจากทีมไป นักพัฒนาปัจจุบันของทีมนั้นฉลาดมาก แต่ส่วนใหญ่เป็นรุ่นรองในแง่ของประสบการณ์ ปัญหาที่ใหญ่ที่สุดของเรา: ข้อบกพร่องที่เกิดขึ้นพร้อมกันแบบมัลติเธรด ไลบรารีคลาสของเราส่วนใหญ่เขียนเป็นแบบอะซิงโครนัสโดยใช้คลาสเธรดพูลบางคลาส เมธอดบนไลบรารีคลาสมักเข้าคิวเพื่อรัน taks ที่ยาวบนเธรดพูลจากเธรดหนึ่งและจากนั้นเมธอดการเรียกกลับของคลาสนั้นจะถูกเรียกใช้บนเธรดอื่น เป็นผลให้เรามีข้อบกพร่องกรณีขอบจำนวนมากที่เกี่ยวข้องกับข้อสันนิษฐานเกลียวที่ไม่ถูกต้อง ซึ่งส่งผลให้ข้อบกพร่องที่ลึกซึ้งที่มีมากกว่าส่วนที่สำคัญและล็อคเพื่อป้องกันปัญหาการเกิดพร้อมกัน สิ่งที่ทำให้ปัญหาเหล่านี้ยากขึ้นคือความพยายามแก้ไขมักไม่ถูกต้อง ข้อผิดพลาดบางประการที่ฉันสังเกตเห็นว่าทีมพยายาม (หรือภายในรหัสเดิม) รวมถึงสิ่งต่อไปนี้: ข้อผิดพลาดทั่วไป # 1 - แก้ไขปัญหาการเกิดพร้อมกันโดยเพียงแค่ใส่ล็อกรอบ ๆ ข้อมูลที่ใช้ร่วมกัน แต่ลืมเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อวิธีการไม่ได้รับการเรียกในลำดับที่คาดหวัง นี่เป็นตัวอย่างง่ายๆ: void Foo::OnHttpRequestComplete(statuscode status) { m_pBar->DoSomethingImportant(status); } void Foo::Shutdown() { m_pBar->Cleanup(); delete m_pBar; m_pBar=nullptr; } ดังนั้นตอนนี้เรามีข้อผิดพลาดที่สามารถเรียกปิดได้ในขณะที่ OnHttpNetworkRequestComplete กำลังเกิดขึ้น ผู้ทดสอบพบข้อผิดพลาดจับการถ่ายโอนข้อมูลความผิดพลาดและกำหนดข้อผิดพลาดให้กับนักพัฒนา เขาก็แก้ไขข้อผิดพลาดเช่นนี้ …

4
Microservices และการจัดเก็บข้อมูล
ฉันกำลังพิจารณาที่จะย้าย REST API แบบเสาหินไปยังสถาปัตยกรรม microservice และฉันสับสนเล็กน้อยเกี่ยวกับที่เก็บข้อมูล ตามที่ฉันเห็นประโยชน์บางประการของ microservices คือ: ปรับขนาดได้ในแนวนอน - ฉันสามารถเรียกใช้สำเนาบริการซ้ำซ้อนหลายชุดเพื่อจัดการกับโหลดและ / หรือเซิร์ฟเวอร์หยุดทำงาน การเชื่อมโยงอย่างหลวม - ฉันสามารถเปลี่ยนการใช้งานภายในของไมโครไซต์โดยไม่ต้องเปลี่ยนไมโครซอฟท์และฉันสามารถปรับใช้และเปลี่ยนแปลงได้อย่างอิสระ ... ปัญหาของฉันอยู่ที่การจัดเก็บข้อมูล เท่าที่ฉันเห็นมันมีหลายตัวเลือก: บริการฐานข้อมูลเดียวที่ใช้ร่วมกันโดย microservices ทั้งหมด - นี่ดูเหมือนจะขจัดข้อได้เปรียบของการมีเพศสัมพันธ์แบบหลวม ๆ อย่างสมบูรณ์ อินสแตนซ์ฐานข้อมูลที่ติดตั้งในเครื่องบนไมโครไซต์แต่ละบริการ - ฉันไม่เห็นวิธีการปรับขนาดแนวนอนดังนั้นฉันไม่คิดว่ามันจะเป็นตัวเลือก microservice แต่ละตัวมีบริการฐานข้อมูลของตัวเอง - ซึ่งเป็นวิธีที่มีแนวโน้มมากที่สุดเนื่องจากจะรักษาประโยชน์ของข้อต่อหลวมและการขยายตามแนวนอน (โดยใช้สำเนาฐานข้อมูลที่ซ้ำซ้อนและ / หรือทำให้เกิดปัญหาหลายอย่าง) สำหรับฉันตัวเลือกที่สามน่าจะเป็นตัวเลือกเดียว แต่ดูเหมือนว่าฉันจะมีน้ำหนักมากอย่างไม่น่าเชื่อและเป็นวิธีแก้ปัญหาที่มีการปรับแก้มากเกินไป ถ้าฉันเข้าใจถูกต้องแล้วสำหรับแอปพลิเคชันธรรมดาที่มี 4-5 microservices ฉันต้องใช้เซิร์ฟเวอร์ 16-20 - สองอินสแตนซ์ microservice จริงสองต่อ microservice (ในกรณีที่เซิร์ฟเวอร์ล้มเหลวและสำหรับการปรับใช้โดยไม่ต้องหยุดทำงาน) …

2
“ ตรรกะทางธุรกิจ” หมายความว่าอย่างไรหากไม่ใช่“ รหัสบุคคลที่ไม่ใช่บุคคลที่สาม”?
ฉันได้ยินคนพูดถึงตรรกะทางธุรกิจมากมายในที่ทำงานและออนไลน์และฉันได้อ่านคำถามหลายข้อเกี่ยวกับเว็บไซต์นี้ แต่คำนี้ยังไม่สมเหตุสมผลสำหรับฉัน ตัวอย่างเช่นต่อไปนี้เป็นคำสั่ง (ถอดความ) ที่ฉันมักจะเห็น: "ตรรกะทางธุรกิจเป็นส่วนหนึ่งของโปรแกรมของคุณที่เข้ารหัสกฎเกณฑ์ทางธุรกิจที่แท้จริง" คำจำกัดความส่วนใหญ่ที่ฉันได้อ่านเป็นคำวงกลมเช่นนี้ "ตรรกะทางธุรกิจคือทุกสิ่งที่ไม่เหมือนใครสำหรับแอปพลิเคชันของคุณโดยเฉพาะ" ฉันไม่เห็นว่าสิ่งนี้แตกต่างจาก "แอปพลิเคชันของคุณโดยเฉพาะคืออะไร แต่เป็นตรรกะทางธุรกิจ" เว้นแต่ว่าเราจะมีการคิดค้นใหม่โดยบังเอิญ ดังนั้นชื่อคำถาม "ควรมี Business Logic Layer เหนือ Data Access Layer ของคุณและต่ำกว่า GUI Layer ของคุณ" ในรหัสที่ฉันเขียนตัวเข้าถึงฐานข้อมูลต้องทราบว่าข้อมูลใดที่พวกเขาควรจะเข้าถึงและรหัส UI ต้องรู้มากมายเกี่ยวกับสิ่งที่กำลังแสดงเพื่อแสดงอย่างถูกต้องและไม่มีอะไรทำระหว่าง ทั้งสองแห่งนั้นไม่ใช่การส่งข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ ดังนั้นสิ่งที่ควรจะเป็น Business Logic Layer? "ตรรกะทางธุรกิจควรแยกออกจากตรรกะการนำเสนอ" คำขอคุณสมบัติส่วนใหญ่ที่เราได้รับคือการเปลี่ยนตรรกะการนำเสนอด้วยเหตุผลทางธุรกิจ หากหนึ่งในกฎเกณฑ์ทางธุรกิจคือการแสดงราคาพันธบัตรรัฐบาลสหรัฐฯในรูปแบบที่ 32 โดยค่าเริ่มต้น (ในขณะเดียวกันก็ให้ UI สำหรับผู้ใช้ในการกำหนดค่านั้น) ตรรกะการนำเสนอต้องมีอย่างน้อยต้องรู้ว่ามีกฎนี้อยู่หรือไม่ นอกจากนี้ดูเหมือนว่าส่วนสำคัญของการออกแบบ UX ช่วยให้ผู้ใช้เข้าใจกฎเกณฑ์ทางธุรกิจซอฟต์แวร์ของเราพยายามนำไปใช้ เป็นไปได้หรือไม่ที่ฉันอยู่ในทีมที่ทำแค่ตรรกะทางธุรกิจและตรรกะอื่น ๆ ที่ไม่ใช่ธุรกิจกำลังทำโดยทีมอื่น ๆ ? …

7
การระบุข้อเท็จจริงว่าคีย์หลักไม่ได้เป็นส่วนหนึ่งของโดเมนธุรกิจของคุณ
ในเกือบทุกกรณีคีย์หลักไม่ได้เป็นส่วนหนึ่งของโดเมนธุรกิจของคุณ แน่นอนว่าคุณอาจมีบางสิ่งที่ผู้ใช้ต้องเผชิญกับวัตถุที่มีดัชนีเฉพาะ ( UserNameสำหรับผู้ใช้หรือOrderNumberสำหรับการสั่งซื้อ) แต่โดยส่วนใหญ่แล้วธุรกิจไม่จำเป็นต้องระบุวัตถุโดเมนด้วยค่าเดียวหรือชุดของค่า ผู้ใช้งานธุรการ แม้ในกรณีพิเศษเหล่านั้นโดยเฉพาะอย่างยิ่งถ้าคุณใช้ตัวระบุที่ไม่ซ้ำกันทั่วโลก (GUID)คุณจะต้องการหรือต้องการใช้คีย์สำรองแทนการเปิดเผยคีย์หลักเอง ดังนั้นหากความเข้าใจของฉันเกี่ยวกับการออกแบบที่ขับเคลื่อนด้วยโดเมนนั้นมีความถูกต้องคีย์หลักไม่จำเป็นต้องใช้และดังนั้นจึงไม่ควรเปิดเผยและเป็นปัญหาที่ดี พวกเขาน่าเกลียดและตะคริวสไตล์ของฉัน แต่ถ้าเราเลือกที่จะไม่รวมคีย์หลักในรูปแบบโดเมนจะมีผลตามมา: อย่างไร้เดียงสาdata transfer objects (DTO)ที่ได้มาจากการรวมกันของแบบจำลองโดเมนจะไม่มีคีย์หลัก DTO ที่เข้ามาจะไม่มีคีย์หลัก ดังนั้นจะปลอดภัยหรือไม่ที่จะบอกว่าถ้าคุณบริสุทธิ์และกำจัดคีย์หลักในโมเดลโดเมนของคุณจริง ๆ คุณควรเตรียมพร้อมที่จะรับมือกับทุกคำขอในแง่ของดัชนีที่ไม่ซ้ำกันในคีย์หลักนั้น ใส่อีกวิธีหนึ่งซึ่งโซลูชั่นต่อไปนี้เป็นวิธีที่ถูกต้องในการจัดการกับการระบุวัตถุเฉพาะหลังจากลบ PK ในแบบจำลองโดเมน ความสามารถในการระบุวัตถุที่คุณต้องจัดการกับคุณลักษณะอื่น ๆ รับคีย์หลักกลับใน DTO; เช่นการกำจัด PK เมื่อทำการแมปจากการมีอยู่ไปยังโดเมนจากนั้นทำการรวม PK อีกครั้งเมื่อทำการแมปจากโดเมนไปยัง DTO แก้ไข: มาสร้างคอนกรีตกันเถอะ กล่าวว่ารูปแบบโดเมนของฉันคือVoIPProviderซึ่งรวมถึงสาขาที่ชอบName, Description, URLเช่นเดียวกับการอ้างอิงเช่นProviderType, และPhysicalAddressTransactions ตอนนี้สมมติว่าฉันต้องการสร้างบริการบนเว็บที่จะอนุญาตให้ผู้ใช้ที่มีสิทธิ์จัดการVoIPProviderได้ บางทีรหัสที่ใช้งานง่ายอาจไม่มีประโยชน์ในกรณีนี้ ท้ายที่สุดแล้วผู้ให้บริการ VoIP เป็น บริษัท ที่มีชื่อแตกต่างกันในแง่ของคอมพิวเตอร์และแตกต่างกันในแง่ของเหตุผลทางธุรกิจ ดังนั้นจึงอาจเพียงพอที่จะกล่าวได้ว่ามีความเป็นเอกลักษณ์ที่VoIPProviderถูกกำหนดโดย(Name, URL)สมบูรณ์ ดังนั้นตอนนี้สมมติว่าฉันต้องการวิธีการPUT api/providers/voipเพื่อให้ผู้ใช้ที่มีสิทธิ์สามารถอัพเดตVoIPผู้ให้บริการได้ …

7
ข้อดีและข้อเสียของ HTML5 แนวทางแอพมือถือแบบเนทีฟและไฮบริดคืออะไร
ฉันต้องการพัฒนาแอปพลิเคชั่นมือถือ ฉันเพิ่งอ่านบทความในTelerik Forumซึ่งเปรียบเทียบกับแอปพลิเคชั่นมือถือสามประเภทและฉันไม่รู้ว่าควรเริ่มต้นจากที่ใด นี่คือรูปภาพที่อธิบายข้อดีข้อเสียของตัวเลือกการออกแบบมือถือที่แตกต่างกัน ในการตัดสินใจระหว่างตัวเลือกการออกแบบเหล่านี้ฉันต้องการทำความเข้าใจข้อดีข้อเสียของตัวเลือกสถาปัตยกรรมแต่ละตัวที่ระบุไว้ในแผนภาพ ข้อดีและข้อเสียของสถาปัตยกรรมแต่ละวิธีมีอะไรบ้าง

3
แผนภาพ UML ของแอปพลิเคชันแบบมัลติเธรด
สำหรับแอปพลิเคชันแบบเธรดเดียวฉันต้องการใช้คลาสไดอะแกรมเพื่อดูภาพรวมของสถาปัตยกรรมของแอปพลิเคชันนั้น ไดอะแกรมชนิดนี้ไม่ได้มีประโยชน์มากนักเมื่อพยายามทำความเข้าใจกับแอปพลิเคชั่นที่มีหลายเธรด / พร้อมกันอย่างหนักเช่นเนื่องจากอินสแตนซ์ต่าง ๆ ของคลาส "สด" บนเธรดที่แตกต่างกัน (หมายถึงการเข้าถึงอินสแตนซ์ ด้ายมันอาศัยอยู่) ดังนั้นความสัมพันธ์ระหว่างคลาสไม่จำเป็นต้องหมายความว่าฉันสามารถเรียกใช้เมธอดบนวัตถุเหล่านั้นได้ แต่ฉันต้องทำการเรียกใช้บนเธรดของวัตถุเป้าหมายแทน วรรณกรรมส่วนใหญ่ที่ฉันขุดขึ้นมาในหัวข้อต่างๆเช่นการออกแบบพร้อมกันกระจายและแอปพลิเคชันแบบเรียลไทม์กับ UMLโดย Hassan Gomaa มีความคิดที่ดีเช่นการวาดขอบเขตของเธรดลงในไดอะแกรมวัตถุ แต่โดยรวมแล้วดูเหมือนว่า มีประโยชน์จริงๆ ฉันไม่ต้องการใช้ไดอะแกรมเหล่านี้เป็นมุมมองระดับสูงของโดเมนปัญหา แต่เป็นการอธิบายรายละเอียดของคลาส / วัตถุการโต้ตอบและข้อ จำกัด เนื่องจากขอบเขตของเธรดที่กล่าวถึงข้างต้น ฉันอยากรู้ว่า: ไดอะแกรมชนิดใดที่คุณพบว่ามีประโยชน์มากที่สุดในการทำความเข้าใจแอปพลิเคชันแบบมัลติเธรด มีส่วนขยายใด ๆ กับ UML แบบคลาสสิกที่คำนึงถึงลักษณะเฉพาะของแอพพลิเคชั่นแบบมัลติเธรดเช่นผ่านคำอธิบายประกอบที่แสดงให้เห็นว่า วัตถุบางอย่างอาจอาศัยอยู่ในเธรดที่แน่นอนในขณะที่วัตถุอื่นไม่มีความสัมพันธ์ของเธรด บางฟิลด์ของวัตถุอาจถูกอ่านจากเธรดใดก็ได้ แต่เขียนไปจากอันเดียวเท่านั้น วิธีการบางอย่างจะซิงโครนัสและส่งคืนผลลัพธ์ในขณะที่วิธีอื่น ๆ แบบอะซิงโครนัสที่รับคำขอเข้าคิวและส่งคืนผลลัพธ์เช่นผ่านการติดต่อกลับบนเธรดอื่น

4
ในรูปแบบ MVC ควรจัดการตรวจสอบความถูกต้อง?
ฉันพยายามสร้างเว็บแอปพลิเคชันที่ฉันพัฒนาขึ้นเพื่อใช้รูปแบบ MVC แต่ฉันไม่แน่ใจว่าควรตรวจสอบความถูกต้องในรูปแบบหรือไม่ ตัวอย่างเช่นฉันกำลังตั้งค่าแบบจำลองของฉันแบบนี้: class AM_Products extends AM_Object { public function save( $new_data = array() ) { // Save code } } คำถามแรก:ดังนั้นฉันสงสัยว่าวิธีการบันทึกของฉันควรจะเรียกใช้ฟังก์ชันการตรวจสอบความถูกต้องใน $ new_data หรือสมมติว่าข้อมูลได้รับการตรวจสอบแล้ว? นอกจากนี้หากมีการตรวจสอบความถูกต้องฉันคิดว่ารหัสบางรุ่นเพื่อกำหนดประเภทข้อมูลจะมีลักษณะดังนี้: class AM_Products extends AM_Object { protected function init() // Called by __construct in AM_Object { // This would match up to the database …
25 architecture  mvc 

8
ซอฟต์แวร์ใดที่สามารถใช้สร้างไดอะแกรมสถาปัตยกรรม [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันใช้ MS Visio สำหรับงานออกแบบ / สถาปัตยกรรมส่วนใหญ่เมื่อฉันต้องสามารถบันทึกไดอะแกรมที่ใดที่หนึ่งและแก้ไขในภายหลัง ฉันไม่ใช่แฟนตัวยงที่ใหญ่ที่สุดของ Visio แต่มันทำงานได้สำเร็จ (และทำงานให้ฟรี) ฉันสงสัยว่ามีทางเลือกที่ดีสำหรับซอฟต์แวร์ Visio ที่มีราคาค่อนข้างแพงหรืออาจจะเป็นสิ่งที่ดีกว่าเดิมที่พวกคุณเคยใช้มาแล้วในอดีตและรู้สึกสบายใจ แน่นอนฉันต้องการมีโปรแกรมนั้นในกล่องเครื่องมือของฉัน!

2
เรามีแอปพลิเคชั่น Ruby on Rails ขนาดใหญ่ (ผู้ใช้ 25 ล้านคนต่อเดือน) ผู้บริหารของเราตัดสินใจเขียนใหม่ใน Node.js ฉันบ้าไหม
กรุณาบอกฉันว่า: Node.js จะทำให้เว็บไซต์ของเราเร็วขึ้น! Node.js จะใช้ทรัพยากรเซิร์ฟเวอร์น้อยลงเราสามารถประหยัดเงินได้! Node.js จะทำให้เรามีประสิทธิผลมากขึ้น! Node.js หมายความว่าเราสามารถแบ่งปันรหัส JavaScript ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ เพื่อชี้แจงเรากำลังเขียนเซิร์ฟเวอร์ส่วนหน้าซึ่งจะพูดคุยกับแอพพลิเคชั่น Ruby on Rails ที่เรามีอยู่ในฐานะ API ในขณะเดียวกันเราจะปรับปรุงแอพพลิเคชัน Ruby on Rails ของเราให้เป็นบริการ รายละเอียดเพิ่มเติมเกี่ยวกับสถาปัตยกรรมที่มีอยู่: Memcachedสำหรับการแคช partials HTML redisสำหรับเซสชั่นและบางแคชข้อมูลที่มีโครงสร้าง MySQLหลักเดียวหลายทาส มีโต๊ะขนาดใหญ่ที่ยอมรับการเขียนได้มากมาย (ลองนึกภาพโพล) มิฉะนั้นส่วนใหญ่อ่าน MongoDBสำหรับข้อมูลเมตาบางส่วน Ruby on Rails 3.0 nginxและยูนิคอร์น

6
ทำไมทีมที่ LMAX ใช้จาวาและออกแบบสถาปัตยกรรมเพื่อหลีกเลี่ยง GC ในทุกกรณี?
ทำไมทีมที่ LMAX จึงออกแบบLMAX Disruptorใน Java แต่ทุกจุดของการออกแบบเพื่อลดการใช้งาน GC หากไม่มีใครต้องการให้ GC ทำงานแล้วทำไมต้องใช้ภาษาที่รวบรวมขยะ? การเพิ่มประสิทธิภาพระดับความรู้ด้านฮาร์ดแวร์และความคิดของพวกเขานั้นยอดเยี่ยม แต่ทำไม Java ฉันไม่ได้ต่อต้าน Java หรืออะไร แต่ทำไมเป็นภาษา GC ทำไมไม่ใช้สิ่งที่ต้องการ D หรือภาษาอื่นที่ไม่มี GC แต่ให้โค้ดที่มีประสิทธิภาพ? เป็นทีมที่คุ้นเคยกับ Java มากที่สุดหรือ Java นั้นมีข้อได้เปรียบที่ไม่เหมือนใครหรือไม่? สมมติว่าพวกเขาพัฒนาโดยใช้ D พร้อมการจัดการหน่วยความจำด้วยตนเองสิ่งที่แตกต่างกันคืออะไร พวกเขาจะต้องคิดในระดับต่ำ (ซึ่งพวกเขาเป็นอยู่แล้ว) แต่พวกเขาสามารถบีบประสิทธิภาพที่ดีที่สุดออกมาจากระบบเหมือนเป็นเจ้าของภาษา

3
มันสมเหตุสมผลหรือไม่ที่จะสร้างแอปพลิเคชั่น (ไม่ใช่เกม) โดยใช้สถาปัตยกรรมส่วนประกอบ - เอนทิตี้ของระบบ?
ฉันรู้ว่าเมื่อสร้างแอปพลิเคชั่น (ดั้งเดิมหรือเว็บ) เช่นใน Apple AppStore หรือ Google Play app store นั้นเป็นเรื่องธรรมดามากที่จะใช้สถาปัตยกรรม Model-View-Controller อย่างไรก็ตามมันมีเหตุผลที่จะสร้างแอพพลิเคชั่นที่ใช้สถาปัตยกรรม Component-Entity-System ทั่วไปในเอ็นจิ้นเกมหรือไม่?

2
รูปแบบทางเลือกสำหรับการพัฒนาเว็บ? (ไม่ใช่ MVC) [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการ4 ปีที่แล้ว เร็ว ๆ นี้ผมได้อ่านบล็อกโพสต์บางประการเกี่ยวกับ MVC และวิธีการที่ไม่พอดีกับเว็บ ฉันได้เรียนรู้เกี่ยวกับรูปแบบทางเลือกเช่นRMR สถาปัตยกรรม ฉันอยากรู้ว่าคนอื่นใช้รูปแบบใดบนเว็บนอกเหนือจาก MVC นอกจากนี้หากมีกรอบที่ใช้รูปแบบโปรดโพสต์ลิงค์ไปที่มัน

3
การอนุญาตที่เหมาะสมในสถาปัตยกรรมแบบเลเยอร์
โดยทั่วไปแล้วฉันจะตัดสินใจเรื่องการอนุญาตในตัวควบคุมฝั่งเซิร์ฟเวอร์ของฉัน สิ่งเหล่านี้เป็นจุดสิ้นสุดที่สงบเมื่อเร็ว ๆ นี้ แต่ฉันคิดว่าเหมือนกันกับสถาปัตยกรรมประเภท MVC เพื่อประโยชน์ในการโต้แย้งสมมติว่ามันเป็นสิทธิ์ตามบทบาท วิธีการป้องกันจะได้รับการอธิบายประกอบหรือทำการตรวจสอบและส่งคืน 403s หากจำเป็น ตอนนี้เนื่องจากการให้สิทธิ์นั้นเป็นกฎทางธุรกิจจริง ๆ - ตัวอย่างเช่น "ผู้ดูแลระบบเท่านั้นที่สามารถแสดงรายการ X" ได้ฉันคิดว่าพวกเขาควรถูกเลเยอร์ลง เมื่อผู้ควบคุมขอให้ชั้นธุรกิจทำการดำเนินการบริการหรือชั้นธุรกิจจะแจ้งให้ผู้ควบคุมทราบว่าไม่ได้รับอนุญาต นี่เป็นแนวทางที่สมเหตุสมผลหรือไม่? มีข้อเสียนี้หรือไม่? ฉันไม่ชอบที่จะมี AuthorisationService ซึ่งเป็นส่วนหนึ่งของกฎการเข้ารหัสแบบสแตติกขั้นตอนเพื่อทำสิ่งนี้ แต่บางทีมันก็สมเหตุสมผลที่จะเก็บตรรกะการเข้าถึงทั้งหมดไว้ในที่เดียว มันเป็นความกังวลข้ามตัดที่ควรแยกจากกัน? ดังนั้นฉันจึงถามว่ามีใครทำเช่นนี้หรือไม่และวิธีการที่พวกเขาประสบความสำเร็จในวิธีที่สะอาดหรือว่ามีแหล่งข้อมูลที่ดีที่ฉันสามารถอ่านได้ ฉันใช้ Java fwiw แต่นี่เป็นคำถามที่ไม่เชื่อเรื่องภาษา ฉันได้ตรวจสอบคำถามที่เกี่ยวข้องที่นี่และพวกเขาบางมากบนพื้นและคำตอบ ตัวอย่างเช่น: การตรวจสอบและการอนุญาตในรูปแบบโดเมนและดำเนินการผ่าน Service Layer ถึง MVC ฉันกำลังอ่านเอกสารเกี่ยวกับความปลอดภัยของฤดูใบไม้ผลิซึ่งทำให้เกิดข้อโต้แย้งที่ดีเกี่ยวกับเรื่องนี้ซึ่งเป็นประเด็นที่ต้องคำนึงถึง แต่ฉันกังวลว่ามันเป็นเพียงแค่ "วิธีการในฤดูใบไม้ผลิ" และต้องการมุมมองที่กว้างขึ้น นอกจากนี้ยังเชื่อมโยงแอปพลิเคชันของคุณเข้ากับกรอบงานเฉพาะ

5
ทางเลือกอื่นสำหรับรูปแบบพื้นที่เก็บข้อมูลสำหรับห่อหุ้มตรรกะ ORM หรือไม่
ฉันแค่ต้องเปลี่ยน ORM ออกมาและมันก็เป็นงานที่ค่อนข้างน่ากลัวเพราะตรรกะของแบบสอบถามนั้นรั่วไปทุกที่ หากฉันจำเป็นต้องพัฒนาแอปพลิเคชันใหม่การตั้งค่าส่วนตัวของฉันก็คือการสรุปแคปเจอร์ตรรกะทั้งหมด (ใช้ ORM) เพื่อป้องกันการเปลี่ยนแปลงในอนาคต รูปแบบพื้นที่เก็บข้อมูลค่อนข้างลำบากในการใช้รหัสและบำรุงรักษาดังนั้นฉันจึงสงสัยว่ามีรูปแบบอื่นใดที่สามารถแก้ปัญหาได้หรือไม่ ฉันสามารถคาดการณ์การโพสต์เกี่ยวกับการไม่เพิ่มความซับซ้อนเป็นพิเศษก่อนที่จะจำเป็นต้องมีความคล่องตัว ฯลฯ แต่ฉันแค่สนใจเกี่ยวกับรูปแบบที่มีอยู่ในการแก้ปัญหาที่คล้ายกันในวิธีที่ง่ายขึ้น ความคิดแรกของฉันคือการมีพื้นที่เก็บข้อมูลประเภททั่วไปซึ่งฉันเพิ่มวิธีการที่จำเป็นในการเรียนที่เก็บประเภทเฉพาะผ่านวิธีการขยาย แต่การทดสอบหน่วยวิธีการคงที่เจ็บปวดอย่างมาก IE: public static class PersonExtensions { public static IEnumerable<Person> GetRetiredPeople(this IRepository<Person> personRep) { // logic } }

6
ฉันกำลังฝึกฝน OOP กับสถาปัตยกรรมนี้หรือไม่?
ฉันมีเว็บแอพพลิเคชั่น ฉันไม่เชื่อว่าเทคโนโลยีเป็นสิ่งสำคัญ โครงสร้างเป็นแอปพลิเคชันระดับ N ซึ่งแสดงในภาพทางด้านซ้าย มี 3 ชั้น UI (รูปแบบ MVC), Business Logic Layer (BLL) และ Data Access Layer (DAL) ปัญหาที่ฉันมีคือ BLL ของฉันมีขนาดใหญ่มากเนื่องจากมีตรรกะและเส้นทางผ่านการเรียกแอปพลิเคชันกิจกรรม โฟลว์ทั่วไปผ่านแอ็พพลิเคชันอาจเป็น: มีเหตุการณ์เกิดขึ้นใน UI ข้ามไปที่เมธอดใน BLL ดำเนินการกับลอจิก (อาจอยู่ในหลายส่วนของ BLL) ในที่สุดถึง DAL กลับไปที่ BLL (ซึ่งเป็นไปได้ว่ามีตรรกะมากกว่า) จากนั้นส่งคืนค่าบางค่าไปยัง UI BLL ในตัวอย่างนี้ยุ่งมากและฉันคิดว่าจะแยกออก ฉันมีตรรกะและวัตถุที่รวมกันซึ่งฉันไม่ชอบ เวอร์ชั่นด้านขวาคือความพยายามของฉัน เหตุผลยังคงเป็นวิธีการประยุกต์ไหลระหว่าง UI และ DAL แต่มีแนวโน้มที่คุณสมบัติไม่ ... เพียงวิธีการ (ส่วนใหญ่ของการเรียนในชั้นนี้อาจเป็นไปได้ที่จะเป็นแบบคงที่ที่พวกเขาไม่จัดเก็บใด …

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