我认为选项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);
如果数据库模式在美国和英国之间变得截然不同,那么您将把功能分成两个完全不同的存储库。这将很容易,因为您要做的就是更换工厂。