Guest User

Untitled

a guest
Oct 12th, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.75 KB | None | 0 0
  1. public interface IWebRequestFactory
  2. {
  3.     HttpWebRequest Create(string url);
  4. }
  5.  
  6. public interface IVKLikeService
  7. {
  8.     void Like(tring userId, VkPhoto vkPhoto, bool like);
  9. }
  10.  
  11. public interface IRequestBuilder
  12. {
  13.     IRequestBuilder Param(string key, string value);
  14.     IRequestBuilder Url(string url);
  15.     IRequestBuilder Method(HttpMethod method);
  16.     HttpWebResponse Execute();
  17. }
  18.  
  19. public class RequestBuilder : IRequestBuilder
  20. {
  21.     private string url;
  22.     private HttpMethod method;
  23.     private IDictionary<string, string> parameters = new Dictionary<string, string>();
  24.  
  25.     private IWebRequestFactory webRequestFactory;
  26.    
  27.     public BaseRequestBuilder(IWebRequestFactory webRequestFactory)
  28.     {
  29.         this.webRequestFactory = webRequestFactory;
  30.     }
  31.  
  32.     private void ApplyDefaultHeaders(HttpWebRequest request) {...}
  33.    
  34.     private void WriteParams(HttpWebRequest request)
  35.     {
  36.         using (var writer = new StreamWriter(request.GetRequestStream()))
  37.         {
  38.             writer.Write(CreateParamsString());
  39.         }
  40.     }
  41.    
  42.     private string CreateParamsString()
  43.     {
  44.         var builder = new StringBuilder()
  45.         ...
  46.         return builder.ToString();
  47.     }
  48.    
  49.     public IRequestBuilder Param(string key, string value) {...; return this;}
  50.     public IRequestBuilder Url(string url) {...; return this;}
  51.     public IRequestBuilder Method(HttpMethod method) {...; return this;}
  52.    
  53.     public HttpWebResponse Execute()
  54.     {
  55.         var request = webRequestFactory.Create(url);
  56.        
  57.         ApplyDefaultHeaders(request);
  58.         WriteParams(request);
  59.        
  60.         return request.GetResponse();
  61.     }
  62.  
  63. }
  64.  
  65. public class LikeRequestHelper
  66. {
  67.     private IRequestBuilder builder;
  68.  
  69.     public LikeRequestHelper(IRequestBuilder builder)
  70.     {
  71.         this.builder = builder;
  72.     }
  73.    
  74.     private string GetObjectString(string userId, VkPhoto vkPhoto)
  75.     {
  76.         return $"photo{userID}_{vkPhoto.id}";
  77.     }
  78.    
  79.     public IRequestBuilder Build(string userId, VkPhoto vkPhoto, bool like)
  80.     {
  81.         var act = like ? "a_do_like" : "a_do_unlike";
  82.    
  83.         return builder
  84.             .Url(VKApi.Like)
  85.             .Method(HttpMethod.Post)
  86.             .Param("act", act)
  87.             .Param("object", GetObjectString(userID, vkPhoto))
  88.             ....
  89.             .Param("hash", vkPhoto.hash);
  90.     }
  91. }
  92.  
  93. public static class RequestBuilderExt
  94. {
  95.     public static IRequestBuilder BuildLikeRequest(this IRequestBuilder builder, string userId, VkPhoto vkPhoto, bool like)
  96.     {
  97.         var helper = new LikeRequestHelper(builder);
  98.         return helper.Build(userId, vkPhoto, like);
  99.     }
  100. }
  101.  
  102. public class VKLikeService : IVKLikeService
  103. {
  104.     private IWebRequestFactory webRequestFactory;
  105.    
  106.     public VKLikeService (IWebRequestFactory webRequestFactory)
  107.     {
  108.         this.webRequestFactory = webRequestFactory;
  109.     }
  110.  
  111.     public void Like(string userId, VkPhoto vkPhoto, bool like)
  112.     {
  113.         var builder = new RequestBuilder(webRequestFactory);
  114.         builder.BuildLikeRequest(userId, vkPhoto, like).Execute();
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment