public class User {
public string Username { get; private set; }
public string Email{ get; private set; }
public string Password { get; private set; }
public BrokenRules BrokenRules { get; private set; }
///EF
protected User() {}
private User(string username, string email, string password) {
Username = username;
Email = email;
Password = password;
BrokenRules = new UserCreateRule(this).Validate();
}
public void ChangeEmail(string email) {
Email = email;
BrokenRules = new ChangeEmailRule(this).Validate();
}
public class Factory {
public static User New (string username, string email, string password){
var instance = new User(username, email, password);
return instance;
}
}
}
public class UsersController {
public IHttpActionResult Create() {
var result = User.Factory.New("diego.dias", "diego.dfsd@gmail.com", "password1234");
if (result.BrokenRules.HasError)
return result.BrokenRules.Rules;
return result;
}
}
public class UserCreateRule : Rule {
public UserCreateRule(User user) {
User = user;
}
protected IEnumerable<BrokenRule> Validate(){
yield return AssertationConcern.IsNull(user, "invalid_params", "User cannot be null.");
yield return AssertationConcern.IsEmpty(user.Username, "invalid_params", "Username cannot be null or empty.");
yield return AssertationConcern.IsEmpty(user.Email, "invalid_format", "Email has an invalid value.");
}
}
public class BrokenRules {
public IEnumerable<BrokenRule> Rules{ get; private set; }
public bool HasError { get { return Rules.Any(); } }
public BrokenRules(IEnumerable<BrokenRule> rules) {
BrokenRules = rules;
}
}
public class BrokenRule {
public string ErrorCode { get; private set; }
public string ErrorMessage { get; private set; }
public BrokenRule(string errorCode, string errorMessage) {
ErrorCode = errorCode;
ErrorMessage = errorMessage;
}
}public class User {
public string Username { get; private set; }
public string Email{ get; private set; }
public string Password { get; private set; }
///EF
protected User() {}
private User(string username, string email, string password) {
Username = username;
Email = email;
Password = password;
}
public class Factory {
public static Result<User> New (string username, string email, string password){
var instance = new User(username, email, password);
var rule = new UserCreateRule(instance);
var brokenRules = rule.Validate();
return new Result(instance, brokenRules);
}
}
}
public class UsersController {
public IHttpActionResult Create() {
var result = User.Factory.New("diego.dias", "diego.dfsd@gmail.com", "password1234");
if (result.HasError())
return result.BrokenRules;
return result.instance;
}
}
public class UserCreateRule : Rule {
public UserCreateRule(User user) {
User = user;
}
protected IEnumerable<BrokenRule> Validate(){
yield return AssertationConcern.IsNull(user, "invalid_params", "User cannot be null.");
yield return AssertationConcern.IsEmpty(user.Username, "invalid_params", "Username cannot be null or empty.");
yield return AssertationConcern.IsEmpty(user.Email, "invalid_format", "Email has an invalid value.");
}
}
public class {
}
public class BrokenRule {
public string ErrorCode { get; private set; }
public string ErrorMessage { get; private set; }
public BrokenRule(string errorCode, string errorMessage) {
ErrorCode = errorCode;
ErrorMessage = errorMessage;
}
}
public class Result<T> Where T : class {
public T Instance { get; private set; }
public IEnumerable<BrokenRule> BrokenRules { get; private set; }
public bool HasError { get { return BrokenRules.Any(); } }
public Result(T instance, IEnumerable<BrokenRule> rules) {
public Result(T instance, IEnumerable<BrokenRule> rules) {
Instance = data;
BrokenRules = rules;
}
}