ก่อนอื่นฉันอยากจะบอกว่านี่เป็นคำถาม / ประเด็นที่ถูกทอดทิ้งดังนั้นหากคำถามนี้ต้องการการปรับปรุงให้ช่วยฉันทำสิ่งนี้ให้เป็นคำถามที่ดีที่จะเป็นประโยชน์ต่อผู้อื่น! ฉันกำลังมองหาคำแนะนำและความช่วยเหลือจากผู้ที่ใช้งานโซลูชันที่แก้ไขปัญหานี้ไม่ใช่แค่แนวคิดที่จะลอง
จากประสบการณ์ของฉันมีแอพพลิเคชั่นสองด้าน - ด้าน "งาน" ซึ่งส่วนใหญ่ขับเคลื่อนด้วยโดเมนและเป็นที่ที่ผู้ใช้โต้ตอบอย่างล้นหลามกับโมเดลโดเมน ("เอ็นจิ้น" ของแอปพลิเคชัน) และด้านการรายงาน รับข้อมูลตามสิ่งที่เกิดขึ้นในงาน
ในด้านงานเป็นที่ชัดเจนว่าแอปพลิเคชันที่มีรูปแบบโดเมนที่หลากหลายควรมีตรรกะทางธุรกิจในรูปแบบโดเมนและฐานข้อมูลควรใช้เป็นหลักในการคงอยู่เป็นส่วนใหญ่ การแยกข้อกังวลหนังสือทุกเล่มเขียนเกี่ยวกับเรื่องนี้เรารู้ว่าต้องทำอะไรดีเลิศ
แล้วด้านรายงานล่ะ คลังข้อมูลยอมรับได้หรือไม่หรือมีการออกแบบที่ไม่ดีเพราะรวมตรรกะทางธุรกิจไว้ในฐานข้อมูลและข้อมูลเอง ในการรวบรวมข้อมูลจากฐานข้อมูลลงในข้อมูลคลังข้อมูลคุณต้องใช้ตรรกะทางธุรกิจและกฎกับข้อมูลและตรรกะและกฎนั้นไม่ได้มาจากรูปแบบโดเมนของคุณมาจากกระบวนการรวบรวมข้อมูลของคุณ มันผิดหรือเปล่า?
ฉันทำงานกับแอปพลิเคชันการจัดการทางการเงินและโครงการขนาดใหญ่ซึ่งมีตรรกะทางธุรกิจที่กว้างขวาง เมื่อรายงานข้อมูลนี้ฉันมักจะมีการรวมจำนวนมากที่ต้องทำเพื่อดึงข้อมูลที่จำเป็นสำหรับรายงาน / แดชบอร์ดและการรวมมีตรรกะทางธุรกิจจำนวนมาก เพื่อประสิทธิภาพฉันได้ทำกับตารางรวมที่สูงและขั้นตอนการจัดเก็บ
ตัวอย่างเช่นสมมติว่ารายงาน / แดชบอร์ดจำเป็นต้องแสดงรายการของโครงการที่ใช้งานอยู่ (จินตนาการ 10,000 โครงการ) แต่ละโครงการจะต้องมีชุดของตัวชี้วัดที่แสดงพร้อมตัวอย่างเช่น:
- งบประมาณรวม
- ความพยายามในวันที่
- อัตราการเผาไหม้
- วันหมดงบประมาณที่อัตราการเขียนปัจจุบัน
- เป็นต้น
แต่ละรายการเกี่ยวข้องกับตรรกะทางธุรกิจจำนวนมาก และฉันไม่เพียงแค่พูดถึงการคูณตัวเลขหรือตรรกะง่ายๆ ฉันกำลังพูดถึงเพื่อที่จะได้รับงบประมาณคุณต้องใช้แผ่นอัตราที่มี 500 อัตราที่แตกต่างกันหนึ่งรายการสำหรับเวลาพนักงานแต่ละคน (ในบางโครงการโครงการอื่น ๆ มีตัวคูณ) ใช้ค่าใช้จ่ายและมาร์กอัปที่เหมาะสม ฯลฯ ตรรกะนั้นกว้างขวาง การรวบรวมและการปรับแต่งแบบสอบถามใช้เวลามากในการรับข้อมูลนี้ในเวลาที่เหมาะสมสำหรับลูกค้า
ควรดำเนินการผ่านโดเมนก่อนหรือไม่ แล้วประสิทธิภาพล่ะ แม้จะมีการสืบค้น SQL แบบตรง แต่ฉันก็แทบจะไม่ได้รับข้อมูลนี้เร็วพอสำหรับให้ลูกค้าแสดงในระยะเวลาที่เหมาะสม ฉันนึกภาพไม่ออกว่าจะพยายามนำข้อมูลนี้ไปให้กับลูกค้าเร็วพอหากฉันคืนความชุ่มชื้นให้กับวัตถุโดเมนทั้งหมดและผสมและจับคู่และรวมข้อมูลของพวกเขาในเลเยอร์แอปพลิเคชันหรือพยายามรวบรวมข้อมูลในแอปพลิเคชัน
ดูเหมือนว่าในกรณีเหล่านี้ว่า SQL นั้นดีในการ crunching data และทำไมไม่ใช้มัน? แต่คุณมีเหตุผลทางธุรกิจนอกโมเดลโดเมนของคุณ การเปลี่ยนแปลงใด ๆ กับตรรกะทางธุรกิจจะต้องมีการเปลี่ยนแปลงในรูปแบบโดเมนของคุณและแผนการรวมการรายงานของคุณ
ฉันสูญเสียวิธีการออกแบบส่วนการรายงาน / แดชบอร์ดของแอปพลิเคชันใด ๆ ที่เกี่ยวกับการออกแบบที่ขับเคลื่อนด้วยโดเมนและแนวปฏิบัติที่ดี
ฉันเพิ่มแท็ก MVC เนื่องจาก MVC เป็นรสนิยมการออกแบบและฉันใช้มันในการออกแบบปัจจุบันของฉัน แต่ไม่สามารถระบุได้ว่าข้อมูลการรายงานเข้ากับแอปพลิเคชันประเภทนี้อย่างไร
ฉันกำลังมองหาความช่วยเหลือใด ๆ ในบริเวณนี้ - หนังสือ, รูปแบบการออกแบบ, คำสำคัญสำหรับ google, บทความ, อะไรก็ได้ ฉันไม่พบข้อมูลใด ๆ ในหัวข้อนี้
แก้ไขและตัวอย่างอื่น
อีกตัวอย่างที่สมบูรณ์แบบที่ฉันเจอในวันนี้ ลูกค้าต้องการรายงานสำหรับทีมขายลูกค้า พวกเขาต้องการสิ่งที่ดูเหมือนเป็นเมตริกง่ายๆ:
สำหรับพนักงานขายแต่ละคนยอดขายประจำปีของพวกเขาจนถึงปัจจุบันเป็นเท่าใด
แต่นั่นซับซ้อน พนักงานขายแต่ละคนมีส่วนร่วมในโอกาสการขายที่หลากหลาย บางคนชนะ แต่ก็ไม่ทำ ในแต่ละโอกาสการขายมีคนขายหลายคนที่แต่ละคนจัดสรรเปอร์เซ็นต์เครดิตสำหรับการขายต่อบทบาทและการมีส่วนร่วมของพวกเขา ตอนนี้ลองนึกภาพว่าจะต้องผ่านโดเมนสำหรับสิ่งนี้ ... จำนวนการคืนสภาพวัตถุที่คุณต้องทำเพื่อดึงข้อมูลนี้จากฐานข้อมูลสำหรับพนักงานขายทุกคน:
รับทั้งหมด
SalesPeople
->
สำหรับแต่ละคนจะได้รับSalesOpportunities
->
สำหรับแต่ละคนจะได้รับเปอร์เซ็นต์ของยอดขายและคำนวณยอดขายของพวกเขา
จากนั้นเพิ่มSalesOpportunity
ยอดขาย ทั้งหมดของพวกเขา
และนั่นคือหนึ่งตัวชี้วัด หรือคุณสามารถเขียนแบบสอบถาม SQL ซึ่งสามารถทำได้อย่างรวดเร็วและมีประสิทธิภาพและปรับแต่งให้รวดเร็ว
แก้ไข 2 - รูปแบบ CQRS
ฉันได้อ่านเกี่ยวกับรูปแบบของ CQRSและในขณะที่น่าสนใจแม้แต่มาร์ตินฟาวเลอร์ก็บอกว่ามันไม่ผ่านการทดสอบ ดังนั้นปัญหานี้ได้รับการแก้ไขในอดีตอย่างไร ทุกคนต้องเผชิญกับปัญหานี้ในบางจุดหรืออย่างอื่น อะไรคือวิธีการที่ได้รับการยอมรับหรือเป็นที่นิยมด้วยประวัติความสำเร็จ?
แก้ไข 3 - ระบบการรายงาน / เครื่องมือ
อีกสิ่งที่ควรพิจารณาในบริบทนี้คือเครื่องมือการรายงาน Reporting Services / Crystal Reports, Analysis Services และ Cognoscenti ฯลฯ ทั้งหมดคาดหวังข้อมูลจาก SQL / ฐานข้อมูล ฉันสงสัยว่าข้อมูลของคุณจะเข้ามาในธุรกิจของคุณในภายหลัง และพวกเขาและคนอื่น ๆ เช่นพวกเขาเป็นส่วนสำคัญของการรายงานในระบบขนาดใหญ่จำนวนมาก ข้อมูลสำหรับสิ่งเหล่านี้ได้รับการจัดการอย่างเหมาะสมอย่างไรที่มีแม้แต่ตรรกะทางธุรกิจในแหล่งข้อมูลสำหรับระบบเหล่านี้และในรายงานของตัวเอง?