ビジネス オペレーションを通じてデータベースからロードするデータをできるだけ少なくすることをお勧めします。コマンドオブジェクトとしてエンティティ(モデル)オブジェクトを直接使用することは安全ではない場合があります。では、コマンド オブジェクトを選択する際のアプローチはどうあるべきでしょうか? ビューごとに個別のコマンド オブジェクトを使用しても意味がありません。
ユースケースまたは素敵なリソースを歓迎します。ありがとう。
ドメインオブジェクトをコマンドオブジェクトとして使用する場合、セキュリティ上の懸念があるかもしれません.Springはすべてのパラメータをコマンドフィールドにバインドしようとするため、ユーザーはリクエストに追加のパラメータを追加して、バインドされていないフィールドを変更できます. このアプローチを採用する場合は、バインドするパラメーターのホワイト リストまたはブラック リストを必ず定義してください。
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAllowedFields("firstName", "lastName");
}
また
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("id", "creationDate");
}
別の方法として、フォームに追加のクラスを作成することもできます。このクラスは、ドメイン オブジェクトがビュー レイヤーで必要なものと一致しない場合に、UI のニーズにうまく適応できます。このクラスは、Web ロジック、検証、およびドメイン オブジェクトとの間でコピーするロジックをカプセル化できます。
したがって、ホワイト/ブラックリストを設定し、UI の必要性 (ドメインオブジェクトに追加のフィールドまたは追加のロジックを追加する) のためにそれを変更しない限り、ドメインオブジェクトを使用しても問題ありません。それ以外の場合は、追加のコマンド オブジェクト。