5

我在我当前的项目中使用Clean Architecture 。现在我想集成一个请求 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 本身。

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

在您的用例中,我建议以下内容:

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

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

于 2018-03-11T09:55:50.703 回答