2013-02-08 2 views
0

WCF를 처음 사용하고 공장 설계 패턴을 처음 사용했습니다. 이 예제에서 팩토리 디자인 패턴을 실제로 어떻게 구현합니까? 큰 것 인터페이스에서 계산을하는 것보다 다른 계산을 수행하기 위해 이러한 클래스를 호출하는 방법이있다, 그래서 만약이 예제를 사용하여 WCF에서 팩토리 디자인 패턴을 구현하는 방법은 무엇입니까?

나는이 프로젝트에 4 개 클래스 addition, subtraction, multiplicationdivision을 만들었습니다.

미리 감사드립니다.

[OperationContract] 
int Calculation(int value1, int value2, string calType); 

public class Service1 : IService1 
{ 
    public int Calculation(int value1, int value2, string calType) 
    { 
     try { 
      switch (calType) 
      { 
       case "addition": 
        return value1 + value2; 

       case "subtraction": 
        return value1 - value2; 

       case "multiplication": 
        return value1 * value2; 
       case "division": 
        return value1/value2; 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

     return 0; 
    } 
    } 
+3

당신이 공장을 사용하려는 이유 그냥 궁금해서 조금도? 각각의 연산 (더하기, 빼기 등)을 그들 자신의 동사로 가지는 것이 더 간단 할 수 있습니다. 각각은 그들 자신의 계약이 될 수 있습니다. – nithins

+0

WCF 서비스에서 공장 디자인 패턴을 구현하려는 통합 테스트 용입니다. 따라서 이러한 요소를 훨씬 쉽게 테스트 할 수 있습니다. – nzdev

+0

이 기사의 일반 서비스 예를 사용할 수 있습니다. http://www.codeproject.com/Articles/290148/Pattern-for-Creating-Generic-WCF-Services –

답변

1

확인은 우리가 공장 패턴을 구현하여, 고전적인 형태의 예를 살펴

우리가 효과적으로

에만 팩토리 클래스가 필요 셰이프 서비스 클래스의 코드를 줄일 수있는이, WCF 공장 패턴을 수행 할 수 있습니다 WCF 서비스 클래스에있을, 나머지는) 자신의 비즈니스 클래스

1이 인터페이스를 만들 수 있습니다

public interface Shape { 
void draw(); 
} 

2)이

공용 클래스 사각형 같은 클래스 생성 : 모양 {

public void draw() { 
print("Inside Rectangle::draw() method."); 
    } 
    } 

공용 클래스 광장 : 모양 {

public void draw() { 
    print("Inside Square::draw() method."); 
    } 
    } 

3) 이제이 서비스 팩토리 클래스

[service contract] 
    public class ShapeFactory { 

//use getShape method to get object of type shape 

    [operation contract] 
    public Shape getShape(String shapeType){ 
    if(shapeType == null){ 
    return null; 
    }  
    if(shapeType.equalsIgnoreCase("CIRCLE")){ 
    return new Circle(); 
    } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ 
    return new Rectangle(); 
    } else if(shapeType.equalsIgnoreCase("SQUARE")){ 
    return new Square(); 
    } 
    return null; 
    } 
    } 

인터페이스에서이 메소드를 노출하십시오. 서비스

4) 클라이언트가 나머지

코드를하자의 WCF에 큰 구현을 할 수 있습니다 일반적인 생각을

공장 패턴을 제공하는 것입니다

관련 문제