2013-01-21 20 views
7

मैं एक कक्षा पुस्तकालय का निर्माण कर रहा हूं जो विभिन्न तृतीय पक्ष एपीआई के साथ बातचीत करता है। मैंने जटिल और भ्रमित कॉल तक सरलीकृत पहुंच प्रदान करने के लिए एक मुखौटा पैटर्न का उपयोग किया है, और सही कार्यान्वयन को वापस करने के लिए एक कारखाना पैटर्न प्रदान किया है। अब मैं कार्यान्वयन में से एक बनाने की कोशिश कर रहा हूं लेकिन एक सुरुचिपूर्ण डिजाइन के बारे में सोच नहीं सकता।एपीआई यूआरएल बनाने के लिए डिजाइन पैटर्न

कार्यान्वयन मैं निर्माण कर रहा हूँ एक यूआरएल के निर्माण का (जो मैं URIBuilder के माध्यम से कर रहा हूँ) की आवश्यकता है। मुझे फिर यूआरएल को "निष्पादित" करने की आवश्यकता है। मैं फिर एक्सएमएल परिणाम को कक्षा में deserialize।

मैं यूआरआई मैं बनाया के साथ API कॉल करने के लिए HttpClient के प्रयोग पर योजना बना रहा हूँ, लेकिन कैसे वर्ग की संरचना करने पर यकीन नहीं है। विकल्प मैं के बारे में सोचा है: मेरी कार्यान्वयन के

  1. एक आधार वर्ग तो base.InvokeURI(Uri myUri) के माध्यम से यह कह सकते हैं।

  2. एक अलग वर्ग है, तो यह कई कार्यान्वयन

द्वारा इस्तेमाल किया जा सकता मैं भी अनिश्चित जहां अक्रमांकन होनी चाहिए हूँ।

+2

आप [माइक्रोसॉफ्ट वेब एपीआई] को देखा है इसे पारित करने के लिए है (http://www.asp.net/web-api)? –

+3

आप क्या हासिल करने की कोशिश कर रहे हैं, फिलहाल ऐसा लगता है कि आप पैटर्न बिंगो खेल रहे हैं। –

उत्तर

11

मुझे लगता है कि इस मामले में इंटरफ़ेस का उपयोग कर अधिक उपयुक्त है:

public interface IURLInvoke 
{ 
    string InvokeURI(Uri myUri); 
} 

// some implementation 
public class YourURLInvoker: IURLInvoke 
{ 
    public string InvokeURI(Uri myUri) 
    { 
     // do something 
    } 
} 

pubic class YourClass 
{ 
    public IURLInvoke Invoker {get; set;} 

    public void InvokeURI(Uri myUri) 
    { 
     if(Invoker == null) 
       return; 

     string xml = Invoker.InvokeURI(Uri myUri); 
     // put your code for deserialization here 
    } 
} 

// here is an usage example: 
YourClass a = new YourClass(); 
// set an Invoker, choose a strategy to invoke url 
a.Invoker = new YourURLInvoker(); 
a.InvokeURI(url); 

यह दृष्टिकोण भी कहा जाता है Strategy Pattern

1

Pls एडाप्टर पैटर्न और निर्भरता इंजेक्शन का उपयोग कर डमी कोड देखें। आइडिया एक इंटरफ़ेस बना सकते हैं और चारों ओर

public class Adapter{ 
public void processRequest(){ 
    RequestProcessor processor = new RequestProcessor(); 
    processor.processRequest(); 
} 
} 

public class RequestProcessor{ 
    public void procesRequest(){ 
    Irequest request = new HTTPRequest(); 
    HTTPService service = new HTTPService(); 
    // fetch the uri from builder class 
    URI url = URIBUIlder(); 
    string response = service.sendRequest(request,url); 
    // now fetch type from just 
    Type t = Serializer.searialize<T>(response); 

    } 
} 

public Class Serializer{ 
    public static T searialize<T>(string xml){ 
    } 
} 

public interface IRequest{ 
public string sendRequest(uri url); 
} 

public class HTTPRequest:IRequest{ 
public string sendRequest(uri url){ 
    // instantiate actual http request here and return response 
} 
} 

//This will act as controller 
public class HTTPService{ 
public string sendRequest(IRequest request,uri url) { 
    return request.sendRequest(url); 
} 
}