i am trying to create fluent builder pattern to create user request as it has lot of parameters. for simplicity i am just showing few parameters
Here is my request class or the model
public class Request
{
public string UserName { get; set; }
public string Password { get; set; }
public string Token { get; set; }
}
Here is my builder class that build the requests.
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
};
}
}
At a glance this approach might look working but it has security holes like
- User can create Request direct using
Request request = new Request() - if i restric the request class by implementing the parameterized constructor
in Request class
public Request(RequestBuilder rb){
UserName = rb._username;
Password = rb._password;
Token = rb._token;
}
In this case i need to create set and get method in RequestBuilder which will eventually expose RequestBuilder as follows
RequestBuilder rb = new RequestBuilder();
rb._username ="test";
so can anyone tell me how shall i protect Request class preventing from instantiation.
Aucun commentaire:
Enregistrer un commentaire