アンクルボブのクリーンなアーキテクチャを、私が維持しているアプリケーションに適用しようとしていますが、使用例と複製/再利用に問題があります。ユースケースは自己完結型である必要があり、重複が予想されるというのは私の理解ですが、これは私が扱っていることには意味がないようです。最終的に他のユースケースを使用する必要がある複数のユースケースがあると思います。
個別に存在するが、次のように互いに依存し合う4つのユースケースの非常に簡略化された例を次に示します。
BulkSendUsersToUnit
SendUserToUnit
AddUserToMandatoryGroups
AddUserToGroup
それぞれに、常に適用される検証、リポジトリー呼び出し、および条件があります。基本的にこれをサービスで実行している場合、それらは単に、必要な場所から呼び出すメソッドです。
DIを使用して他のユースケースにユースケースを挿入できますか?
ここで何が欠けていますか?
ユースケースはメソッドではありません。
ユースケースはオブジェクトではありません。
ユースケースはレイヤーではありません。
ユースケース は、特定のケースでソフトウェアを使用しているユーザーに関するストーリーです。
したがって、さまざまなユースケースで同じコードを再利用できることは当然のことです。
しかし、多分あなたはビデオの1つを見ましたペイウォール Bobがユースケースのように理解できる場所は、アーキテクチャの一部です。
心配しないでください。それは彼のレイヤーの1つにあるボックスの名前にすぎません。 彼は他の名前を使用しています :
これはボブおじさんが間違っていることを意味しますか?いいえ。インタラクター/ユースケース/アプリケーションビジネスルール/ Oh-pick-a-name-and-stick-with-itレイヤーでは、アプリケーションのニーズ(詳細)をすべて無視し、ユーザーのニーズに焦点を当てます特定のユースケースを通過します。ただし、コード内のこの場所はユースケースではありません。ユースケースは、ユーザーがボタンをクリックしてから結果が表示されるまでの全体のストーリーです。
それで、インタラクター(またはあなたが呼びたいもの)は他のインタラクターを使うべきでしょうか?さて、これは次のDRY=極端なものです。あなたはAddUserToGroup
からのコードを他のどこかに置くことが許可されていませんか?
バロニー。 AddUserToMandatoryGroups
が別の意味を持ち、変更したい理由がAddUserToGroup
とは異なる場合、AddUserToMandatoryGroups
に独自の追加ユーザーコードを指定してもかまいません。今のところ、AddUserToGroup
のコードの文字コピー用の文字です。これらを互いに独立して変更できるようにする必要があると考える正当な理由がある場合、現時点でそれらが同一に見えるかどうかは問題ではありません。繰り返しアイデアにDRYを適用します。コードではありません。
Dependency Injectionに関しては、いつから何を切り離したい場合でも、それはうまく機能します。
Bulk shitlist = new Bulk(annoyingUsers, bannedForLifeUnit);
Register.OnIveHadAllICanTake( ()-> shitlist.send() );