编辑:为了清楚起见,这个问题与 DDD 有关,它有一个称为值对象的概念,这些不是值类型,它们是一种以内容构成身份的方式构建对象的方式,我试图理解这些概念应该应用多远(从评论看来它们不应该渗透到领域之外)。对于不熟悉 DDD 的人来说,这个问题可能看起来很奇怪,但要明确的是,它是关于创建对象而不是创建值类型的一种非常具体的机制。
考虑以下示例代码,它有两个值对象:
public class SqlServerConnectionSettings
{
public string DatabaseName { get; set; }
public string ServerName { get; set; }
public SqlServerCredentials Credentials { get; private set; }
public SqlServerConnectionSettings(SqlServerCredentials credentials)
{
Credentials = credentials;
}
public string AsConnectionString()
{
//Snip
}
}
public class SqlServerCredentials
{
public string Username { get; private set; }
public string Password { get; private set; }
public bool UseIntegratedSecurity { get; private set; }
public SqlServerCredentials(string username = "", string password = "", bool useIntegratedSecurity = true)
{
Username = username;
Password = password;
UseIntegratedSecurity = useIntegratedSecurity;
}
public string AsConnectionStringCredentials()
{
//Snip
}
}
我没有为用户名、密码、UseIntegratedSecurity 设置不同的参数,而是创建了一个值对象来保存它们。我的问题是,这个概念是否太过分了,我是否误解了点值对象的设计目的?