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

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

4
เหตุใดการออกแบบจำนวนมากจึงไม่สนใจการทำให้เป็นมาตรฐานใน RDBMS
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ ฉันได้เห็นการออกแบบมากมายที่การทำให้เป็นมาตรฐานไม่ใช่สิ่งแรกที่ต้องพิจารณาในขั้นตอนการตัดสินใจ ในหลายกรณีการออกแบบเหล่านั้นมีคอลัมน์มากกว่า 30 คอลัมน์และแนวทางหลักคือ "วางทุกอย่างไว้ในที่เดียวกัน" ตามสิ่งที่ฉันจำได้ว่าการทำให้เป็นมาตรฐานเป็นหนึ่งในสิ่งแรกที่สำคัญที่สุดดังนั้นทำไมบางครั้งมันถึงหลุดง่าย? แก้ไข: มันเป็นความจริงหรือไม่ที่สถาปนิกและผู้เชี่ยวชาญที่ดีเลือกการออกแบบที่ผิดปกติในขณะที่นักพัฒนาที่ไม่มีประสบการณ์เลือกตรงกันข้าม อะไรคือข้อโต้แย้งในการเริ่มต้นการออกแบบของคุณโดยคำนึงถึงการฟื้นฟูสภาพ

6
แผนภาพคลาส UML เพียงพอสำหรับการออกแบบระบบ JavaScript หรือไม่
ระบุว่า UML นั้นมุ่งเน้นไปที่แนวทางแบบคลาสสิกมากขึ้นในการวางแนววัตถุมันยังคงใช้งานได้ในวิธีที่เชื่อถือได้ในการออกแบบระบบ JavaScript หรือไม่? ปัญหาเฉพาะอย่างหนึ่งที่ฉันเห็นได้คือแผนภาพคลาสนั้นอันที่จริงแล้วความคิดเห็นเชิงโครงสร้างของระบบและ JavaScript เป็นตัวขับเคลื่อนพฤติกรรมที่มากขึ้นคุณจะจัดการกับมันอย่างไร โปรดจำไว้ว่าฉันไม่ได้พูดถึงโดเมนโลกแห่งความจริงที่นี่; มันเป็นแบบจำลองสำหรับการแก้ปัญหาที่ฉันพยายามทำให้สำเร็จ

8
เราจะตัดสินใจได้อย่างไรว่าควรออกแบบวัตถุชนิดข้อมูลให้ไม่เปลี่ยนรูปหรือไม่
ฉันชอบ "รูปแบบ" ที่ไม่เปลี่ยนแปลงเนื่องจากจุดแข็งของมันและในอดีตฉันพบว่ามันมีประโยชน์ต่อระบบการออกแบบที่มีชนิดข้อมูลที่ไม่เปลี่ยนรูปแบบ (บางส่วนหรือเกือบทั้งหมด) บ่อยครั้งที่ฉันทำเช่นนั้นฉันพบว่าตัวเองเขียนบั๊กน้อยลงและการดีบักง่ายขึ้นมาก อย่างไรก็ตามเพื่อนของฉันโดยทั่วไปอายห่างจากไม่เปลี่ยนรูป พวกเขาไม่ได้ไม่มีประสบการณ์เลย (ห่างไกลจากมัน) แต่พวกเขาก็เขียนวัตถุข้อมูลแบบคลาสสิก - สมาชิกส่วนตัวที่มีทะเยอทะยานและเป็นตัวตั้งค่าสำหรับสมาชิกทุกคน จากนั้นโดยปกติ Constructor ของพวกเขาจะไม่มีการโต้แย้งหรืออาจจะเป็นเพียงการโต้แย้งเพื่อความสะดวก บ่อยครั้งที่การสร้างวัตถุมีลักษณะดังนี้: Foo a = new Foo(); a.setProperty1("asdf"); a.setProperty2("bcde"); บางทีพวกเขาทำอย่างนั้นทุกที่ บางทีพวกเขาอาจไม่ได้กำหนดนวกรรมิกที่ใช้ทั้งสองสายไม่ว่าพวกเขาจะสำคัญแค่ไหน และบางทีพวกเขาอาจไม่เปลี่ยนค่าของสตริงเหล่านั้นในภายหลังและไม่จำเป็นต้องทำ เห็นได้ชัดว่าถ้าสิ่งเหล่านั้นเป็นจริงวัตถุจะได้รับการออกแบบที่ดีขึ้นไม่เปลี่ยนรูปใช่มั้ย (ตัวสร้างใช้คุณสมบัติทั้งสองไม่มีตัวตั้งค่าเลย) คุณจะตัดสินใจได้อย่างไรว่าประเภทวัตถุควรได้รับการออกแบบให้ไม่เปลี่ยนรูป? มีเกณฑ์ที่ดีในการตัดสินด้วยหรือไม่ ขณะนี้ฉันกำลังถกเถียงกันว่าจะเปลี่ยนประเภทข้อมูลบางอย่างในโครงการของฉันเป็นแบบไม่เปลี่ยนรูปแบบหรือไม่ แต่ฉันจะต้องพิสูจน์ให้เพื่อนของฉันดูและข้อมูลในประเภทนั้นอาจเปลี่ยนแปลงได้ มันเป็นวิธีที่ไม่เปลี่ยนรูปแบบ (สร้างขึ้นใหม่คัดลอกคุณสมบัติจากวัตถุเก่ายกเว้นวิธีที่คุณต้องการเปลี่ยน) แต่ฉันไม่แน่ใจว่านี่เป็นเพียงความรักของฉันที่ไม่สามารถแสดงผ่านได้หรือถ้ามีความต้องการที่แท้จริงสำหรับ / ประโยชน์จากพวกเขา

8
มีเทคนิคหรือแบบทดสอบที่ดีสำหรับประเภทการตั้งชื่อหรือไม่
คำถามเปิดกว้างที่น่าอึดอัดใจ แต่มันเป็นปัญหาที่ฉันต้องเผชิญกับ: ซอฟต์แวร์ที่ง่ายต่อการบำรุงรักษาและใช้งานด้วยซอฟต์แวร์ที่ออกแบบมาอย่างดี การพยายามออกแบบให้ใช้งานง่ายหมายถึงการตั้งชื่อคอมโพเนนต์ของคุณในลักษณะที่นักพัฒนาซอฟต์แวร์รายต่อไปควรสามารถสรุปการทำงานของส่วนประกอบ นี่คือเหตุผลที่เราไม่ตั้งชื่อคลาสของเรา "Type1", "Type2" เป็นต้น เมื่อคุณกำลังสร้างแบบจำลองแนวคิดในโลกแห่งความเป็นจริง (เช่นลูกค้า) สิ่งนี้ง่ายเหมือนการตั้งชื่อประเภทของคุณหลังจากที่แนวคิดแบบโลกแห่งความจริงถูกจำลอง แต่เมื่อคุณสร้างสิ่งที่เป็นนามธรรมซึ่งเป็นระบบมากขึ้นมันง่ายมากที่จะหมดชื่อซึ่งง่ายต่อการอ่านและย่อยง่าย มันแย่ลง (สำหรับฉัน) เมื่อพยายามตั้งชื่อตระกูลประเภทโดยใช้ประเภทฐานหรือส่วนต่อประสานที่อธิบายถึงองค์ประกอบที่ต้องทำ แต่ไม่ใช่วิธีการทำงาน สิ่งนี้นำไปสู่แต่ละประเภทที่ได้มาโดยพยายามอธิบายถึงรสชาติของการนำไปใช้ (เช่นIDataConnectionและSqlConnectionใน. NET Framework) แต่คุณจะแสดงบางสิ่งที่ซับซ้อนเช่น "ทำงานโดยสะท้อนและมองหาชุดคุณลักษณะเฉพาะ" ได้อย่างไร จากนั้นเมื่อคุณเลือกชื่อสำหรับประเภทที่คุณคิดว่าอธิบายว่ามันกำลังพยายามทำอะไรเพื่อนร่วมงานของคุณถามว่า "WTF ทำสิ่งนี้ได้DomainSecurityMetadataProviderจริงหรือไม่ " มีเทคนิคที่ดีหรือไม่ในการเลือกชื่อที่มีความหมายดีสำหรับส่วนประกอบหรือจะสร้างกลุ่มขององค์ประกอบโดยไม่ต้องใช้ชื่อที่ยุ่งเหยิงหรือไม่? มีการทดสอบอย่างง่าย ๆ ที่ฉันสามารถนำไปใช้กับชื่อเพื่อให้เกิดความรู้สึกที่ดีขึ้นไม่ว่าจะเป็นชื่อ "ดี" หรือไม่
23 design  naming 

11
เลือกความพยายามในการออกแบบรหัสหรือความเกียจคร้านในโลกธนาคาร
ฉันทำงานเป็นเวลาสองปีในวาณิชธนกิจที่ยิ่งใหญ่ ฉันทำโครงการด้านเทคนิคบางอย่างด้วยความปรารถนาที่จะสร้างโค้ดที่มีประสิทธิภาพสูงสุดโดยคำนึงถึงรูปแบบการออกแบบที่ดีที่ปรับได้หลักการ SOLID กฎหมายของ demeter และหลีกเลี่ยงรหัสที่ซ้ำกันทุกประเภท ... เมื่อส่งมอบในการผลิต => ศูนย์ข้อบกพร่องทั้งหมดเกิดขึ้นตามที่คาดไว้ แต่นักพัฒนาส่วนใหญ่มาหาฉันเพื่อที่จะแม่นยำว่ารหัสของฉันทั้งหมดนั้นซับซ้อนเกินไปสำหรับการอ่านเพื่อความเข้าใจ ฉันฟังตัวอย่างเช่น: "ทำบางอย่างถ้าและอินสแตนซ์ของลืมความหลากหลายเพื่อที่จะแก้ไขข้อบกพร่องการผลิตฉุกเฉินได้อย่างง่ายดาย" ฉันไม่ชอบตอบ ...... การรู้ว่านักพัฒนาเหล่านี้ไม่อยากรู้อยากเห็นเลยปฏิเสธความพยายามที่จะเข้าใจการออกแบบที่ดี (ตัวอย่างเช่น 90% ของผู้พัฒนาไม่รู้ว่าอะไรคือรูปแบบกลยุทธ์และสร้างรหัสขั้นตอนและไม่เคยออกแบบเพราะพวกเขาต้องการ ) ผู้จัดการโครงการของฉันบอกว่าฉันผิดจริง ๆ และเป็นนักอุดมคติในโลกของธนาคาร คุณจะแนะนำอะไรให้ฉัน ฉันควรรักษาความปรารถนาของรหัสที่ดีจริง ๆ หรือปรับให้ฉันเป็นนักพัฒนาส่วนใหญ่ที่ฉันทำซ้ำไม่น่าสนใจจริงๆโดยการออกแบบรหัสตามที่ฉันความงามทั้งหมดของงานนักพัฒนาของเรา หรือในทางตรงกันข้ามพวกเขาควรเรียนรู้หลักการ OO ขั้นพื้นฐานและแนวปฏิบัติที่ดีที่สุดเพื่อปรับตัวให้เข้ากับรหัสของฉันหรือไม่?

9
มอบหมาย vs อินเทอร์เฟซ - มีคำชี้แจงเพิ่มเติมอีกหรือไม่
หลังจากอ่านบทความ - เมื่อใดควรใช้ผู้ได้รับมอบหมายแทนการเชื่อมต่อ (คู่มือการเขียนโปรแกรม C #)ฉันต้องการความช่วยเหลือในการทำความเข้าใจจุดที่กำหนดด้านล่างซึ่งฉันพบว่าไม่ชัดเจน (สำหรับฉัน) ตัวอย่างหรือคำอธิบายโดยละเอียดสำหรับสิ่งเหล่านี้? ใช้ผู้รับมอบสิทธิ์เมื่อ: ใช้รูปแบบการออกแบบเหตุการณ์ มันเป็นที่พึงปรารถนาที่จะแค็ปซูลวิธีการคงที่ ต้องการองค์ประกอบที่ง่าย คลาสอาจต้องการการใช้งานมากกว่าหนึ่งวิธี ใช้อินเทอร์เฟซเมื่อ: มีกลุ่มของวิธีการที่เกี่ยวข้องที่อาจถูกเรียกว่าเป็น คลาสต้องการเพียงหนึ่งการใช้งานเมธอด คำถามของฉันคือ พวกเขาหมายถึงรูปแบบการออกแบบ eventing หรือไม่ วิธีการจัดองค์ประกอบจะง่ายถ้าใช้ผู้รับมอบสิทธิ์ หากมีกลุ่มของวิธีการที่เกี่ยวข้องที่อาจถูกเรียกใช้อินเทอร์เฟซ - มันมีประโยชน์อะไร? ถ้าคลาสต้องการเพียงหนึ่งการใช้งานของวิธีการใช้อินเตอร์เฟซมันเป็นธรรมในแง่ของผลประโยชน์?
23 c#  design  .net 

12
ข้อดีของการจัดเก็บ xml ในฐานข้อมูลเชิงสัมพันธ์คืออะไร
วันนี้ฉันได้พูดคุยกับฐานข้อมูล AdventureWorks และฉันสังเกตเห็นว่ามีตารางจำนวนหนึ่ง ( HumanResources.JobCandidateและ Sales.Individualตัวอย่าง) มีคอลัมน์ที่เก็บข้อมูล xml สิ่งที่ฉันจะรู้ก็คือข้อดีของการจัดเก็บข้อมูลมูลค่าของแถวฐานข้อมูลในคอลัมน์ของตารางอื่นคืออะไร สิ่งนี้ทำให้การสืบค้นข้อมูลนี้ยากหรือไม่ หรือสมมติฐานที่ว่าข้อมูลไม่จำเป็นต้องถูกสอบถามและเพียงแค่ต้องถูกจัดเก็บ?
23 design  database  xml 

10
วิธีที่เหมาะสมในการสร้างเอกสารข้อกำหนดคืออะไร?
ตอนนี้หัวหน้างานของฉันกำลังสร้างเอกสารข้อกำหนด / ข้อกำหนดสำหรับฉันโดยใช้ซอฟต์แวร์การติดตามบั๊ก ดูเหมือนว่าเป็นความคิดที่แย่มากสำหรับฉันความต้องการทั้งหมดอยู่ในตั๋วเล็ก ๆ เหล่านี้และฉันต้องคลิกไปที่เว็บฟอร์มที่เป็นใบ้นี้เพื่อรับสิ่งที่ต้องการ ซอฟแวร์โซลูชั่นที่มีสติสำหรับความต้องการ / รายละเอียดซอฟต์แวร์คืออะไร? เพื่อความชัดเจนฉันกำลังสร้างส่วนประกอบซอฟต์แวร์ขนาดใหญ่ที่มีคุณสมบัติค่อนข้างน้อยและมีการกำหนดคุณสมบัติเหล่านี้ในซอฟต์แวร์ติดตามบั๊กนี้

1
แยกโครงการขนาดใหญ่เพื่อสร้างโครงการ Maven หลายโมดูล
ฉันกำลังทำงานกับแอปพลิเคชัน Spring-MVC ที่เราใช้ Maven สำหรับการจัดการการพึ่งพา เนื่องจากโครงการมีขนาดใหญ่เราจึงคิดแยกโครงการออกเป็นหลายส่วน ฉันมีข้อสงสัยบางอย่างซึ่งฉันหวังว่าจะได้รับคำตอบที่นี่ ขณะนี้เรากำลังปรับใช้ไฟล์ WAR ไฟล์เดียวเช่นเดียวROOT.warกับ Apache tomcat บนเซิร์ฟเวอร์ของเรา เนื่องจากโครงการมีขนาดใหญ่จึงมีบางส่วนในเว็บแอปเช่นการแจ้งเตือนและอีเมลบริการของบุคคลที่สาม PUSH (Cometd) REST API และอื่น ๆ ปัจจุบันทั้งหมดของพวกเขาอยู่ในสโมสรและขึ้นอยู่กับกันและกัน ตัวอย่างเช่นNotificationวัตถุยังขึ้นอยู่กับPersonวัตถุเนื่องจากการแจ้งเตือนนั้นได้รับการปรับแต่งสำหรับผู้ใช้ จุดประสงค์หลักของการแยกโครงการขนาดใหญ่คือการสามารถทำงานกับแต่ละโมดูลเพื่อแก้ไขข้อผิดพลาดการเพิ่มคุณสมบัติการทดสอบ ฯลฯ และเมื่อพอใจแล้วโมดูลนี้เท่านั้นที่สามารถถูกแทนที่บนเซิร์ฟเวอร์แทนแอปพลิเคชันทั้งหมด เป็นไปได้ไหม อย่างที่ฉันได้พูดไปแล้วก่อนหน้านี้มีการพึ่งพาและการจับคู่ระหว่างวัตถุ สิ่งเหล่านั้นจะได้รับการจัดการในโมดูลย่อยที่แตกต่างกันอย่างไรหรือเพียงแค่งบการนำเข้าจะเปลี่ยนเพื่อรวมโครงการอื่น ๆ ดังที่ฉันได้กล่าวไว้ความตั้งใจคือการทำงานกับแต่ละโมดูลและสามารถปรับใช้ (ดีกว่าร้อนกว่า) ปัจจุบันเรามีไฟล์ WAR ไฟล์เดียวROOT.warเท่านั้น การแยกจะสร้างไฟล์ war หลายไฟล์ซึ่งจะถูกเรียกโดย URL ว่าdomain-name.com/module_name/some_mapping? ขณะนี้ฉันกำลังตรวจสอบเอกสาร แต่นี่คือวัตถุประสงค์หลักที่เราต้องการบรรลุด้วยโมดูลที่จัดทำโดย Maven และสนใจที่จะรู้ว่าสิ่งนี้เป็นไปได้หรือไม่ หากมีข้อมูลเพิ่มเติมใด ๆ ที่จำเป็นโปรดแจ้งให้เราทราบ ขณะนี้ฉันกำลังใช้ POM ผู้ปกครองจากฤดูใบไม้ผลิดังนี้: <parent> …

3
ความแตกต่างระหว่าง API และส่วนหน้า - ส่วนหลัง
ฉันกำลังพยายามเขียนเว็บไซต์ธุรกิจ "มาตรฐาน" โดย "มาตรฐาน" ฉันหมายถึงเว็บไซต์นี้ใช้ HTML5, CSS และ Javascript ปกติสำหรับ front-end, back-end (เพื่อประมวลผลข้อมูล) และรัน MySQL สำหรับฐานข้อมูล มันเป็นเว็บไซต์ CRUD ขั้นพื้นฐาน: Front-end ทำสิ่งที่ฐานข้อมูลมีอยู่ แบ็กเอนด์เขียนไปยังฐานข้อมูลอะไรก็ตามที่ผู้ใช้ป้อนและทำการประมวลผลบางอย่าง เช่นเดียวกับไซต์ส่วนใหญ่ที่ออกมี ในการสร้างที่เก็บ Github ของฉันที่จะเริ่มต้นการเข้ารหัส, ฉันได้ตระหนักถึงฉันไม่เข้าใจความแตกต่างระหว่างfront-end หลังสิ้นสุดและAPI อีกวิธีในการใช้คำถามของฉันคือ: API เข้ามาในรูปภาพนี้ที่ไหน ฉันจะเขียนรายละเอียดเพิ่มเติมจากนั้นคำถามที่ฉันมี - หวังว่านี่จะช่วยให้พวกคุณมีความคิดที่ดีขึ้นว่าคำถามจริงของฉันคืออะไรเพราะฉันสับสนจนฉันไม่รู้คำถามที่จะถาม รายละเอียดเพิ่มเติมบางส่วน: ฉันต้องการลองใช้รูปแบบ Model-View-Controller ฉันไม่รู้ว่านี่เป็นการเปลี่ยนแปลงคำถาม / คำตอบหรือไม่ API จะสงบ ฉันต้องการให้back-end ของฉันใช้ API ของตัวเองแทนการอนุญาตให้ back-end โกงและโทรสอบถามพิเศษ ฉันคิดว่าสไตล์นี้มีความสอดคล้องมากกว่า คำถามของฉัน: …

9
เป็นเรื่องปกติ / ยอมรับได้ที่จะจดบันทึกความคิดอัลกอริธึมการตัดสินใจระหว่างการเข้ารหัสและการบำรุงรักษาหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา บางคนมีปัญหานี้ที่พวกเขาไม่สามารถคิดได้หากไม่มีคำพูด และการจดบันทึกความคิดและการตัดสินใจเป็นวิธีที่มีประสิทธิภาพที่สุดในการดำเนินการ ดังนั้น - เป็นเรื่องปกติและเป็นที่ยอมรับหรือไม่ที่ฉันจะเขียนความคิดและการตัดสินใจลงในไฟล์ Notepad ++ บางไฟล์ระหว่างการเข้ารหัส? บางครั้งควรเป็นที่ยอมรับได้เช่นเมื่อสร้างเอกสารทางเทคนิคขึ้นใหม่หรือให้เหตุผลเกี่ยวกับอัลกอริธึมที่ซับซ้อนมากขึ้น แต่บางครั้งมันอาจแปลกเช่นเมื่อฉันกำลังพิจารณาตัวเลือกการออกแบบและพยายามตัดสิน ผลกระทบของการฝึกนี้ต่อผลผลิตไม่ชัดเจน จากด้านหนึ่ง - การใช้เหตุผลกับคำภายในอาจเร็วกว่าคำที่เขียน จากอีกด้านหนึ่ง - ปัญหาที่ซับซ้อนมากขึ้นจำเป็นต้องมีการเขียน นอกจากนี้หากใครมีตัวเลือกการออกแบบมากขึ้นความรู้สึกนั้นดีกว่าเมื่อมีการตัดสินใจเขียนดังนั้นมันจึงเพิ่มขวัญกำลังใจ


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

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

10
over-engineering เป็นสัญญาณเตือนหรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ดังนั้นเราจึงนำเสนอแบบฝึกหัดการเข้ารหัสที่ตรงไปตรงมากับผู้สมัครใหม่ที่มีข้อกำหนดที่กำหนดไว้อย่างดี บางครั้งเราได้รับการแก้ปัญหาซึ่งไม่สามารถแก้ปัญหาได้จริง ๆ แต่ถูกออกแบบมาเพื่อแก้ไขปัญหาที่รับรู้ - บ่อยครั้งที่อยู่นอกขอบเขตของการฝึก ตอนนี้คำถามของฉันคือนี่เป็นสัญญาณเตือนภัยหรือไม่? แก้ไข: ค่อนข้างมากของการสนทนาจะขึ้นอยู่กับการทดสอบที่มีข้อบกพร่อง - ซึ่งเป็นจุดยุติธรรม ตามที่ฉันอธิบายไว้ในความคิดเห็นหลักฐานพื้นฐานของการทดสอบคือการแสดงวิธีที่คุณสามารถอ่านข้อมูลจากไฟล์ในแบบที่เหมาะสม (และคุณจะต้องประหลาดใจกับความหลากหลายของวิธีที่เราเห็น) และวิธีจับคู่ รายการก่อนคำนวณเวลาแฝงระหว่างการอัพเดท ตอนนี้เพื่อให้ทำงานได้ต้องใช้สมมติฐานบางอย่างเกี่ยวกับข้อมูลและเรามองหาสมมติฐานเหล่านี้และเรายังระบุอย่างชัดเจนว่าเราต้องการเห็นแนวทางที่คุณใช้ (รวมถึงวิธีการ OO ฯลฯ ) ทั้งหมดนี้ภายในสองชั่วโมง กรอบเวลา. IMHO เมื่อฉันสัมภาษณ์มันเป็นการออกกำลังกายที่สมบูรณ์ที่สุดที่ฉันพบ สถานการณ์เฉพาะที่ฉันกำลังไตร่ตรองคือผู้สมัครแทนที่จะอ่านจากไฟล์ยอมรับอินพุต "เครือข่าย" ในแอพพลิเคชั่นแบบมัลติเธรดซึ่งไม่ได้อยู่ในขอบเขตอย่างชัดเจน

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