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

14
ผู้จัดการเลือกภาษาการเขียนโปรแกรมอย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา ไม่ใช่ความลับสำหรับทุกคนที่ผู้จัดการสามารถและมักจะกำหนดภาษาการเขียนโปรแกรมที่จะใช้สำหรับโครงการ ในฐานะโปรแกรมเมอร์เองฉันไม่เคยเข้าใจสิ่งนี้เลย แต่ตอนนี้ฉันคิดว่าฉันทำ: ฉันเพิ่งได้รับการเปิดเผยเมื่อ Joel Spolsky พูดในพอดคาสต์ว่าพวกเขาควรใช้ QuickBooks เพราะ "นักบัญชีทุกคนในโลกรู้" สิ่งนี้ทำให้ฉันรู้สึกคล้ายกับ "เลือก Java เพราะโปรแกรมเมอร์ทุกคนในโลกรู้" ตอนนี้ฉันได้เห็นปัญหาเดียวกันจากมุมมองอื่นฉันไม่ทราบมากเกี่ยวกับการบัญชี แต่ฉันรู้อะไรบางอย่างเกี่ยวกับการเขียนโปรแกรมฉันสงสัยว่าโปรแกรมเมอร์สามารถช่วยให้แน่ใจได้อย่างไรว่าภาษาโปรแกรมที่ถูกเลือกถูกเลือกสำหรับโครงการ ?

8
กลยุทธ์ / อัลกอริทึมเพื่อแบ่งทีมที่ยุติธรรมโดยอ้างอิงจากประวัติ
เราเป็นกลุ่มคนที่เล่นฟลอร์บอลด้วยกันเป็นประจำ ทุกเซสชั่นเริ่มต้นด้วยภารกิจที่น่ากลัวของการแบ่งทีม ... ดังนั้นจะมีอะไรดีไปกว่าแอปพลิเคชันในการเลือกทีมโดยอัตโนมัติ ดังนั้นด้วยประวัติของการรวมทีมและผลลัพธ์และรายชื่อของผู้คนที่ปรากฏตัวในเซสชั่นนี้สิ่งที่จะเป็นกลยุทธ์ที่ดีในการหาทีมที่ดีที่สุด? ตามความเหมาะสมฉันหมายถึงทีมงานเท่าที่จะทำได้ ความคิดใด ๆ แก้ไข: เพื่อให้ชัดเจนข้อมูลที่ฉันต้องใช้ในการเลือกจะเป็นดังนี้: [{ team1: ["playerA", "playerB", "playerC"], team2: ["playerD", "playerE", "playerF"], goals_team1: 10, goals_team2: 8 }, { team1: ["playerD", "playerB", "playerC"], team2: ["playerA", "playerE", "playerG"], goals_team1: 2, goals_team2: 5 }, { team1: ["playerD", "playerB", "playerF"], team2: ["playerA", "playerE", "playerC"], goals_team1: 4, goals_team2: …

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

6
ข้อดีของรูปแบบกลยุทธ์
ทำไมจึงเป็นประโยชน์ในการใช้รูปแบบกลยุทธ์หากคุณสามารถเขียนโค้ดของคุณใน if / then cases? ตัวอย่างเช่น: ฉันมีคลาส TaxPayer และหนึ่งในวิธีการของมันจะคำนวณภาษีโดยใช้อัลกอริทึมที่แตกต่างกัน เหตุใดจึงไม่มีกรณีและกรณีและคิดว่าอัลกอริธึมที่จะใช้ในวิธีการนั้นแทนที่จะใช้รูปแบบกลยุทธ์หรือไม่ นอกจากนี้ทำไมคุณไม่สามารถใช้วิธีแยกต่างหากสำหรับแต่ละอัลกอริทึมในคลาส TaxPayer ได้ นอกจากนี้มันหมายความว่าอัลกอริทึมที่จะเปลี่ยนที่รันไทม์?

2
การปรับใช้เป็นศูนย์การหยุดทำงาน - Schema Db การนำส่ง
การใช้ Zero Downtime Deploymentประสบปัญหาเดียวกัน แต่ฉันต้องการคำแนะนำเกี่ยวกับกลยุทธ์ที่ฉันกำลังพิจารณา บริบท แอปพลิเคชันบนเว็บพร้อม Apache / PHP สำหรับการประมวลผลฝั่งเซิร์ฟเวอร์และฐานข้อมูล MySQL / ระบบไฟล์เพื่อการคงอยู่ ขณะนี้เรากำลังสร้างโครงสร้างพื้นฐาน ฮาร์ดแวร์ระบบเครือข่ายทั้งหมดจะมีความซ้ำซ้อนและสายเคเบิลเครือข่ายหลักทั้งหมดจะถูกใช้ในคู่ที่ถูกผูกมัดสำหรับการป้องกันความผิดพลาด เซิร์ฟเวอร์กำลังได้รับการกำหนดค่าให้เป็นคู่ที่มีความพร้อมใช้งานสูงสำหรับความทนทานต่อข้อผิดพลาดของฮาร์ดแวร์และจะมีความสมดุลของโหลดสำหรับทั้งการยอมรับข้อบกพร่องของเครื่องเสมือนและประสิทธิภาพทั่วไป มันเป็นความตั้งใจของฉันที่เราสามารถใช้การปรับปรุงกับแอปพลิเคชันโดยไม่ต้องหยุดทำงาน ฉันใช้ความเจ็บปวดอย่างมากเมื่อออกแบบโครงสร้างพื้นฐานเพื่อให้แน่ใจว่าฉันสามารถให้เวลาได้ 100% มันน่าผิดหวังอย่างยิ่งที่มีเวลาหยุดทำงาน 10-15 นาทีทุกครั้งที่มีการอัปเดต สิ่งนี้มีความสำคัญอย่างยิ่งเนื่องจากเราตั้งใจที่จะมีวงจรการเผยแพร่ที่รวดเร็วมาก (บางครั้งอาจถึงหนึ่งหรือมากกว่านั้นต่อวัน โครงสร้างเครือข่าย นี่เป็นบทสรุปของเครือข่าย: Load Balancer |----------------------------| / / \ \ / / \ \ | Web Server | DB Server | Web Server | DB Server …

7
รูปแบบกลยุทธ์สามารถดำเนินการได้โดยไม่แตกสาขาหรือไม่
รูปแบบกลยุทธ์ใช้งานได้ดีเพื่อหลีกเลี่ยงขนาดใหญ่หาก ... สร้างและทำให้ง่ายต่อการเพิ่มหรือแทนที่ฟังก์ชั่น อย่างไรก็ตามมันยังคงมีข้อบกพร่องหนึ่งในความคิดของฉัน ดูเหมือนว่าในการดำเนินการทุกครั้งยังคงต้องมีการสร้างการแยกทาง อาจเป็นไฟล์จากโรงงานหรือไฟล์ข้อมูล เป็นตัวอย่างใช้ระบบการสั่งซื้อ โรงงาน: // All of these classes implement OrderStrategy switch (orderType) { case NEW_ORDER: return new NewOrder(); case CANCELLATION: return new Cancellation(); case RETURN: return new Return(); } รหัสหลังจากนี้ไม่จำเป็นต้องกังวลและมีเพียงที่เดียวที่จะเพิ่มประเภทคำสั่งซื้อใหม่ในขณะนี้ แต่ส่วนของรหัสนี้ยังไม่สามารถขยายได้ การดึงออกมาเป็นไฟล์ข้อมูลช่วยให้อ่านง่ายขึ้น (ฉันรู้ว่าเป็นที่ถกเถียงกัน): <strategies> <order type="NEW_ORDER">com.company.NewOrder</order> <order type="CANCELLATION">com.company.Cancellation</order> <order type="RETURN">com.company.Return</order> </strategies> แต่สิ่งนี้ยังคงเพิ่มรหัสสำเร็จรูปในการประมวลผลไฟล์ข้อมูล - รับได้ง่ายขึ้นหน่วยทดสอบและรหัสที่ค่อนข้างเสถียร แต่ความซับซ้อนเพิ่มเติม …

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

2
คลาสบริบทในรูปแบบกลยุทธ์
ฉันพยายามที่จะเข้าใจรูปแบบกลยุทธ์และถามตัวเองว่า: คลาสบริบทต้องมีหรือฉันสามารถละทิ้งมันโดยไม่ลดทอนจุดประสงค์ของรูปแบบ? ฉันตกอยู่ในความประทับใจฉันต้องการสวิตช์บางอย่างสำหรับอ่านไฟล์ประเภทต่าง ๆ แต่ไม่ต้องการแฮ็กข้อมูลและจัดการกับการรีแฟคเตอร์ใหม่ในภายหลัง (แม้ว่าแน่นอนว่ามันเกิดขึ้นเสมอว่าโค้ดสามารถรีเฟรชได้ แต่ความคิดคือ: ลอง จะฉลาดเท่าที่จะเป็นไปได้ในการออกแบบล่วงหน้า ... ): ภาพที่นำมาจากวิกิมีเดีย ลูกค้าสามารถมอบหมายโดยตรงไปยังส่วนต่อประสานกลยุทธ์หรือมีบางสิ่งที่ฉันเพิ่งพลาดที่จะเข้าใจเกี่ยวกับคลาสบริบทหรือไม่ interface Reader { // read information from file and fill data list field of Client readFile(); } class ExcelReader implements Reader{ /* */ } class PdfReader implements Reader{ /* */} class Client{ // strategic choice Reader r; …

2
การสืบทอดบริบทเป็นเช่นที่แสดงโดยตัวอย่างเป็ดของ Head First Design Patterns ซึ่งไม่เกี่ยวข้องกับรูปแบบกลยุทธ์หรือไม่
ในHead First Design Patternsมันสอนรูปแบบกลยุทธ์โดยใช้ตัวอย่าง Duck ที่ subclasses ที่แตกต่างกันของ Duck สามารถกำหนดพฤติกรรมเฉพาะที่รันไทม์ จากความเข้าใจของฉันจุดประสงค์ของรูปแบบกลยุทธ์คือการเปลี่ยนพฤติกรรมของวัตถุเดี่ยวที่รันไทม์ แต่พวกเขากำลังใช้การสืบทอดของ Duck เพื่อเปลี่ยนพฤติกรรมของ Duck ชนิดต่างๆ ความสัมพันธ์กัน? การสืบทอดบริบทของเป็ดนั้นไม่เกี่ยวข้องกับรูปแบบกลยุทธ์หรือการเปลี่ยนแปลงประเภทเป็ดและการเปลี่ยนแปลงพฤติกรรมของพวกเขาเป็นเหตุผลที่ดีที่จะใช้รูปแบบกลยุทธ์หรือไม่ สถานการณ์ที่คุณต้องการเปลี่ยนแปลงทั้งสองอย่างนั้นเป็นเหตุผลที่ดีที่จะใช้รูปแบบกลยุทธ์หรือไม่ เหตุใดพวกเขาจึงรวมสิ่งนี้เป็นตัวอย่างรูปแบบกลยุทธ์? ตัวอย่างที่เรียบง่าย ฉันสามารถทำให้ตัวอย่างนี้ง่ายขึ้นโดยแค่มีคลาส Duck (ไม่มีคลาสที่ได้รับ) หรือไม่ จากนั้นเมื่อนำวัตถุเป็ดหนึ่งชิ้นมาใช้จะสามารถกำหนดพฤติกรรมที่แตกต่างกันตามสถานการณ์บางอย่างที่ไม่ได้ขึ้นอยู่กับประเภทวัตถุของตัวเอง ตัวอย่างเช่นการเปลี่ยนแปลง FlyBehavior ตามสภาพอากาศหรือการเปลี่ยนแปลง QuackBehavior ตามช่วงเวลาของวันหรือว่าเป็ดหิวแค่ไหน ฉันรู้ว่านี่จะเป็นการแก้ปัญหาที่แตกต่างจากในหนังสือ แต่สิ่งที่ฉันกำลังมองหาคือตัวอย่างรูปแบบกลยุทธ์ที่เกี่ยวข้องเพื่อถอยกลับ ตัวอย่างด้านบนของฉันจะเป็นรูปแบบกลยุทธ์ด้วยหรือไม่ แก้ไข: ผมเป็นคนที่ประสบความสำเร็จในการหาง่าย 2 ตัวอย่างรูปแบบกลยุทธ์ที่ปฏิบัติตามอย่างเคร่งครัดมากขึ้นที่จะเป็นรูปแบบเพียงกลยุทธ์โดยไม่ต้องมรดกบริบท: Hunter.javaและsolver.py
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.