Я думаю, що варіант 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);
Якщо схеми БД коли-небудь стають розрізненими між США та Великобританією, тоді ви розділите функціонал на два абсолютно різних сховища. Це було б просто, адже все, що вам потрібно було зробити, - це змінити свій завод.