创建API URL的设计模式
本文关键字:设计模式 URL API 创建 | 更新日期: 2023-09-27 17:54:56
我正在构建一个与各种第三方API交互的类库。我使用facade模式来提供对复杂和令人困惑的调用的简化访问,使用工厂模式来返回正确的实现。我现在正试图建立一个实现,但不能想到一个优雅的设计。
我正在构建的实现需要构建一个URL(我正在通过URIBuilder做)。然后我需要"执行"url。然后我将Xml结果反序列化到一个类中。
我计划使用HttpClient调用api与我构建的URI,但我不确定如何构建类。我想到的选项是:
-
我实现的一个基类,所以可以通过
base.InvokeURI(Uri myUri)
调用它。 -
一个可以被多个实现使用的分离类
我也不确定反序列化应该驻留在哪里。
我认为在这种情况下使用Interface更合适:
public interface IURLInvoke
{
string InvokeURI(Uri myUri);
}
// some implementation
public class YourURLInvoker: IURLInvoke
{
public string InvokeURI(Uri myUri)
{
// do something
}
}
public 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);
此方法也称为策略模式
请参阅使用适配器模式和依赖注入的虚拟代码。我们的想法是创建一个接口并将其传递给周围的人
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);
}
}