什么是User
?
我的意思不是类在哪里定义,而是它在域中的物理含义是什么?听起来你试图让它意味着多件事。
与其尝试将这些动作拟合到域模型中,不如为它们创建动作模型。像这样的东西:
class CreateUserAction
{
public string Username {get; set;}
}
class DeleteUserAction
{
public int ID {get; set;}
}
然后在您的操作方法中使用这些:
public ActionResult Create(CreateUserAction user)
{
}
public ActionResult Delete(DeleteUserAction user)
{
}
这将按照单一职责原则将不同的目的分解为不同的类。现在User
该类可以专注于简单地表示用户对象,而不是有时表示尚未创建的用户或有时仅表示用户对象的 ID 等。
这里的一个主要好处是您可以直接在类中指定验证规则。使用这种方法,User
对象总是可以要求 aUsername
和anID
有效。而一个CreateUserAction
对象甚至没有一个ID
(因为它不需要一个),一个DeleteUserAction
对象没有一个Username
(因为它不需要一个)。
您可以根据需要进一步添加其他字段。例如,该CreateUserAction
对象可能有其他字段来描述正在创建的用户。(它甚至可能具有根本不存在于User
对象上的字段,但会被转换为域中的其他对象。)但是,DeleteUserAction
可能永远不需要更多的东西ID
(并且,正如 SLaks 所建议的那样,可能只替换int
为 for 该操作方法,但这取决于您)。
类的角色和职责更清晰,部分初始化的半对象更少。