検索

ホームページ  >  に質問  >  本文

リポジトリ層にドメインロジックを含めないようにします。

現在のアプリケーションでは、アーカイブ ("isArchived" ) され、同時に 1 か月以上非アクティブなユーザーを返す API GET ルート「/inactive-users」を作成する必要があります。 old ("lastVisitedDate" フィールドは new Date() - 1 month よりも古い必要があります)。

階層化アーキテクチャ (コントローラー/サービス/リポジトリ) が使用されており、ドメイン モデルが貧弱です。この場合はどうすればよいですか?

考えられるアプローチは 2 つあるようです。

1 - ユーザーを取得する汎用リポジトリ メソッドを作成し、必要なユーザー フィールドを渡します。

リーリー

2 - 非アクティブなユーザーを取得するためのリポジトリ メソッドを正確に作成します。メソッドはどのフィールドをリクエストする必要があるかを認識します。

リーリー

どちらの方法が良いですか? 最初の方法は、この場合リポジトリが「非アクティブな」ユーザーのドメイン理解について何も知らないため、私にとっては良いように思えます。しかし同時に、そのような事後対応型のアプローチを構築するのは非常に難しい場合があります。

2 番目の方法は構築が簡単ですが、同時に、ある程度の「ビジネス」ロジックを理解しており、非アクティブなユーザーが "isArchived"false## に等しいユーザーであることを認識しています。 #。また、このリポジトリ メソッドは、何日間使用する必要があるかを認識します。

この場合、どのオプションを選択する必要がありますか?それとも、これを構築する他の方法があるでしょうか?

P粉151720173P粉151720173230日前546

全員に返信(1)返信します

  • P粉118698740

    P粉1186987402024-04-02 19:39:22

    この問題を切り分ける正しい方法は、リポジトリがリポジトリ内のデータ要素についてのみ認識していることです。これは、リポジトリに複数のエントリ ポイントを持つことができないという意味ではなく、すべて同じ「テーブル」にアクセスする多くの異なるクエリが存在する可能性があります。

    これは、最初のアプローチのような完全な QBE が必要という意味ではありません。シンプルにしてください。データベース レベルをカプセル化するクエリがありますが、それでも必要なものは必要です。

    この場合、isArchived パラメーターと lastVisitedDate パラメーターを渡す署名が必要です。 QueryUsersByStatusAndLastVisited のようなもの。このように、リポジトリはデータの取得に関係するすべてのビットを処理しますが、なぜそれらが取得されるのかについてのロジックはありません。すべてのスマート ビットがサービス層にカプセル化されているため、これは「ダム」になります。

    返事
    0
  • キャンセル返事