Что такое 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
класс может сосредоточиться на просто представляя объект пользователя, в отличие от иногда представляющего пока еще не созданного пользователя или иногда, представляющий только идентификатор объекта пользователя и т.д.
Одним из главных преимуществ здесь что вы можете указать правила проверки непосредственно в классе. При таком подходе объект User
может всегда требует наличия Username
и a ID
. В то время как объект CreateUserAction
даже не имеет ID
(так как он не нужен), а объект DeleteUserAction
не имеет Username
(так как он не нужен).
Вы также можете добавить дополнительные поля по мере необходимости. Например, объект CreateUserAction
, вероятно, будет иметь другие поля для описания создаваемого пользователя. (Он может даже иметь поля, которые вообще не относятся к объекту User
, но будут переведены на какой-либо другой объект в домене.) Однако DeleteUserAction
может никогда не понадобиться ничего, кроме ID
(и, как было предложено SLaks , вероятно, может быть заменен только int
для этого метода действий, но это зависит от вас).
Более четкие роли и обязанности для классов, меньшее количество частично инициализированных полуобъектов.
Почему бы вам просто не сделать 'Delete' взять только ID? – SLaks
Вы можете использовать разные модели просмотра для своих контроллеров, которые включают только свойства, необходимые для выполнения ваших действий. – Brownman98