ฉันคิดว่าตัวเลือกที่ 2 ไม่ใช่ตัวเลือกที่แย่ แต่อาจไม่จำเป็น บริการไมโครช่วยให้คุณจัดการกับความต้องการของแอปพลิเคชั่นหลาย ๆ
ปัจจัยใหญ่ที่นี่คือถ้ามีความแตกต่างระหว่างทั้งสอง schema และถ้าเคยจะมีในอนาคต
โดยปกติฉันคิดว่าการใช้ส่วนต่อประสานสำหรับที่เก็บข้อมูลนั้นไม่จำเป็น อย่างไรก็ตามมันอาจจะคุ้มค่ากับความพยายามในกรณีนี้ โรงงานที่เก็บจะมีความสำคัญสำหรับคุณ
ปัญหาของฉันกับตัวเลือก 1 คือว่าเฉพาะเจาะจงเกินไป คุณควรจะสามารถไปจากการตั้งค่าที่คุณอธิบายไปยังสองอินสแตนซ์ที่แยกจากกันแต่ละชี้ไปยังฐานข้อมูลของตัวเองได้อย่างง่ายดาย แอปพลิเคชันไม่ควรใส่ใจว่าข้อมูลของคุณมาจากที่ใด
ในขณะที่สคีมานั้นไม่แตกต่างกันสำหรับฐานข้อมูลทั้งสองที่แตกต่างกันของคุณคุณสามารถให้ที่เก็บหนึ่งอันจัดการกับทั้งคู่ได้อย่างง่ายดาย
public class MyEntityRepository : ISavesMyEntity, IGetsMyEntity
{
public MyEntityRepository(string connectionString)
{
_connectionString = connectionString;
}
}
public class MyEntitySaverFactory
{
public ISavesMyEntity GetSaver(User user)
{
if (user.IsUK)
return new MyEntityRepository(Config.Get("UKConnString"));
if (user.IsUS)
return new MyEntityRepository(Config.Get("USConnString"));
throw new NotImplementedException();
}
}
//USE
ISavesMyEntity saver = factory.GetSaver(currentUser);
saver.Save(myEntityInstance);
หาก schemas DB แตกต่างกันระหว่างสหรัฐอเมริกาและสหราชอาณาจักรคุณจะแบ่งการทำงานออกเป็นสองที่เก็บที่ต่างกันโดยสิ้นเชิง นี่จะเป็นเรื่องง่ายเนื่องจากสิ่งที่คุณต้องทำคือเปลี่ยนโรงงานของคุณ