寻求建议-如何将Facebook SDK集成到Android的Clean Architecture中?

Ngu*_*inh 5 android facebook-graph-api clean-architecture

我在当前项目中正在使用Clean Architecture。现在,我想集成一个功能,该功能要求Facebook SDK执行登录。

我认为,Facebook SDK充当数据提供程序(提供身份验证服务,类似于其他Restful登录API),应在data模块下而不是app模块下进行设置和使用。例如,如果我想执行Facebook登录,我将调用适当的用例,然后该用例将调用data模块进行实际工作。

但是,挑战在于Facebook方法(请参阅Facebook的LoginManager,在此处),需要Activity / Fragment实例才能运行。

那么,我应该将Facebook SDK移回app模块还是将Activity实例传递给storage模块?

我真的不喜欢他们的任何选择。(尽管有助于解决需求,但感到不高兴)。有谁有更好的方法?谢谢

pla*_*ist 0

为了严格遵循干净的架构,您必须将所有框架排除在您的内部圈子(应用程序模块)之外。这包括 Facebook SDK 以及 Android 本身。

在清洁架构中从业务规则访问框架的常用方法是通过抽象。

在您的用例中,我建议如下:

  • 在应用程序模块中创建 IActivity 接口来抽象活动/片段
  • 在应用程序模块中创建 ILoginManager ,该模块采用 IActivity
  • 创建AndroidActivity,在框架层实现IActivity
  • 创建FacebookLoginManager,在框架层实现ILoginManager
  • 调用用例交互器时,从您的 Android 活动中将活动作为 IActivity 传递,将 FacebookLoginManager 作为 ILoginManager 传递
  • 然后,FacebookLoginManager 必须将 IActivity 强制转换回 Android 活动,并将其从 Facebook SDK 传递给 LoginManager

这种方法会向您的项目添加更多的类和接口,但也会清楚地分离关注点和依赖项。