2013-01-21 21 views
7

Çeşitli 3. taraf API'leriyle etkileşime giren bir sınıf kitaplığı yapıyorum. Karmaşık ve kafa karıştırıcı çağrılara basitleştirilmiş erişim sağlamak için bir cephe düzeni ve doğru uygulamayı döndürmek için bir fabrika düzeni kullandım. Şimdi uygulamadan birini inşa etmeye çalışıyorum ama zarif bir tasarım düşünemiyorum.API URL'si Oluşturma için Tasarım Örneği

Yapmakta olduğum uygulama, yapılandırılacak bir URL gerektirir (URIBuilder üzerinden yapıyorum). Sonra url'yi "çalıştırmam gerekiyor". Daha sonra Xml sonucunu bir sınıfa seri hale getiriyorum.

HttpClient'i kullanarak, yerleşik URI'yu kullanarak api'yi çağırmayı planlıyorum, ancak sınıfı nasıl yapılandıracağından emin değilim. i düşündüm seçenekleri şunlardır: benim uygulama

  1. bir taban sınıfı böylece base.InvokeURI(Uri myUri) aracılığıyla diyebiliriz.

  2. bir ayrılık sınıfı birden uygulamaları

tarafından kullanılabilecek şekilde ben de seri kaldırma nerede bulunması gerektiğini emin değilim.

+2

etrafına geçmektir (http://www.asp.net/web-api)? –

+3

Neye ulaşmaya çalışıyorsunuz, şu anda Desen Bingo oynuyorsunuz gibi görünüyor. –

cevap

11

Ben bu durumda Arayüzü kullanılarak daha uygun olduğunu düşünüyorum:

1

Pls adaptör desen ve bağımlılık enjeksiyon kullanarak kukla kodunu görmek Strategy Pattern

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); 

Bu yaklaşım denir. Fikir arayüz oluşturmak ve [Microsoft Web API] baktınız mı

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); 
} 
} 
İlgili konular