web-dev-qa-db-ja.com

クリーンアーキテクチャ:Google / Facebookログインとデータレイヤー

私は、AndroidアプリケーションがClean Architectureを使用するためのGoogleおよびFacebookログインの統合を回避する方法を見つけようとしています。

私のアプリケーションには3 Android Studioモジュールがあります:

  • presentation:すべてのUI(アクティビティ、フラグメント、カスタムビュー)(フレームワークとドライバーレイヤーの一部)とともに、クリーンアーキテクチャ(プレゼンター)のインターフェイスアダプターレイヤーが含まれています
  • domain:これは、クリーンアーキテクチャのユースケースレイヤーです。ビジネスモデル、ユースケース、リポジトリインターフェースが含まれています
  • data:これには、すべてのDriverおよびFrameworkクラス、ライブラリ(改造、データベースなど)、およびリポジトリ実装が含まれます

ログイン固有のSDKをdataレイヤー(Android Studio)の別のモジュール)に分離したいと思います。

この特定の使用例(Googleログインなど)で私が持っている問題は、SDKが私のアクティビティ(プレゼンテーションレイヤー)と直接通信する必要があることです。特定のオブジェクトを作成したら、アクティビティからstartActivityForResultを呼び出す必要があり、onActivityResultログイン情報を含む私の起動アクティビティのメソッド。

これら2つのことにより、次のことが義務付けられます。

  • google/Facebook SDKの依存関係をpresentationレイヤーに保持するか、 ただし、これはクリーンなアーキテクチャの原則に違反しています。これらの依存関係をデータレイヤーに保持したいと思います
  • または、すべてのレイヤー(プレゼンテーション、ドメイン、データ)を通過する呼び出しを追加して、onActivityResultメソッドからログイン情報を返します。 ただし、これは特定のログインSDKのためにドメイン契約を変更することを意味します

これはどれも問題ないようです。このユースケースを処理する適切な方法を知っていますか?

4
Rafi Panoyan

私があなたを正しく理解しているなら、あなたはモジュールを次のようにきれいなアーキテクチャにマッピングしています:

DataPresentationドメイン())))

enter image description here

それはいいです。名前は私が予想したものとは少し異なりますが、機能します。

ログイン固有のSDKをデータレイヤー(Android Studio)の別のモジュール)に分離したいと思います。

それは良い本能です。使用している特定のログインSDKに関する知識は広めるべきではありません。一箇所に保管してください。

この特定の使用例(Googleログインなど)で私が持っている問題は、SDKが私のアクティビティ(プレゼンテーションレイヤー)と直接通信する必要があることです。特定のオブジェクトを作成したら、アクティビティからstartActivityForResultを呼び出す必要があります。起動アクティビティのonActivityResultメソッドで、ログイン情報を含むコールバックを受け取ります。

これら2つのことにより、次のことが義務付けられます。

google/Facebook SDKの依存関係をプレゼンテーションレイヤーに保持することもできます。しかし、これはクリーンアーキテクチャの原則に違反しています。これらの依存関係をデータレイヤーに保持したいと思います。

クリーンアーキテクチャは原則ではありませんが、そうです、これは悪いことです。

または、すべてのレイヤー(プレゼンテーション、ドメイン、データ)を通過する呼び出しを追加して、onActivityResultメソッドからのログイン情報を返します。しかし、これは特定のログインSDKのためにドメイン契約を変更することを意味します

分離したいのは、使用している特定のSDKに関する知識です。ログインのアイデアは間違いなくレイヤーを切り抜けるものです。レイヤーを下っていくと、ログインの詳細に関する知識は取り除かれます。したがって、GoogleのログインSDKはDataレイヤーに配置できますが、Presentationは、これを、SDKが話す言語/ APIで表示するためのログインと見なす必要があります。それがあなたのOutput Port ここに。 Domainは、SDKが話す言語/ APIを気にせずにログインを考えるべきです。

だから私にはこれでいいようです。あなたがそれを正しく行うなら。

1
candied_orange