2013-02-08 74 views
0

我是新來的WCF和新的工廠設計模式。在這個例子中,你如何真正實現工廠設計模式?如何使用此示例在WCF中實現工廠設計模式?

我已經創建了4個班additionsubtractionmultiplicationdivision項目,所以如果有一種方法來調用這些類進行比,這將是偉大的界面做計算等計算。

在此先感謝。

[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)創建類這樣

公共類Rectangle:形狀{

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很大的實施