Я пытаюсь создать свободный шаблон для создания запроса пользователя, так как у него много параметров. для простоты я просто показываю несколько параметров
Вот мой класс запроса или модель
public class Request
{
public string UserName { get; set; }
public string Password { get; set; }
public string Token { get; set; }
}
Вот мой класс строителя, который строит запросы.
public class RequestBuilder
{
private string _username;
private string _password;
private string _token;
public RequestBuilder UserName(string username)
{
_username = username;
return this;
}
public RequestBuilder Password(string password)
{
_password = password;
return this;
}
public RequestBuilder Token(string token)
{
_token = token;
return this;
}
public static implicit operator Request(RequestBuilder requestBuilder)
{
return new Request()
{
UserName = requestBuilder._username,
Password = requestBuilder._password,
Token = requestBuilder._token
};
}
}
На первый взгляд этот подход может выглядеть работающим, но в нем есть дыры в безопасности, такие как
- Пользователь может создать запрос напрямую, используя
Request request = new Request()
если я ограничу класс запроса, реализовав параметризованный конструктор в классе запроса
public Request(RequestBuilder rb){
UserName = rb._username;
Password = rb._password;
Token = rb._token;
}
В этом случае мне нужно создать set
и get
метод в RequestBuilder
, который в конечном итоге выставит RequestBuilder
следующим образом
RequestBuilder rb = new RequestBuilder();
rb._username ="test";
поэтому кто-нибудь может сказать мне, как мне защитить класс Request
, предотвращающий создание экземпляров.