รูปแบบกลยุทธ์ใช้งานได้ดีเพื่อหลีกเลี่ยงขนาดใหญ่หาก ... สร้างและทำให้ง่ายต่อการเพิ่มหรือแทนที่ฟังก์ชั่น อย่างไรก็ตามมันยังคงมีข้อบกพร่องหนึ่งในความคิดของฉัน ดูเหมือนว่าในการดำเนินการทุกครั้งยังคงต้องมีการสร้างการแยกทาง อาจเป็นไฟล์จากโรงงานหรือไฟล์ข้อมูล เป็นตัวอย่างใช้ระบบการสั่งซื้อ
โรงงาน:
// 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>
แต่สิ่งนี้ยังคงเพิ่มรหัสสำเร็จรูปในการประมวลผลไฟล์ข้อมูล - รับได้ง่ายขึ้นหน่วยทดสอบและรหัสที่ค่อนข้างเสถียร แต่ความซับซ้อนเพิ่มเติม
นอกจากนี้โครงสร้างแบบนี้ไม่ได้ทำการทดสอบการรวมเข้าด้วยกัน ตอนนี้แต่ละกลยุทธ์อาจทดสอบได้ง่ายกว่า แต่ทุกกลยุทธ์ที่คุณเพิ่มเข้าไปนั้นมีความซับซ้อนในการทดสอบ มันน้อยกว่าที่คุณจะมีหากคุณไม่ได้ใช้รูปแบบ แต่ก็ยังมีอยู่
มีวิธีการนำรูปแบบกลยุทธ์มาใช้เพื่อลดความซับซ้อนนี้หรือไม่? หรือนี่เป็นเรื่องง่ายอย่างที่ได้รับและการพยายามที่จะดำเนินการต่อไปจะเพิ่มเลเยอร์ของการเพิ่มเลเยอร์นามธรรมอีกเล็กน้อยเพื่อไม่ให้เกิดประโยชน์หรือไม่?
eval
... อาจไม่ทำงานใน Java แต่อาจเป็นภาษาอื่น?