2012-10-17 2 views
1

현재 ConfigProfile factory라는 클래스가 있고 기본 프로파일, 현재 설정 등을위한 메소드가 있습니다. 이 클래스는 내 프로필 서비스에서 내부적으로 사용됩니다. 나는이 제품을 진정한 공장으로 만들고 우리가 구성하는 각 제품에 대해 적절한 프로필 서비스를 만드는 것이 더 좋을 것이라고 생각했습니다. 이 하나의 제품이지만, 우리는 내가 더 추가해야합니다 의미하는 몇 가지 더있다팩토리 패턴을 사용해야합니까?

public string GetDefaultProfile(string product) 
    { 
     if (string.IsNullOrEmpty(product)) 
     { 
      throw new ArgumentNullException("product"); 
     } 

     string profile = null; 

     if (product.Contains("Product 1", StringComparison.CurrentCultureIgnoreCase) || 
      product.Contains("product1", StringComparison.CurrentCultureIgnoreCase)) 
     { 
      profile = Resources.product1DefaultProfile; 
     } 

     return profile; 
    } 

경우 각각에 대해 문. 프로필 서비스에는 이미 인터페이스가 있으며 대부분의 프로그램에 사용됩니다. 또한 같은 일을하는 여러 가지 방법이 있습니다. 그렇다면 제품 이름을 기반으로 적절한 프로필 서비스를 반환하는 공장이 더 나은 해결책일까요 아니면 제가 할 수있는 다른 일이 있을까요?

편집 :이 클래스의 간단한 방법 중 하나입니다. 더 복잡한 것은 필요한 장소에서 현재 시스템 설정을 검색하는 것입니다. 모든 제품과 마찬가지로 IIS 설정이 있지만 일부는 테마 지원을 제공하지만 다른 제품은 데이터베이스 구성을 갖습니다.

+0

이름이 키이고 값이 프로필 인지도가 있습니다. 프로파일은 제품마다 어떻게 다릅니 까? 마치 모든 제품에 대해 동일한 역할을하는 것처럼 들릴 수 있습니다. 나는 공장에 대한 필요성을 보지 못했다. – duffymo

+0

다른 섹션도있을 수 있습니다. 첫 번째 제품과 마찬가지로 우리는 IIS와 web.config를 다뤘지만 다른 제품의 경우 테마와 데이터베이스를 추가하는 것을 제외하고는 동일합니다. 각 섹션에는 자체 서비스가 있습니다. 예를 들어 IIS에는 설정을 적용하고 현재 설정을 읽는 자체 서비스 클래스가 있습니다. – twreid

+0

그냥 메모 : 인수가 null이 아닌 경우 메소드가 'ArgumentNullException'을 throw 할 수 있습니다. 단지 비어 있습니다. 비어 있지 않은 빈 인자가 전달되지 않아야한다면'ArgumentException'을 던져야합니다. –

답변

1

공장은 매우 좋은 해결책입니다. 간단한 인터페이스 뒤에 구성 복잡성을 숨길 수 있습니다.

런타임/시작시 구성 할 수 있어야하는 경우 전략과 결합하십시오.

정적 팩토리 또는 전략의 두 가지 솔루션을 모두 Prototype과 결합 할 수 있습니다. 프로토 타입은 종종 동일한 프로필을 사용하고 읽기 전용 인 경우 최적화로 유용합니다.

편집 : 이미 Prototype을 사용하고있을 것입니다. 샘플 코드는 복잡한 제품으로 작성하지 않고 프로파일을 복사/참조하는 것처럼 보입니다.

+0

해당 기본 프로필에 대해 리소스에서 정적 XML 문서를 참조하고 있지만 현재 설정의 경우 복잡한 개체를 작성합니다. 답변 주셔서 감사합니다. – twreid

+0

후속 조치에 감사드립니다. 항상 문제에 대해 자세히 알기를 바랍니다 :) –

관련 문제