C# 用于创建API URL的设计模式
我正在构建一个与各种第三方API交互的类库。我使用了facade模式来提供对复杂和混乱调用的简化访问,并使用factory模式来返回正确的实现。我现在正试图构建一个实现,但想不出一个优雅的设计 我正在构建的实现需要构建一个URL(我正在通过URIBuilder进行构建)。然后我需要“执行”url。然后,我将Xml结果反序列化为一个类 我计划使用HttpClient调用带有我构建的URI的api,但不确定如何构造类。我想到的选择是:C# 用于创建API URL的设计模式,c#,asp.net-mvc,design-patterns,C#,Asp.net Mvc,Design Patterns,我正在构建一个与各种第三方API交互的类库。我使用了facade模式来提供对复杂和混乱调用的简化访问,并使用factory模式来返回正确的实现。我现在正试图构建一个实现,但想不出一个优雅的设计 我正在构建的实现需要构建一个URL(我正在通过URIBuilder进行构建)。然后我需要“执行”url。然后,我将Xml结果反序列化为一个类 我计划使用HttpClient调用带有我构建的URI的api,但不确定如何构造类。我想到的选择是: 我的实现的基类,因此可以通过base.InvokeURI(uri
base.InvokeURI(urimyuri)
调用它我也不确定反序列化应该驻留在哪里 我认为在这种情况下使用界面更合适:
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 void processRequest(){
RequestProcessor处理器=新的RequestProcessor();
processRequest();
}
}
公共类请求处理器{
公共无效过程请求(){
Irequest请求=新的HTTPRequest();
HTTPService=新的HTTPService();
//从生成器类获取uri
URI url=URIBUIlder();
字符串响应=service.sendRequest(请求,url);
//现在从刚才的
类型t=序列化程序.searialize(响应);
}
}
公共类序列化程序{
公共静态T searialize(字符串xml){
}
}
公共接口IRequest{
公共字符串sendRequest(uri url);
}
公共类HTTPRequest:IRequest{
公共字符串sendRequest(uri url){
//在此处实例化实际http请求并返回响应
}
}
//这将充当控制器
公共类HTTPService{
公共字符串sendRequest(IRequest请求,uri url){
返回请求。发送请求(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);
}
}