ขณะนี้เรากำลังใช้ Entity Framework เป็น ORM ในเว็บแอปพลิเคชั่นไม่กี่แห่งและจนถึงตอนนี้มันเหมาะกับเราและข้อมูลทั้งหมดของเราจะถูกเก็บไว้ในฐานข้อมูลเดียว เราใช้รูปแบบพื้นที่เก็บข้อมูลและมีบริการ (โดเมนเลเยอร์) ซึ่งใช้สิ่งเหล่านี้และส่งคืนเอนทิตี EF โดยตรงไปยังตัวควบคุม ASP.NET MVC
อย่างไรก็ตามข้อกำหนดได้เกิดขึ้นเพื่อใช้ API ของบุคคลที่สาม (ผ่านบริการบนเว็บ) ซึ่งจะให้ข้อมูลเพิ่มเติมที่เกี่ยวข้องกับผู้ใช้ในฐานข้อมูลของเรา ในฐานข้อมูลผู้ใช้ในพื้นที่ของเราเราจะจัดเก็บ ID ภายนอกซึ่งเราสามารถมอบให้กับ API เพื่อรับข้อมูลเพิ่มเติม มีข้อมูลค่อนข้างน้อย แต่เพื่อความเรียบง่ายหนึ่งในนั้นเกี่ยวข้องกับ บริษัท ของผู้ใช้ (ชื่อผู้จัดการห้องชื่อตำแหน่งงาน ฯลฯ ) ข้อมูลนี้จะถูกใช้ในสถานที่ต่าง ๆ ทั่วทั้งเว็บแอปของเราซึ่งต่างจากการใช้งานในที่เดียว
ดังนั้นคำถามของฉันคือที่ที่ดีที่สุดในการเติมและเข้าถึงข้อมูลนี้ที่ไหน เนื่องจากมีการใช้งานในสถานที่ต่าง ๆ จึงไม่เหมาะสมที่จะดึงข้อมูลมาใช้เป็นหลักในทุกที่ที่เราใช้ในเว็บแอปพลิเคชัน - ดังนั้นจึงเหมาะสมที่จะส่งคืนข้อมูลเพิ่มเติมนี้จากเลเยอร์โดเมน
ความคิดเริ่มต้นของฉันคือการสร้างคลาสโมเดล wrapper ซึ่งจะมีเอนทิตี EF (EFUser) และคลาส 'ApiUser' ใหม่ที่มีข้อมูลใหม่ - และเมื่อเราได้รับผู้ใช้เราจะได้ EFUser จากนั้นรับเพิ่มเติม ข้อมูลจาก API และเติมข้อมูลวัตถุ ApiUser อย่างไรก็ตามในขณะนี้จะเป็นการดีสำหรับการรับผู้ใช้คนเดียวมันตรงข้ามเมื่อรับผู้ใช้หลายคน เราไม่สามารถเข้าถึง API ได้เมื่อรับรายชื่อผู้ใช้
ความคิดที่สองของฉันคือการเพิ่มวิธีการแบบซิงเกิลให้กับเอนทิตี EFUser ซึ่งส่งคืน ApiUser และเพียงเติมเมื่อจำเป็น วิธีนี้จะช่วยแก้ปัญหาดังกล่าวเนื่องจากเราเข้าถึงได้เมื่อเราต้องการเท่านั้น
หรือความคิดสุดท้ายคือการเก็บสำเนาของข้อมูลในฐานข้อมูลของเราในท้องถิ่นและซิงโครไนซ์มันกับ API เมื่อผู้ใช้ลงชื่อเข้าใช้งานนี้มีน้อยมากเนื่องจากเป็นเพียงกระบวนการซิงโครไนซ์ - และเราไม่มีค่าใช้จ่าย DB และ API ทุกครั้งที่เราต้องการรับข้อมูลผู้ใช้ อย่างไรก็ตามสิ่งเหล่านี้หมายถึงการจัดเก็บข้อมูลในสองสถานที่และยังหมายถึงข้อมูลล้าสมัยสำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบชั่วขณะหนึ่ง
ใครบ้างมีคำแนะนำหรือข้อเสนอแนะเกี่ยวกับวิธีที่ดีที่สุดในการจัดการสถานการณ์ประเภทนี้?
it's not really sensible to fetch it on an ad-hoc basis
- ทำไม ด้วยเหตุผลด้านประสิทธิภาพ?