Ich denke, Option 2 ist nicht schlecht, wird aber möglicherweise nicht benötigt. Mit Micro Services können Sie die Anforderungen mehrerer Anwendungen erfüllen.
Ein wichtiger Faktor hierbei ist, ob es einen Unterschied zwischen den beiden Schemata gibt und ob es jemals einen geben wird.
Normalerweise halte ich die Verwendung von Schnittstellen für Repositorys für unnötig. In diesem Fall kann sich die Mühe jedoch lohnen. Repository-Fabriken werden für Sie wichtig sein.
Mein Problem mit Option 1 ist, dass es zu spezifisch ist. Sie sollten in der Lage sein, von dem von Ihnen beschriebenen Setup zu zwei separaten Instanzen zu wechseln, die jeweils auf ihre eigene Datenbank verweisen. Die Anwendung sollte sich nicht darum kümmern, woher sie ihre Daten bezieht.
Während sich das Schema für Ihre zwei unterschiedlichen Datenbanken nicht unterscheidet, kann ein Repository problemlos mit beiden umgehen, ohne dass die Anwendung den Unterschied kennt:
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);
Wenn die DB-Schemas jemals zwischen den USA und Großbritannien unterschiedlich werden, teilen Sie die Funktionalität in zwei völlig unterschiedliche Repositorys auf. Dies wäre einfach, da Sie lediglich Ihre Fabrik wechseln müssten.