옵션 2는 나쁘지 않지만 필요하지 않을 수도 있습니다. 마이크로 서비스는 여러 응용 프로그램의 요구를 처리 할 수 있도록합니다.
여기서 가장 큰 요인은 두 스키마간에 차이가 있는지, 앞으로 있을지 여부입니다.
일반적으로 리포지토리에 인터페이스를 사용하는 것이 불필요하다고 생각합니다. 그러나이 경우에는 노력할 가치가 있습니다. 리포지토리 팩토리가 중요합니다.
옵션 1의 문제는 너무 구체적이라는 것입니다. 설명 된 설정에서 각각 고유 한 DB를 쉽게 가리키는 두 개의 개별 인스턴스로 이동할 수 있어야합니다. 응용 프로그램이 데이터를 가져 오는 곳에서는 관리하지 않아야합니다.
스키마는 두 개의 서로 다른 데이터베이스마다 다르지 않지만 응용 프로그램에서 차이를 알지 않고도 하나의 리포지토리에서 두 가지를 쉽게 처리 할 수 있습니다.
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 스키마가 미국과 영국간에 서로 다른 경우 기능을 완전히 다른 두 저장소로 나눕니다. 공장을 변경하기 만하면되기 때문에 쉬울 것입니다.