オプション2は悪いものではないと思いますが、必要ではないかもしれません。マイクロサービスは、複数のアプリケーションのニーズに対応するためのものです。
ここでの大きな要因は、2つのスキーマに違いがあるかどうか、そして将来あるかどうかです。
通常、リポジトリにインターフェイスを使用する必要はないと思います。ただし、この場合は努力する価値があるかもしれません。リポジトリファクトリは重要です。
オプション1の私の問題は、あまりにも具体的であるということです。説明したセットアップから、それぞれが独自のDBを指す2つの別々のインスタンスに簡単に移動できるはずです。アプリケーションは、データを取得する場所を気にするべきではありません。
スキーマは2つの異なるデータベースで違いはありませんが、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);
DBスキーマが米国と英国で異なる場合、機能を2つの完全に異なるリポジトリに分割します。あなたがしなければならないのはあなたの工場を変えるだけなので、これは簡単でしょう。