ฉันกำลังพิจารณาโครงการเพื่อเป็นส่วนหนึ่งของ SOA โยกย้ายตาม WCF ของเรามากกว่าที่จะเป็นรูปแบบรถบัสบริการ (อาจ nServiceBus) และการใช้บางขั้นพื้นฐานผับย่อยเพื่อให้บรรลุการแยกคำสั่ง Query
ฉันไม่ใช่คนใหม่สำหรับ SOA หรือแม้แต่กับโมเดลบัสเซอร์วิส แต่ฉันยอมรับว่าจนกระทั่งเมื่อเร็ว ๆ นี้แนวคิดเรื่อง "การแยก" ของฉันนั้น จำกัด อยู่ที่การสะท้อนและการจำลองฐานข้อมูล แต่ถึงกระนั้นฉันก็ยังดึงดูดความคิดเพราะมันดูเหมือนจะให้ประโยชน์ทั้งหมดของระบบที่สอดคล้องกันในที่สุดในขณะที่หลีกเลี่ยงข้อเสียที่เห็นได้ชัดหลายประการ (โดยเฉพาะอย่างยิ่งการขาดการสนับสนุนการทำธุรกรรมที่เหมาะสม)
ฉันได้อ่านเรื่องราวมากมายจากอุดีดาฮันซึ่งโดยทั่วไปเป็นปรมาจารย์ในสถาปัตยกรรม ESB (อย่างน้อยในโลก Microsoft) แต่สิ่งหนึ่งที่เขาบอกว่าทำให้ฉันปริศนา:
เมื่อเรามีเอนทิตีที่ใหญ่ขึ้นและมีฟิลด์มากขึ้นเราก็มีนักแสดงมากขึ้นที่ทำงานกับเอนทิตี้เดียวกันเหล่านั้นและยิ่งมีโอกาสมากขึ้นที่บางสิ่งจะสัมผัสคุณลักษณะบางอย่างของพวกเขาในเวลาใดก็ตาม
[ ... ]
องค์ประกอบหลักของ CQRS กำลังคิดทบทวนการออกแบบส่วนต่อประสานกับผู้ใช้เพื่อให้เราสามารถจับภาพความตั้งใจของผู้ใช้ของเราได้ว่าการทำให้ลูกค้าเป็นที่ต้องการนั้นเป็นหน่วยงานที่แตกต่างกันสำหรับผู้ใช้มากกว่าการบ่งชี้ว่าลูกค้าย้ายไปแล้ว แต่งงาน การใช้ UI ที่มีลักษณะคล้าย Excel สำหรับการเปลี่ยนแปลงข้อมูลไม่ได้หมายถึงเจตนาตามที่เราเห็นด้านบน
- Udi Dahan ชี้แจง CQRS
จากมุมมองที่อธิบายไว้ในใบเสนอราคาเป็นการยากที่จะโต้แย้งกับตรรกะนั้น แต่ดูเหมือนว่าจะขัดแย้งกับธัญพืชด้วยความเคารพต่อ SOA SOA (และการบริการทั่วไปโดยทั่วไป) ควรจัดการกับข้อความหยาบๆ เพื่อลดการพูดคุยเครือข่าย - ท่ามกลางประโยชน์อื่น ๆ
ฉันรู้ว่าเครือข่ายการพูดคุยไร้สาระมีปัญหาน้อยลงเมื่อคุณมีระบบที่มีการกระจายสูงโดยมีการจัดคิวข้อความที่ดีและไม่มีสัมภาระของ RPC แต่ดูเหมือนจะไม่ฉลาดที่จะยกเลิกปัญหาทั้งหมด Udi เกือบจะบอกว่าการเปลี่ยนคุณสมบัติทุกอย่าง (เช่นการอัพเดทภาคสนาม) ควรจะเป็นคำสั่งของตัวเองซึ่งยากที่จะจินตนาการในบริบทของผู้ใช้หนึ่งคนที่อาจอัพเดทเอนทิตีรวมกันหลายร้อยหรือหลายพันรายการ บริการเว็บ.
การปรับปรุงชุดหนึ่งใน SQL Server อาจใช้เวลาเศษเสี้ยววินาทีให้กับแบบสอบถามที่มีพารามิเตอร์ที่ดีพารามิเตอร์ที่มีมูลค่าของตารางหรือการแทรกจำนวนมากไปยังตารางการแสดง การประมวลผลการอัพเดทเหล่านี้ครั้งละหนึ่งครั้งนั้นช้า, ช้า, ช้าและฮาร์ดแวร์ฐานข้อมูล OLTP นั้นมีราคาแพงที่สุดในการขยาย / ย่อ
มีวิธีใดบ้างที่จะกระทบยอดข้อกังวลเหล่านี้ ฉันกำลังคิดเกี่ยวกับมันในทางที่ผิด? ปัญหานี้มีวิธีแก้ปัญหาที่รู้จักกันดีในโลก CQS / ESB หรือไม่?
ถ้าไม่เช่นนั้นแล้วใครจะตัดสินว่า "ระดับที่เหมาะสม" ของความละเอียดในการบัญชาการควรเป็นอย่างไร มี "มาตรฐาน" หนึ่งสามารถใช้เป็นจุดเริ่มต้น - เรียงลำดับเช่น 3NF ในฐานข้อมูล - และเบี่ยงเบนเฉพาะเมื่อโปรไฟล์อย่างระมัดระวังแนะนำผลประโยชน์ที่อาจเกิดขึ้นอย่างมีนัยสำคัญ?
หรือนี่อาจเป็นหนึ่งในสิ่งเหล่านั้นที่แม้จะมีความคิดเห็นที่แข็งแกร่งหลายอย่างที่แสดงออกโดยผู้เชี่ยวชาญหลายคน