일부 코드를 보지 않고 말하기는 어렵지만 리포지토리 패턴을 구현하는 것이 좋습니다. 리포지터리 (repository)의 구현은, 팩토리가 그 오브젝트를 구축하기 위해서 (때문에) 사용한 데이터의 취득을 담당합니다. 당신은 당신의 공장에 저장소 인터페이스를 주입 수 :
public class ModelParameterFactory : IModelParameterFactory
{
private readonly IModelParameterRepository Repository;
public ModelParameterFactory(IModelParameterRepository repository)
{
Repository = repository;
}
...interface methods use the injected repository...
}
그런 다음 당신이 가진 것하는 DatabaseModelParameterRepository과 FileModelParameterRepository을 말한다. 오히려, 그것은 ModelParameterFactory에 IModelParameterRepositoryFactory를 주입 더 적합 할 수 있습니다,이 시점에서
public class ModelParameterRepositoryFactory : IModelParameterRepositoryFactory
{
public ModelParameterRepositoryFactory(...inputs needed to determine which repository to use...)
{
...assign...
}
...determine which repository is required and return it...
}
:하지만 그건 또 다른 공장을 요구한다, 그래서 당신은 또한, 당신은 주입해야 그 어떤 주위에 논리를 가지고 같은데요 IModelParameterRepository를 삽입하는 것보다. 당신이 DI 컨테이너 사용 여부
public class ModelParameterFactory : IModelParameterFactory
{
private readonly IModelParameterRepositoryFactory RepositoryFactory;
public ModelParameterFactory(IModelParameterRepositoryFactory repositoryFactory)
{
RepositoryFactory = repositoryFactory;
}
...interface methods get repository from the factory...
}
, 사용하고있는 공장 호출 코드 또는 DI 구성에 반대 이제, 관련 공장 구현으로 이동 사용할 저장소에 관한 모든 논리.
이 디자인은 너무 복잡하지는 않지만 그럼에도 불구하고 ModelParameterFactory 및 ModelParameters가 너무 일반적인 것인지 궁금해 할 수 있습니다. 당신은 그것들을 별개의보다 구체적인 수업으로 괴롭히는 것이 유익 할 것입니다. 결과는 더 간단하고 표현력이 풍부한 디자인이 될 것입니다. 그러나 위의 경우가 아니라면 위의 내용이 도움이 될 것입니다.