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

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

1
ปรับปรุงไดอะแกรมตรรกะและสถาปัตยกรรมฟิสิคัลให้ทันสมัยอยู่เสมอ
ในโครงการพัฒนาซอฟต์แวร์ใด ๆ ที่เกี่ยวข้องกับระบบกระจายที่มีผู้พัฒนาหลายคนการใช้ Logical และ Physical Architecture diagrams เป็นแนวปฏิบัติที่ดีที่สุด แต่จากประสบการณ์ของฉันไดอะแกรมเหล่านี้เริ่มต้นจากการดูแลรักษาอย่างดีตั้งแต่เริ่มโครงการ แต่ไม่ได้รับการปรับปรุง และขั้นตอนการบำรุงรักษาจะเริ่มขึ้น สำหรับโครงการที่ซับซ้อนที่มีกระบวนการกระจายจำนวนมากไดอะแกรมมีแนวโน้มที่จะล้าสมัยหรือไม่ถูกต้องอย่างรวดเร็วแม้กระทั่งก่อนการเปิดตัวครั้งแรกเนื่องจากไม่มีใครมีความรู้ทั้งหมด ด้วยภูมิหลังนี้ฉันต้องการถามคำถามต่อไปนี้กับชุมชน: สำคัญอย่างไรที่มีไดอะแกรมตรรกะและฟิสิคัลสถาปัตยกรรมที่ทันสมัยและแม่นยำ? มีเครื่องมือและกระบวนการใดบ้างที่สามารถช่วยให้ทันสมัยอยู่เสมอ? ใครควรเป็นผู้รับผิดชอบในการทำให้พวกเขาทันสมัย ผู้ดูแลระบบผู้พัฒนาและทีมงานควบคุมคุณภาพสามารถมีส่วนร่วมได้อย่างไร?

4
ทำอย่างไรให้พอดีกับกฎของเอ็นจินในสถาปัตยกรรมไมโครเซอร์วิสเมื่อต้องการข้อมูลอินพุตจำนวนมาก?
สถานการณ์ปัจจุบัน เรากำลังดำเนินการ (และตอนนี้ยังคงรักษา) เว็บแอปพลิเคชันการช็อปปิ้งออนไลน์ในสถาปัตยกรรม microservice หนึ่งในความต้องการก็คือธุรกิจจะต้องสามารถใช้กฎกับสิ่งที่ลูกค้าของเราเพิ่มลงในรถเข็นของพวกเขาเพื่อปรับแต่งประสบการณ์ของพวกเขาและลำดับท้ายที่สุด เห็นได้ชัดว่าต้องวางเอ็นจิ้นกฎทางธุรกิจและเราได้ใช้ "บริการไมโคร" ที่เฉพาะเจาะจงสำหรับสิ่งนี้ (ถ้าเรายังคงเรียกมันได้) ในช่วงหนึ่งปีที่ผ่านมาเอ็นจินกฎนี้มีความซับซ้อนมากขึ้นเรื่อย ๆ ต้องการข้อมูลมากขึ้น (เช่นเนื้อหาของรถเข็น แต่ยังรวมถึงข้อมูลผู้ใช้บทบาทของเขาบริการที่มีอยู่ของเขาข้อมูลการเรียกเก็บเงินบางอย่างเป็นต้น) เพื่อให้สามารถ คำนวณกฎเหล่านั้น ในขณะนี้shopping-cartmicroservice ของเรากำลังรวบรวมข้อมูลทั้งหมดจาก microservices อื่น ๆ แม้ว่าส่วนหนึ่งของข้อมูลนี้จะถูกใช้งานโดยshopping-cartส่วนใหญ่จะใช้เพื่อป้อนกฎของเครื่องมือเป็นส่วนใหญ่ ข้อกำหนดใหม่ ตอนนี้มาถึงความต้องการแอปพลิเคชั่น / ไมโครไซต์อื่นเพื่อนำเอ็นจินกฎกลับมาใช้ใหม่สำหรับข้อกำหนดที่คล้ายกัน ในสถานการณ์ปัจจุบันพวกเขาจะต้องส่งข้อมูลชนิดเดียวกันเรียกไมโครไซต์เดียวกันและสร้าง (เกือบ) ทรัพยากรเดียวกันเพื่อให้สามารถเรียกเครื่องมือกฎ ดำเนินการต่อตามที่เป็นอยู่เราจะเผชิญกับปัญหาหลายประการ: ทุกคน (เรียกเครื่องมือกฎ) ต้องนำการดึงข้อมูลกลับมาใช้ใหม่แม้ว่าพวกเขาจะไม่ต้องการมัน การร้องขอไปยังเอ็นจินกฎมีความซับซ้อน ต่อไปในทิศทางนี้เราจะต้องขนส่งข้อมูลนี้ไปทั่วเครือข่ายสำหรับคำขอจำนวนมาก (คิดว่าμs A μsโทรμs B เรียกเครื่องมือกฎ แต่ A มีข้อมูลที่ต้องการกฎเครื่องยนต์อยู่แล้ว); shopping-cart ได้กลายเป็นใหญ่เนื่องจากการดึงข้อมูลทั้งหมด ฉันอาจลืม ... เราจะทำอย่างไรเพื่อหลีกเลี่ยงปัญหาเหล่านี้ เป็นการดีที่เราจะหลีกเลี่ยงการเพิ่มความซับซ้อนมากขึ้นในเครื่องมือกฎ …

2
การอนุญาตของผู้ใช้ด้วย microservices
microservices ควรรับผิดชอบในการจัดการการอนุญาตของตนเองหรือคุณคิดว่าจะดีกว่าที่จะมีการให้บริการการอนุญาตแยกต่างหากที่ใช้ร่วมกันในทุกส่วนย่อย (ภายในโดเมนธุรกิจเดียวกัน) ของ microservices สำหรับฉันแล้วมันมีเหตุผลมากกว่าที่จะทำให้ง่ายต่อการใช้การเปลี่ยนแปลงบังคับใช้นโยบาย เป็น DRY เป็นต้นอย่างไรก็ตามสามารถออกจากมือได้อย่างง่ายดายด้วยบริการทุกประเภทที่ทิ้งกฎไว้ในที่เดียวและยังกังวลเกี่ยวกับค่าใช้จ่ายของเครือข่าย ความคิดใด ๆ

5
ฉันจะรู้ได้อย่างไรว่าคอมพิวเตอร์ของฉันเป็นสถาปัตยกรรมฮาร์วาร์ดหรือฟอนนอยมันน์
ฉันเข้าใจความแตกต่างระหว่างสถาปัตยกรรมทั้งสองคือการแยกคำสั่งจากข้อมูลในสถาปัตยกรรมฮาร์วาร์ด แต่ฉันจะรู้ได้อย่างไรว่าฉันใช้ระบบประเภทใด เป็นไปได้ไหมที่จะเขียนโปรแกรมเพื่อให้โปรแกรมพิจารณาว่าระบบเป็น von Neumann หรือ Harvard หรือไม่? อาจมีสถาปัตยกรรมอื่นหรือสถาปัตยกรรมเหล่านี้เป็นที่รู้จักกันเท่านั้น?

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

4
วัตถุธุรกิจภายใน Data Access Layer
ดังนั้นฉันจึงสร้าง data access layer ผ่านทาง TDD และได้เข้าหาข้อกังวลเล็กน้อย ฉันไม่ควรเริ่มต้นเส้นทางที่ผิดดังนั้นฉันคิดว่าฉันขอให้พวกคุณดูว่าความคิดของฉันสอดคล้องกับสถาปัตยกรรมที่สะอาดหรือไม่ วิธีการภายใน Data Access Layer ของฉัน (สั้นสำหรับ DAL) จะค่อนข้างง่าย พวกเขาเป็นไปตามขั้นตอนการจัดเก็บในฐานข้อมูล (ไม่มีวิธีอื่นในการโทรเข้าเพื่อรักษาความสะอาด) และพวกเขามีพารามิเตอร์เดียวกันกับที่ทำ พวกเขาเพียงแค่เชื่อมต่อกับฐานข้อมูลและส่งคืนผลลัพธ์แบบสอบถาม นี่คือตัวอย่างหนึ่ง: public int DeleteRecord(int recordId) { recordId.RequireThat("recordId").NotZeroOrLess(); List<SqlParameter> parameters = new List<SqlParameter>(); parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId}); return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray()); …

5
คุณใช้ประโยชน์จากหลักการแบบเปิดหรือไม่
หลักการ open-closed (OCP) ระบุว่าควรเปิดวัตถุสำหรับส่วนขยาย แต่ปิดเพื่อทำการปรับเปลี่ยน ฉันเชื่อว่าฉันเข้าใจและใช้งานร่วมกับ SRP เพื่อสร้างคลาสที่ทำสิ่งเดียวเท่านั้น และฉันพยายามสร้างวิธีการขนาดเล็กจำนวนมากที่ทำให้สามารถแยกการควบคุมพฤติกรรมทั้งหมดออกเป็นวิธีที่อาจขยายหรือแทนที่ในคลาสย่อยบางประเภท ดังนั้นฉันจบลงด้วยคลาสที่มีคะแนนส่วนขยายมากมายไม่ว่าจะเป็น: การฉีดและองค์ประกอบ, เหตุการณ์, การมอบหมาย ฯลฯ พิจารณาคลาสที่เรียบง่ายและขยายได้ดังต่อไปนี้ class PaycheckCalculator { // ... protected decimal GetOvertimeFactor() { return 2.0M; } } ตอนนี้พูดเช่นว่าการOvertimeFactorเปลี่ยนแปลง 1.5 ตั้งแต่ระดับดังกล่าวข้างต้นได้รับการออกแบบมาเพื่อขยายฉันสามารถ subclass OvertimeFactorและกลับที่แตกต่างกัน แต่ ... แม้จะมีคลาสที่ถูกออกแบบมาสำหรับการขยายและการยึดติดกับ OCP ฉันจะแก้ไขวิธีการที่เป็นปัญหามากกว่าซับคลาสและแทนที่วิธีการที่มีปัญหา ด้วยเหตุนี้ฉันจึงละเมิดส่วนหนึ่งของความพยายามของ OCP ที่จะทำให้สำเร็จ รู้สึกเหมือนฉันเพิ่งขี้เกียจเพราะสิ่งที่กล่าวมานั้นง่ายกว่านิดหน่อย ฉันเข้าใจ OCP ผิดหรือเปล่า? ฉันควรจะทำอะไรที่แตกต่างออกไปจริงๆเหรอ? คุณใช้ประโยชน์จาก OCP ต่างกันหรือไม่ อัปเดต …

3
ตรรกะทางธุรกิจที่ควรนั่งในสถาปัตยกรรมบริการไมโคร?
ยังคงพยายามคลุมหัวของฉันรอบ ๆ สถาปัตยกรรมไมโครบริการเนื่องจากฉันคุ้นเคยกับวิธีการแบบเสาหิน สมมติว่าเราพยายามสร้างระบบการจอง Uber ที่ง่ายมาก เพื่อลดความซับซ้อนของสิ่งที่เราสมมติว่าเรามี 3 บริการและ API ประตูสำหรับไคลเอนต์: Booking, Drivers, Notificationและเรามีขั้นตอนการทำงานต่อไปนี้: เมื่อสร้างการจองใหม่: ตรวจสอบว่าผู้ใช้ปัจจุบันมีการจองแล้ว รับรายการไดรเวอร์ที่มี ส่งการแจ้งเตือนไปยังผู้ขับขี่เพื่อรับการจอง คนขับรับการจอง สมมติว่าการส่งข้อความทั้งหมดทำได้ผ่านการโทร http แทนที่จะส่งข้อความบัสเช่นคาฟคาเพื่อให้ทุกอย่างง่ายขึ้น ดังนั้นในกรณีนี้ฉันคิดว่าBookingบริการสามารถทำการตรวจสอบการจองที่มีอยู่ แต่ใครจะได้รับรายชื่อของไดรเวอร์และการแจ้งเตือนที่มีอยู่ ฉันกำลังคิดที่จะทำในระดับเกตเวย์ แต่ตอนนี้ตรรกะแบ่งออกเป็นสองที่: Gateway - รับรายการไดรเวอร์ที่มีอยู่ + ส่งการแจ้งเตือน Booking - ตรวจสอบการจองที่มีอยู่ และฉันค่อนข้างแน่ใจว่าเกตเวย์ไม่ใช่สถานที่ที่เหมาะสมที่จะทำ แต่ฉันรู้สึกว่าถ้าเราทำในBookingบริการมันจะกลายเป็นคู่แน่น? เพื่อให้มันซับซ้อนยิ่งขึ้นจะเกิดอะไรขึ้นถ้าเรามีโครงการอื่นที่ต้องการนำระบบการจองกลับมาใช้ใหม่ แต่ด้วยตรรกะทางธุรกิจของมันเอง นั่นเป็นเหตุผลที่ฉันคิดว่าจะทำในระดับเกตเวย์เพื่อให้เกตเวย์โครงการใหม่สามารถมีตรรกะทางธุรกิจของตัวเองแยกต่างหากจากที่มีอยู่ อีกวิธีหนึ่งในการทำฉันคิดว่าแต่ละโครงการมีบริการจองของตัวเองที่จะพูดคุยกับบริการจองหลัก แต่ฉันไม่แน่ใจว่าวิธีที่ดีที่สุดที่นี่ :-)

3
สถาปัตยกรรมซอฟต์แวร์กับสถาปัตยกรรมของระบบเทียบกับคลาสไดอะแกรม?
ฉันค่อนข้างสับสนเกี่ยวกับเงื่อนไขดังต่อไปนี้: สถาปัตยกรรมซอฟต์แวร์ สถาปัตยกรรมแอปพลิเคชันซอฟต์แวร์เป็นกระบวนการของการกำหนดโซลูชันที่มีโครงสร้างที่ตรงตามข้อกำหนดทางเทคนิคและการดำเนินงานทั้งหมดในขณะที่ปรับแต่งคุณสมบัติคุณภาพทั่วไปเช่นประสิทธิภาพความปลอดภัยและความสามารถในการจัดการ มันเกี่ยวข้องกับชุดของการตัดสินใจบนพื้นฐานของปัจจัยที่หลากหลายและการตัดสินใจแต่ละครั้งอาจมีผลกระทบอย่างมากต่อคุณภาพประสิทธิภาพการบำรุงรักษาและความสำเร็จโดยรวมของแอปพลิเคชัน ( microsoft ) ระบบสถาปัตยกรรม สถาปัตยกรรมระบบเป็นรูปแบบแนวคิดที่กำหนดโครงสร้างพฤติกรรมและมุมมองเพิ่มเติมของระบบ 1คำอธิบายสถาปัตยกรรมเป็นคำอธิบายอย่างเป็นทางการและเป็นตัวแทนของระบบการจัดระเบียบในลักษณะที่สนับสนุนการให้เหตุผลเกี่ยวกับโครงสร้างและพฤติกรรมของระบบ ( wiki ) คลาสไดอะแกรม ในวิศวกรรมซอฟต์แวร์คลาสไดอะแกรมใน Unified Modeling Language (UML) เป็นไดอะแกรมโครงสร้างแบบสแตติกที่อธิบายโครงสร้างของระบบโดยการแสดงคลาสของระบบคุณลักษณะการดำเนินงาน (หรือเมธอด) และความสัมพันธ์ระหว่างวัตถุ ( วิกิ ) ถ้าฉันอ่านคำอธิบายเหล่านี้ทั้งหมดอธิบายการโต้ตอบระหว่างโมดูลต่าง ๆ ของแอปพลิเคชัน อย่างไรก็ตามความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร? สิ่งที่ฉันคิด / พยายามเปรียบเทียบคำเหล่านี้ : คลาสไดอะแกรมไม่ใช่รูปแบบของสถาปัตยกรรมระบบเนื่องจากคำอธิบายข้างต้น ( structure, behavior, and more views of a system) บอกเป็นนัยว่าไม่มีรายละเอียดการนำไปปฏิบัติในสถาปัตยกรรมในขณะที่แผนภาพคลาสอธิบายถึงการนำไปปฏิบัติและอาจเป็นไปในทิศทางของการออกแบบมากกว่าสถาปัตยกรรม? ฉันคิดว่าสถาปัตยกรรมของระบบเป็นสถาปัตยกรรมที่มีการโต้ตอบภายนอก (เช่นฐานข้อมูล) ในขณะที่สถาปัตยกรรมซอฟต์แวร์มุ่งเน้นไปที่แอปพลิเคชันเอง

1
สถาปัตยกรรมหัวหอมกับสถาปัตยกรรม 3 ชั้น
ฉันเห็นเฉพาะประโยชน์ของสถาปัตยกรรมหัวหอมเหนือสถาปัตยกรรม 3 ชั้นที่ BL มีความรับผิดชอบในการเรียกใช้เมธอดบน DAL (หรืออินเตอร์เฟสของ DAL) เพื่อทำ CRUD หัวหอมมีการแยกความกังวลการทดสอบการบำรุงรักษาที่ดีขึ้นและสะอาดขึ้น ดังนั้นสถาปัตยกรรมหัวหอมจึงดีกว่าในทุกด้านและสถาปัตยกรรมแบบ 3 ชั้นเป็นเพียงวิธีเก่า ๆ ในการทำสิ่งต่าง ๆ หรือมีบางสถานการณ์ที่ฉันควรจะใช้สถาปัตยกรรมแบบ 3 ชั้นถ้าเป็นเช่นนั้น

1
แบ่งการพัฒนาสแต็ค - ตามแนวทแยง?
เรามีโครงการใหม่ที่เกิดขึ้นและในขณะที่นักพัฒนาได้ถูกแบ่งออกเป็นสองทีมทีม A และทีม B โครงการนี้มี 2 ส่วนซึ่งจำเป็นต้องมีการพัฒนาตลอดทั้งกองพัฒนา ตัวอย่างสแต็กของเราที่แสดงด้านล่างง่ายมาก: แต่ละส่วนของโครงการต้องการการพัฒนาข้ามสแต็คทั้งหมดดังนั้นโดยทั่วไปฉันคาดหวังว่าแนวทางการพัฒนาสแต็คเต็มรูปแบบซึ่งเป็นวิธีที่เราแยกย่อยงานของเราภายในทีม B การออกแบบและการโต้ตอบระหว่างส่วนต่าง ๆ อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ว่าทีม A ต้องการรับผิดชอบบางส่วนของสแต็กและพวกเขากำลังเสนอการแบ่งแยกระหว่างสองทีมที่ Data Abstraction Layer (และวางเนื้อหาใน Data layer) ถูกจัดการโดย ตัวเองโดยไม่มีการพัฒนาจากทีม B. การแบ่งจะดูคล้ายกับ: สำหรับฉันแล้วมันรู้สึกไม่เป็นธรรมชาติมาก แต่ละทีมมีวัตถุประสงค์และระยะเวลาที่แตกต่างกันในการบรรลุเป้าหมายเหล่านี้ แต่ทีม B จะต้องพึ่งพาทีม A ในการใช้คุณสมบัติ วิธีแก้ปัญหาที่เสนอคืออินเตอร์เฟสทั่วไปถูกกำหนดไว้ล่วงหน้า (อาจมีระยะเวลา 2 ปีในโครงการเพื่อให้สามารถใช้งานได้จำนวนมาก) ทีม A จะพัฒนาบิตที่ต้องการให้กับอินเทอร์เฟซเหล่านี้ แต่เนิ่นๆแม้ว่าจะมีชุดเป้าหมายเป็นของตัวเองในขณะที่ทีม B จะเรียกสายทั้งหมดในระยะสั้นเพื่อให้พวกเขาสามารถดำเนินการต่อไปได้ ฉันมีความกังวลเกี่ยวกับวิธีการนี้เกี่ยวกับ: อินเทอร์เฟซอาจเปลี่ยนแปลงและทีม A อาจไม่มีแบนด์วิดท์หรือเวลาเพื่อรองรับความต้องการที่เปลี่ยนแปลง ข้อบกพร่องในรหัสของทีม A …

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

2
การซิงโครไนซ์ระหว่างสองระบบโดยใช้ MongoDB เป็น changelog
เรากำลังพัฒนาสองระบบที่เกี่ยวข้อง หนึ่งในนั้น (A) จะถูกติดตั้งบนเครื่องของลูกค้าของเรา องค์กรของฉันจะใช้ส่วนที่เหลือ (B) แต่ละระบบมีฐานข้อมูลของตัวเอง (สัมพันธ์) และสกีมาของพวกเขาแตกต่างกัน อย่างไรก็ตามทั้งสองระบบจะต้องทำข้อมูลให้ตรงกัน นอกจากนี้การเปลี่ยนแปลงบางอย่างใน B จะต้องส่งออกไปยังระบบคลาส A ทั้งหมดและอื่น ๆ ไปยังการเปลี่ยนแปลงที่เฉพาะเจาะจง ลูกค้าบางรายไม่มีการเชื่อมต่ออินเทอร์เน็ตดังนั้นในบางกรณีต้องทำข้อมูลให้ตรงกันผ่านการแลกเปลี่ยนไฟล์ ดังนั้นเราจึงวางแผนที่จะแก้ไขปัญหานี้ดังต่อไปนี้: แต่ละระบบรักษาการเปลี่ยนแปลงของฐานข้อมูล เรากำลังวางแผนที่จะนำไปใช้กับ MongoDB เมื่อระบบเริ่มต้นกระบวนการซิงโครไนซ์ระบบจะดึงการเปลี่ยนแปลงที่ทำทั้งหมดจากบันทึก หากระบบเป็น B การเปลี่ยนแปลงที่ดึงมาขึ้นอยู่กับปลายทาง จากนั้นระบบจะจัดลำดับพวกเขาในรูปแบบ XML และในที่สุดก็ส่งพวกเขา (ผ่านไฟล์หรือเครือข่าย) เมื่อปลายทางอื่นได้รับเซ็ตการแก้ไขมันจะยกเลิกการตั้งค่า จากนั้นระบบจะทำการแปลงข้อมูลบางอย่างซึ่งจำเป็นและในที่สุดก็บันทึกการเปลี่ยนแปลง ในขั้นตอนนี้ถ้าจำเป็นระบบจะต้องแก้ไขข้อขัดแย้งที่อาจมีอยู่ ขั้นสุดท้ายระบบรับจะส่งการเปลี่ยนแปลง (และผลิตภัณฑ์อื่น ๆ ของการแก้ไขข้อขัดแย้ง) วิธีนี้เป็นไปได้ปรับขนาดได้และสง่างามหรือไม่? คุณต้องการเปลี่ยนแปลงหรือเพิ่มเติมสิ่งใด

4
ทางเลือกแทนมรดกหลายอย่างสำหรับสถาปัตยกรรมของฉัน (NPC ในเกมกลยุทธ์เรียลไทม์)?
การเข้ารหัสไม่ว่าหนักจริง ส่วนที่ยากคือการเขียนโค้ดที่อ่านเข้าใจง่าย ดังนั้นฉันต้องการได้นักพัฒนาที่ดีขึ้นและสร้างสถาปัตยกรรมที่มั่นคง ดังนั้นฉันต้องการสร้างสถาปัตยกรรมสำหรับNPCในวิดีโอเกม มันเป็นเกม Realtime Strategy เช่น Starcraft, Age of Empires, Command & Conquers ฯลฯ ดังนั้นฉันจะมี NPC หลายแบบ NPC สามารถมีความสามารถจำนวนมาก (วิธีการ) ของเหล่านี้: Build(), และFarm()Attack() ตัวอย่าง: คนทำงานสามารถBuild()และFarm() นักรบสามารถAttack() CitizenสามารถBuild(), Farm()และAttack() ชาวประมงสามารถFarm()และAttack() ฉันหวังว่าทุกอย่างจะชัดเจน ดังนั้นตอนนี้ฉันมีประเภท NPC และความสามารถของพวกเขา แต่ลองมาที่ด้านเทคนิค / โปรแกรมด้านเทคนิค สถาปัตยกรรมการเขียนโปรแกรมที่ดีสำหรับ NPC ชนิดต่าง ๆ ของฉันจะเป็นอย่างไร โอเคฉันสามารถมีคลาสพื้นฐานได้ จริงๆแล้วฉันคิดว่านี่เป็นวิธีที่ดีในการยึดมั่นในหลักการของDRY ดังนั้นฉันสามารถมีวิธีการเหมือนWalkTo(x,y)ในคลาสพื้นฐานของฉันเนื่องจาก NPC ทุกคนจะสามารถเคลื่อนไหวได้ แต่ตอนนี้มาถึงปัญหาที่แท้จริง ฉันจะใช้ความสามารถของฉันได้ที่ไหน …

3
สถาปัตยกรรมที่พูดแล้ว abstraction layer ของฐานข้อมูลเช่น Entity Framework ของ Microsoft ทำให้ความต้องการ Data Access Layer แยกจากกันหรือไม่?
วิธีที่มันเป็น เป็นเวลาหลายปีที่ฉันจัดระเบียบโซลูชันซอฟต์แวร์ของฉันเช่น: Data Access Layer (DAL) เป็นนามธรรมธุรกิจของการเข้าถึงข้อมูล Business Logic Layer (BLL) เพื่อใช้กฎธุรกิจกับชุดข้อมูลจัดการการตรวจสอบความถูกต้อง ฯลฯ Utilities (Util) ซึ่งเป็นเพียงไลบรารีของวิธีการใช้งานทั่วไปที่ฉันสร้างขึ้นเมื่อเวลาผ่านไป Presentation Layer ซึ่งแน่นอนว่าอาจเป็นเว็บเดสก์ท็อปมือถือหรืออะไรก็ตาม วิธีที่มันเป็นตอนนี้ สำหรับสี่ปีที่ผ่านมาหรือดังนั้นฉันใช้ Entity Framework ของ Microsoft (ฉันมีอำนาจเหนือกว่า. dev dev) และฉันพบว่าการมี DAL กลายเป็นเรื่องยุ่งยากมากกว่าการทำความสะอาดเพราะบัญชี Entity Framework ได้ทำไปแล้ว งานที่ DAL ของฉันเคยทำ: มันสรุปธุรกิจของการรัน CRUDs กับฐานข้อมูล ดังนั้นฉันมักจะจบลงด้วย DAL ที่มีคอลเลกชันของวิธีการเช่นนี้: public static IQueryable<SomeObject> GetObjects(){ var db = …

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