Saya pikir opsi 2 bukan yang buruk, tetapi mungkin tidak diperlukan. Layanan mikro adalah untuk memungkinkan Anda menangani kebutuhan beberapa aplikasi.
Faktor besar di sini, adalah jika ada perbedaan antara kedua skema, dan jika akan ada di masa depan.
Biasanya, saya pikir menggunakan antarmuka untuk repositori tidak perlu; Namun, mungkin sepadan dengan usaha dalam hal ini. Pabrik repositori akan penting bagi Anda.
Masalah saya dengan opsi 1 adalah terlalu spesifik. Anda harus dapat beralih dari pengaturan yang Anda gambarkan, ke dua instance terpisah yang masing-masing menunjuk ke DB-nya sendiri dengan mudah. Aplikasi TIDAK BISA PERAWATAN DI MANA SAJA MENDAPATKAN DATA PERUSAHAAN.
Meskipun skema tidak berbeda untuk dua database Anda yang berbeda, Anda dapat memiliki satu repositori dengan mudah menangani keduanya, tanpa aplikasi mengetahui perbedaannya:
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);
Jika skema DB menjadi berbeda antara AS dan Inggris, maka Anda kemudian akan membagi fungsionalitas menjadi dua repositori yang sama sekali berbeda. Ini akan mudah, karena yang harus Anda lakukan hanyalah mengganti pabrik Anda.