问题标签 [clean-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
86 浏览

android - 连续执行 rx.Obseravables

我正在使用 Fernando Ceja 的简洁架构开发一个 Android 应用程序。我的交互者或用例之一负责获取用户的提要数据。为了获取数据,首先我必须从数据库表中检索用户的团队,然后我必须从服务器端获取提要列表。

这就是我从数据库层获取团队的方式:

TeamCache 基本上只是另一个负责获取我在数据库中的所有团队的交互器。

以下是我从服务器端获取 Feed 数据的方法:

我的 GetFeedInteractor 类有一个名为 execute 的方法,我通过回调传递我稍后在 UI 中使用它来处理响应。所有这一切的问题是,目前我正在链接这样的响应:

正如您所看到的,一旦我从缓存交互器中获取了团队集合,我就会调用从同一个订阅者获取提要的方法。我不喜欢这个。我希望能够做一些更好的事情,比如使用 Observable.concat(getTeamsFromCache(), getFeedFromRepository()); 在订阅者中将调用链接到另一个 rx.Observable 并不是一件好事。我想我的问题是,如何链接两个使用不同订阅者的 rx.Observables?

更新:

ServerSubscriber 是我实现订阅改造服务的订阅者。它只是检查错误代码和一些东西。这是:

https://gist.github.com/4gus71n/65dc94de4ca01fb221a079b68c0570b5

默认订阅者是一个空的默认订阅者。这是:

https://gist.github.com/4gus71n/df501928fc5d24c2c6ed7740a6520330

TeamCache#getAllTeams() 返回 rx.Observable> FeedRepository#getFeed(int page, int offset) 返回 rx.Observable>

更新 2:

这是获取用户提要的交互器现在的样子:

0 投票
0 回答
174 浏览

spring - 当调用程序 bean 从 @Configuration 创建的 bean 实例化时,Spring-Boot @Async 会导致 NoSuchBeanDefinitionException

NoSuchBeanDefinitionException如果我@Async在一个用 注释的类中添加一个方法@Service,如果该类用于在@Bean一个类中实例化的另一个 bean,我会得到@Configuration

下面我画了一个简单的例子:

如果我删除@Asyncfrom asyncMethod,应用程序就会启动。如果我通过在构造函数上用@Service和注释来实例化 A @Autowired,应用程序就会启动。

约束是我必须A从一个单独的类实例化@Configuration类。

我在应用程序上使用干净的代码架构,其中核心域中的类不使用任何弹簧注释。A类是核心域的一部分。

我从外层将其中一些类实例化为 Spring Bean,因此我不会用特定于 spring 的注释“污染”它们。B是外层的一部分,可以有Spring注解。

如果我在 class 的构造函数中放置一个断点B,我可以看到它在我得到之前由 spring 实例化:NoSuchBeanDefinitionExceptionfor it。

我认为这@Async会导致代理出现一些奇怪的行为。我该如何处理?

0 投票
1 回答
1026 浏览

android - 在干净的架构中放置依赖注入类的位置

在干净的架构中,如果我按功能组织我的包。在哪里放置依赖注入Dagger2类代码?

0 投票
4 回答
7825 浏览

java - 清洁架构:结合交互器

我最近偶然发现了Bob 叔叔的Clean Architecture,我很想知道 Interactors 是否可以执行其他 Interactors。

例如,这些是我现在的交互器:getEmptyAlbums、getOtherAlbums。两者都有回调,分别返回专辑列表(专辑模型的 ArrayList)。

我是否允许有一个名为 getAllAlbums 的交互器在它的运行块中执行前两个交互器?

0 投票
0 回答
1062 浏览

android - Android 清洁架构 - 将 googleApiClient 调用放在哪里?

我计划在 MVP 中使用干净的架构。
我正在使用鲍勃叔叔认可的干净架构方法开始一个 android 项目。我已经下载了一个类似于入门模板的模板项目,可以在使用干净的架构方法时启动您。git hub 在这里:https ://github.com/dmilicic/Android-Clean-Boilerplate.git

所以我们将有 3 层;每个模板的域、表示和线程。

我的问题是关于我正在设计的登录活动。我正在创建一个“使用 google 登录”按钮。但我不确定将 googleAPIClient、googleSignInOptions 和 googleSignInResult 调用放在哪里。在我获得谷歌帐户身份验证后,我将其传递给 firebaseAuth 以将用户登录到我的网站,这样这也是另一个 API 调用,我不确定它是如何工作的。要了解如何使用 google 帐户登录 firebase 应用程序,您可以在此处查看:https ://www.androidtutorialpoint.com/firebase/android-firebase-authentication-tutorial-using-firebase-google-login/

所以让我解释一下为什么我在使用模板时遇到问题。假设他想使用 google 帐户登录,让我们开始跟踪用户的步骤:

  1. 用户点击“使用谷歌登录”按钮。这应该会触发 UI 要求演示者开始尝试 google 登录。所以此时我应该为演示者使用交互器(用例)还是应该直接在演示者中初始化 googleAPICient ?令人担忧的是,谷歌登录 Api 通过创建意图并将 googleApiClient 作为参数传递给它来工作。然后,您使用 startActivityForResult 启动该 Intent。这就是所有的android代码,那么它不应该在表示层中,特别是在活动本身中吗?所以看来我别无选择,只能从视图/活动本身调用谷歌标志。正确的 ?

然后,在我从该呼叫中获得活动结果后,我计划像这样登录到 firebase:

然后在演示者代码中:

0 投票
1 回答
1023 浏览

android - Android 清洁架构 - 何时创建新存储库?

所以我有一个使用 firebase 登录和存储数据的应用程序,我们也使用 firebase 数据库表。

该应用程序具有使用 google 按钮登录,因此,如果验证了 google 帐户,我会将帐户传递给 firebase 以将其存储在数据库中。创建/获取帐户后,我还将用户配置文件存储在 firebase 数据库表中。所以我的问题是关于使用鲍勃叔叔的干净架构方法的存储库。

我应该为谷歌登录创建一个存储库,然后为个人资料创建一个存储库吗?我的意思是,如果我们看一下用例(交互器),应该有 agoogleAPIInteractor和 afirebaseInteractor吗?或者我应该只创建一个名为的交互器UserDataInteractor?你明白我的意思吗?我对应该创建多少个存储库感到困惑。我认为每个新的存储库都会有自己的交互器,1:1 对吧?

让我们看看我想要实现的目标:

在演示者代码中(假设 MVP 架构)我会这样做:

我在这里注入的交互者将使用他们自己的仓库。一个叫

i1 连接到 google API 以验证 google 帐户,然后我将在回调中使用 i2 来创建配置文件。

所以我目前正在做的是google API有一个repo,firebase有一个repo,我有两个独立的交互器,这可以接受吗?事情是针对谷歌回购的,我没有存储任何东西。我只是在使用它,所以我有一个帐户可以登录到 firebase。

0 投票
0 回答
47 浏览

android - Clear Architecture 和 Nougat 的文本翻译问题

通过参考http://gunhansancar.com/change-language-programmatically-in-android/在 Nougat 及以下实现文本翻译

工作完美,直到棉花糖。

在 Nougat 中,来自 app 模块的消息运行良好。

数据模块中的文本正在翻译为设备语言,而不是应用程序语言。eg:设备语言为en_US,应用语言为fr_FR。

有人遇到过这种情况吗??

0 投票
0 回答
153 浏览

android - 在 android / web 的干净架构中使用域层后端

在我读过的关于 Android 中干净架构的每篇文章中,我看到领域层的类都在 android 项目中。但是,如果这一层完全独立于外层,那么如果项目具有 android 和 Web 界面,那么将这一层移动到任何后端服务(例如谷歌应用引擎)是否正确?
我的意思是,一个用于 android 的表示层和一个用于 Web(javascript 等)的表示层,但两者都使用相同的域层。

非常感谢!

0 投票
2 回答
308 浏览

android - Android clean架构的分层结构

我正在使用 MVP 模式和数据层的存储库模式构建一个具有干净架构的 android 应用程序。我对业务对象有点困惑。是否应该在表示中使用一个对象,而在域/数据层中是否应该使用另一种类型的相同对象?如果是这样,那么在何时何地将对象转换为另一种类型?

0 投票
2 回答
571 浏览

android - 过滤交互器结果的最干净的方法

我正在尝试在我的应用程序中实现干净的架构。我可以LoadItemsInteractor从存储库中加载所有项目,也可以LoadItemsByIdInteractor通过 id 加载项目。

我有一个方法,过滤接收到的项目,两个交互者共享它。我想知道我应该把这段代码放在哪里。选项:

  • Utils具有静态方法的类filter,两个交互者都会在将值返回给演示者之前调用它
  • BaseLoadItemsInteractor创建实现方法的抽象filter并从中继承两个交互器。
  • 创建并FilterItemsInteractor传递执行结果(来自演示者或具体交互者内部)。LoadItemsInteractorLoadItemsByIdInteractor

实现这一点的最干净的方法是什么?