问题标签 [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 回答
283 浏览

android - 使用 RxAndroid 用例在 Presenter 中测试什么以及如何测试

我的项目使用干净的架构

我用:

  • 表示层的 MVP
  • 使用 RxAndroid 并获取 DisposableObservers 的用例
  • 用于 DI 的匕首 2

来自演示者(Kotlin)的示例代码:

我想为这个演示者编写单元测试。

我的问题是: DisposableObserver 中的不同方法调用是否值得测试(onStart、onNext ...)?如果是的话,看起来我需要将 DisposableObserver 注入演示者(以便我能够模拟它)。有没有更清洁的方法?

0 投票
2 回答
3929 浏览

android - 为什么在这种情况下处置 DisposableObserver 很重要

我从事具有干净架构的android项目。

我有以下课程:

所以execute(..)拿一个 DisposableObserver 然后有一个dispose()方法被调用来处理这个 observable。

在我的情况下,observable 可能来自 WebApi 使用改造或缓存使用领域。

现在在演示者 onDestroy() 中,我调用了interactor.dispose()类似的方法:

从视图中调用它:

我完全理解架构,也理解处置非托管网络或数据库资源,但我需要完全理解在这种情况下处置 observable 是否真的很重要,因为我认为 Retrofit 或 Realm 自动管理关闭连接并处置那里的资源。

我认为这与处置领域或改造资源无关,但它可能与取消订阅 observable 本身有关,因为我检查了文档并发现:

DisposableObserver 类:一个抽象的 Observer,通过实现 Disposable 允许异步取消。所有预先实现的 final 方法都是线程安全的。

使用公共 dispose() 方法从 onNext 实现中释放序列。

但我仍然不明白使用它的好处。是否在销毁视图时取消订阅可观察对象,以便它会从发射器onNext()转到onComplete()并关闭发射器上的订阅?

0 投票
1 回答
598 浏览

angular - 由多个子项目组成的 Angular 4 项目

我正在使用 Angular 4、Ionic 3 和 Cordova 开发跨平台移动应用程序。我想让我的项目分成多个子项目,这样我就有多个子项目,每个子项目都有自己独立于其他项目的依赖项。我的目标是在这个项目中使用干净的架构。

例如,我想拥有cache,remotedata子项目。子项目cache不需要对 http 模块的依赖,所以我不想在该模块中使用它,同样我不想在其他任何地方使用类cacheremote子项目,但data子项目所以我的同事不能将来搞砸它。

最后,我想实现与此类似的项目,但这是本机 Android 项目。

0 投票
1 回答
314 浏览

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

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

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

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

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

我真的不喜欢他们的任何选择。(虽然它有助于解决需求但不开心)。有没有人有更好的方法?谢谢

0 投票
0 回答
58 浏览

android - 当 Uncle Bob Clean Architecture 中没有 UI 时该怎么办

我开始将商业 Android 中的Uncle Bob Clear Architecture应用到我正在处理的项目中。

有一些盲点我不知道如何整理我的代码,在这种情况下没有 UI。

我的示例将是一个包含杂项内容的单例依赖项:


数据层

ContentService.kt有改造接口

ContentRepository.kt具有与服务连接的存储库



领域层

ContentUseCase.kt包含我将用于转换为业务逻辑并对其进行测试的用例


现在,我有一个名为的文件ContentManager.kt,它将我的信息保存在 Singleton 中:

0 投票
1 回答
196 浏览

android - 使用 Dagger2 和 setRetainInstance(true) 时出现 NullPointException;

所以我遵循Clean Architecture来设计我的应用程序。我有一个Activity带视图的寻呼机,里面有两个FragmentPagerAdapter我通过 Dagger 为这个注入了。

我知道调用setRetainInstance(true)一个片段可以防止它被破坏,并且getActivity()如果 Activity 被破坏,在这样的片段上可能会返回一个问题。在我的活动处于后台并且活动已(可能)被破坏后尝试恢复我的活动时,我得到了 NullPointException。

所以我的问题是

  • 有没有更好的方法来完成我想要做的事情?
  • 有人可以指出我的任何资源吗?
  • 如果片段已被破坏,也不确定为什么片段和适配器仍然处于活动状态。LeakCanary 没有内存泄漏。

我的活动有一个 Dagger 组件 MainActivityComponent 注入如下。并且还扩展了 HasComponent。有关这方面的更多信息,请参阅HasComponent

MainActivity.java

获取Activity的组件

让我知道你们是否有任何困惑。我知道我的解释是一团糟。谢谢

更新

似乎即使我删除setRetainInstance(true)了这个错误也没有被阻止。

0 投票
1 回答
299 浏览

android - 使用 android clean 架构在用例之间共享域数据

我应该在哪里保存 android clean 架构项目中的域数据实例?如何在不破坏以下依赖规则的情况下使所有用例都可以访问实例:

源代码依赖项只能指向内部,内圈中的任何内容都无法了解外圈中的任何内容。

目前,我们正在使用静态数据,但是当操作系统终止进程(当应用程序处于后台时)时,我们遇到了静态数据丢失的问题。

我阅读了以下问题的答案,在 android studio 中丢失了对静态数据的引用,它建议如果您有一个想要保留的状态,您需要使用共享首选项或序列化文件流将其保存到磁盘。

有没有更好的方法在不同用例之间共享业务逻辑数据?

0 投票
1 回答
224 浏览

maven - 清洁架构 Maven 模块依赖

我有一个使用 Maven 工具由干净架构设计的项目。

我的入口点模块(E)依赖于下一个级别,即用例(UC)模块和E模块之间的桥(BR)。该 BR 模块依赖于 UC 模块,这意味着 UC 对 E 也是可见的。我可以更改模块中pom.xml的某些内容,以便 E 不会看到 UC,但会看到看到 UC 的 BR 模块吗?

换句话说,我有这样的事情:

E <isDependentOn> BR <isDependentOn> UC ? 如何对 E 隐藏 UC?

我写了理论问题,因为我无法分享有关项目政策的代码。

0 投票
2 回答
1033 浏览

java - 如何将存储库和存储库实现拆分到不同的模块?

伙计们!

我的应用程序中有两个 Maven 模块 - 域和持久性。

域具有域对象、服务和到外部端点的“数据提供者”接口,例如持久性。域包含业务逻辑并且没有外部依赖——他对持久性一无所知。

持久性取决于域。它从域模块实现“数据提供者”接口。它可能是关系数据库实现、nosql 实现、文件实现等。

例如,我在域中有接口PersonRepository ,如下所示:

我想用 Spring Data JPA 实现数据提供者接口。我需要写这样的东西:

但我不想将 spring 依赖项注入“核心域”。我想保持我的领域非常轻量级和独立。

有没有办法在 Persistence 模块中使用 Spring Data 实现 PersonRepository?

0 投票
2 回答
1072 浏览

domain-driven-design - DDD 存储库可以是有状态的吗?

我正在设计一个运输应用程序并尝试使用 Clean Architecture。我试图找出在哪里保存 Shipment 对象的状态,这样我就不必在每次用户单击 UI 中的按钮时重新实例化一个新对象。这是流程。

  1. 用户在 UI 中输入交货编号
  2. UI 控制器处理 UI 事件并实例化用例交互器的一个实例。传递给用例交互器的构造函数的存储库实例
  3. 用例交互器通过调用工厂(例如 CREATE_BY_DELIVERY)来实例化 Shipment 的实例。工厂调用 Repository 从数据库中收集数据。
  4. 交付数据在 UI 上填充
  5. 用户然后单击“报价单”按钮
  6. UI Controller 处理按钮点击事件并调用 Use Case Interactor a 的 RATE_QUOTE 方法。用例交互器是否需要像第 3 步一样再次调用 Shipment 工厂,或者用例交互器是否可以获取已在第 3 步中创建的 Shipment 对象的实例?
  7. 费率显示在 UI 上
  8. 用户然后单击处理发货按钮
  9. UI Controller 处理按钮点击事件并调用 Use Case Interactor a 的 PROCESS_SHIPMENT 方法。用例交互器是否需要像第 3 步一样再次调用 Shipment 工厂,或者用例交互器是否可以获取已在第 3 步中创建的 Shipment 对象的实例?

装运对象的状态应该是 UI 控制器、用例交互器还是存储库上的实例变量?理想情况下,我想将它保存在某个地方,这样我就不需要在每次用户单击 UI 上的按钮时都创建一个新对象。

先感谢您!