5

現在のプロジェクトでクリーン アーキテクチャを使用しています。今、ログインを実行するために Facebook SDK を要求する機能を統合したいと考えています。

私の意見では、Facebook SDK はデータ プロバイダー (他の Restful ログイン API と同様に認証サービスを提供する) として機能し、dataモジュールではなくappモジュールの下でセットアップして使用する必要があります。たとえば、Facebook ログインを実行したい場合は、適切なユースケースを呼び出し、そのようなユースケースがdataモジュールを呼び出して実際の作業を行います。

しかし、課題は Facebook メソッド (Facebook の LoginManager を参照)であり、Activity/Fragment インスタンスを実行する必要があります。

では、Facebook SDK をモジュールに戻すappか、Activity インスタンスをstorageモジュールに渡す必要がありますか?

私はそれらのオプションがあまり好きではありません。(要件の解決には役立ちますが、満足していません)。誰にもより良いアプローチがありますか?ありがとう

4

1 に答える 1

0

クリーンなアーキテクチャに厳密に従うためには、すべてのフレームワークを自分の内輪 (アプリ モジュール) から遠ざける必要があります。これには、Facebook SDK と Android 自体が含まれます。

クリーン アーキテクチャでビジネス ルールからフレームワークにアクセスする通常の方法は、抽象化によるものです。

あなたのユースケースでは、次のことをお勧めします。

  • アクティビティ/フラグメントを抽象化するためにアプリ モジュールに IActivity インターフェイスを作成する
  • IActivity を受け取るアプリ モジュールに ILoginManager を作成する
  • フレームワーク層に IActivity を実装する AndroidActivity を作成する
  • フレームワーク層に ILoginManager を実装する FacebookLoginManager を作成する
  • ユースケースのインタラクターを呼び出すときの Android アクティビティから、アクティビティを IActivity として渡し、FacebookLoginManager を ILoginManager として渡します
  • 次に、FacebookLoginManager は IActivity を Android アクティビティにキャストし、それを Facebook SDK から LoginManager に渡す必要があります。

このアプローチは、いくつかのクラスとインターフェイスをプロジェクトに追加しますが、懸念と依存関係を明確に分離します。

于 2018-03-11T09:55:50.703 に答える