とは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
などとは対照的に、単にユーザー オブジェクトを表すことに集中できるようになりました。
ここでの大きな利点の 1 つは、検証規則をクラスで直接指定できることです。このアプローチでは、User
オブジェクトは常にaUsername
とanID
が有効である必要があります。一方、CreateUserAction
オブジェクトには がなくID
(必要がないため)、DeleteUserAction
オブジェクトには がUsername
ありません (必要がないため)。
必要に応じてさらにフィールドを追加できます。たとえば、CreateUserAction
オブジェクトには、作成されるユーザーを説明する他のフィールドが含まれる可能性があります。(User
オブジェクトにはまったく含まれないが、ドメイン内の他のオブジェクトに変換されるフィールドがある場合もあります。) ただし、 はDeleteUserAction
(ID
そして、SLaks によって示唆されているように、おそらくint
そのアクションメソッドだけに置き換えられますが、それはあなた次第です)。
クラスの役割と責任が明確になり、部分的に初期化された半オブジェクトが少なくなります。