我已经定义了类,例如Email,Url,Alphabet,Number和...,只是为了集中每个对象所需的验证逻辑,例如:
public class Email
{
private string value;
private bool isValid;
const string RegexPattern = @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$";
public Email(string address, int minLength = 8, int maxLength = 50)
{
value = address;
isValid = Validator.IsValid(address,RegexPattern,minLength,maxLength);
}
public string Address
{
get
{
return value;
}
}
public bool IsValid
{
get
{
return isValid;
}
}
}
这可以被称为价值对象吗?如果不是它缺少什么?
答案 0 :(得分:1)
实现是我期望的值对象。它是不可变的(尽管您可能希望在字段上添加readonly
修饰符)并且似乎没有自己的标识。
您需要考虑它是否确实是一个取决于域的值对象 - 这就是您决定这是否应该是值对象的方式。