予見可能な限り変更されない小さなアプリのみを開発している場合は、今最も速い方法を実行してください。長期的に保守可能なアプリが必要な場合は、次のことを提示させてください.
この垂直レイヤー アプローチの問題点は、ビューで何かが必要になるたびに、それをビジネス レイヤー (ビジネス レイヤーが気にしない場合でも) とデータ レイヤーの両方に追加する必要があることです。これには、ビジネス レイヤーが 1) データの UI ビュー、2) データのビジネス ビュー、3) データのデータベース表現のように見える必要があります。それおよび/またはレイヤー間に多くのマッピングが必要です。これらはすべて、ビジネス ロジックを表すというビジネス層の実際の目的を薄めます。その場合、すべてのビジネス ロジックがトランザクション メソッド (静的メソッドでもかまいません) に移行され、データ オブジェクトの状態が変更されるだけです。問題のドメインが複雑なロジックのない CRUD にすぎない場合、それはまったく問題ありません。複雑なロジックで、
複雑なロジックがあると仮定すると、データのユーザー ビューとデータのビジネス表現はしばしば非常に異なるため、UI ビューはデータの特殊なモデルになります。私があなたなら、これを受け入れて、単純なバージョンの CQRS 原則を使用します。つまり、UI ビューのデータは、ビジネス オペレーションが実行される場所とは別の場所から取得します。あなたの場合、DAL に EF モデルがあり、UI ビューのみを提供し、必要なものを正確に提供する可能性があります (データベース ビュー、ストアド プロシージャ、または事前にコンパイルされたレポート テーブルによって)。次に、Business エンティティのニーズのみに対応する別の EF モデルを作成します。次に、実際のビジネス アクションを実行する準備ができたら、UI のビューモデル アクション メソッドは、ビジネス EF モデルからビジネス オブジェクトをロードできます (さらに良いのは、これを行うビジネス層からオブジェクト ファクトリを呼び出して)、ビジネス オブジェクトに対して適切なアクションを実行します。ここでは、データベースが高度なリレーショナル (主に第 2 および第 3 正規形) であり、EF を使用するように設定されていることも前提としています。
ビュー モデルをビジネス ロジックにしようとはしません。これにより、ビジネス ロジックを他のプラットフォームやアプリケーション (Web など) で簡単に再利用できなくなります。MVVM は UI のみを提供する必要があります。私の考えでは、V (ビュー) は、ユーザーが見て操作するものを表します。M (モデル) は、ユーザーがそのビューで選択したものを表します。そして、VM (ビュー モデル) は 2 つの間で変換されます。次に、プログラムは、ユーザーの検証済みの選択 (UI モデル) を取得し、そこから必要なデータを抽出して、適切なビジネス操作を実行する必要があります。