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)
{
}
これは、単一責任の原則に基づいて、異なるクラスに異なる目的を抜け出すだろう。 時々ユーザーオブジェクトのIDのみを表す時々未作成したユーザーまたはを表すとは対照的に、今User
クラスは
一つの大きな利点ここなど、単純にユーザーオブジェクトを表すに集中することができますクラス内で検証規則を直接指定できるということです。この方法では、User
オブジェクトはと常に一致し、Username
ととID
が有効である必要があります。 CreateUserAction
オブジェクトにはID
(それが必要ないため)もありませんが、DeleteUserAction
オブジェクトにはUsername
(不要なので)オブジェクトがありません。
必要に応じてさらにフィールドを追加することができます。たとえば、CreateUserAction
オブジェクトには、作成されるユーザーを説明する他のフィールドが含まれている可能性があります。 (フィールドにはUser
というオブジェクトはまったくないが、ドメイン内の他のオブジェクトに変換されることもあります)。しかし、DeleteUserAction
は、ID
以上のものを必要としません(SLAKsその行動方法についてはおそらくint
と置き換えることができますが、それはあなた次第です)。
クラスの役割と責任が明確になり、部分的に初期化されたハーフオブジェクトが少なくなりました。
「Delete」にIDだけを渡すのはなぜですか? – SLaks
アクションを完了するために必要なプロパティのみを含むコントローラに対して、異なるビューモデルを使用できます。ありがとう。 – Brownman98