私は、AndroidアプリケーションがClean Architectureを使用するためのGoogleおよびFacebookログインの統合を回避する方法を見つけようとしています。
私のアプリケーションには3 Android Studioモジュールがあります:
ログイン固有のSDKをdataレイヤー(Android Studio)の別のモジュール)に分離したいと思います。
この特定の使用例(Googleログインなど)で私が持っている問題は、SDKが私のアクティビティ(プレゼンテーションレイヤー)と直接通信する必要があることです。特定のオブジェクトを作成したら、アクティビティからstartActivityForResultを呼び出す必要があり、onActivityResultログイン情報を含む私の起動アクティビティのメソッド。
これら2つのことにより、次のことが義務付けられます。
これはどれも問題ないようです。このユースケースを処理する適切な方法を知っていますか?
私があなたを正しく理解しているなら、あなたはモジュールを次のようにきれいなアーキテクチャにマッピングしています:
(Data(Presentation(ドメイン())))
それはいいです。名前は私が予想したものとは少し異なりますが、機能します。
ログイン固有の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を気にせずにログインを考えるべきです。
だから私にはこれでいいようです。あなたがそれを正しく行うなら。