Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IWebRequestFactory
- {
- HttpWebRequest Create(string url);
- }
- public interface IVKLikeService
- {
- void Like(tring userId, VkPhoto vkPhoto, bool like);
- }
- public interface IRequestBuilder
- {
- IRequestBuilder Param(string key, string value);
- IRequestBuilder Url(string url);
- IRequestBuilder Method(HttpMethod method);
- HttpWebResponse Execute();
- }
- public class RequestBuilder : IRequestBuilder
- {
- private string url;
- private HttpMethod method;
- private IDictionary<string, string> parameters = new Dictionary<string, string>();
- private IWebRequestFactory webRequestFactory;
- public BaseRequestBuilder(IWebRequestFactory webRequestFactory)
- {
- this.webRequestFactory = webRequestFactory;
- }
- private void ApplyDefaultHeaders(HttpWebRequest request) {...}
- private void WriteParams(HttpWebRequest request)
- {
- using (var writer = new StreamWriter(request.GetRequestStream()))
- {
- writer.Write(CreateParamsString());
- }
- }
- private string CreateParamsString()
- {
- var builder = new StringBuilder()
- ...
- return builder.ToString();
- }
- public IRequestBuilder Param(string key, string value) {...; return this;}
- public IRequestBuilder Url(string url) {...; return this;}
- public IRequestBuilder Method(HttpMethod method) {...; return this;}
- public HttpWebResponse Execute()
- {
- var request = webRequestFactory.Create(url);
- ApplyDefaultHeaders(request);
- WriteParams(request);
- return request.GetResponse();
- }
- }
- public class LikeRequestHelper
- {
- private IRequestBuilder builder;
- public LikeRequestHelper(IRequestBuilder builder)
- {
- this.builder = builder;
- }
- private string GetObjectString(string userId, VkPhoto vkPhoto)
- {
- return $"photo{userID}_{vkPhoto.id}";
- }
- public IRequestBuilder Build(string userId, VkPhoto vkPhoto, bool like)
- {
- var act = like ? "a_do_like" : "a_do_unlike";
- return builder
- .Url(VKApi.Like)
- .Method(HttpMethod.Post)
- .Param("act", act)
- .Param("object", GetObjectString(userID, vkPhoto))
- ....
- .Param("hash", vkPhoto.hash);
- }
- }
- public static class RequestBuilderExt
- {
- public static IRequestBuilder BuildLikeRequest(this IRequestBuilder builder, string userId, VkPhoto vkPhoto, bool like)
- {
- var helper = new LikeRequestHelper(builder);
- return helper.Build(userId, vkPhoto, like);
- }
- }
- public class VKLikeService : IVKLikeService
- {
- private IWebRequestFactory webRequestFactory;
- public VKLikeService (IWebRequestFactory webRequestFactory)
- {
- this.webRequestFactory = webRequestFactory;
- }
- public void Like(string userId, VkPhoto vkPhoto, bool like)
- {
- var builder = new RequestBuilder(webRequestFactory);
- builder.BuildLikeRequest(userId, vkPhoto, like).Execute();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment