问题标签 [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.
android - 使用 RxAndroid 用例在 Presenter 中测试什么以及如何测试
我的项目使用干净的架构。
我用:
- 表示层的 MVP
- 使用 RxAndroid 并获取 DisposableObservers 的用例
- 用于 DI 的匕首 2
来自演示者(Kotlin)的示例代码:
我想为这个演示者编写单元测试。
我的问题是: DisposableObserver 中的不同方法调用是否值得测试(onStart、onNext ...)?如果是的话,看起来我需要将 DisposableObserver 注入演示者(以便我能够模拟它)。有没有更清洁的方法?
android - 为什么在这种情况下处置 DisposableObserver 很重要
我从事具有干净架构的android项目。
我有以下课程:
所以execute(..)
拿一个 DisposableObserver 然后有一个dispose()
方法被调用来处理这个 observable。
在我的情况下,observable 可能来自 WebApi 使用改造或缓存使用领域。
现在在演示者 onDestroy() 中,我调用了interactor.dispose()
类似的方法:
从视图中调用它:
我完全理解架构,也理解处置非托管网络或数据库资源,但我需要完全理解在这种情况下处置 observable 是否真的很重要,因为我认为 Retrofit 或 Realm 自动管理关闭连接并处置那里的资源。
我认为这与处置领域或改造资源无关,但它可能与取消订阅 observable 本身有关,因为我检查了文档并发现:
DisposableObserver 类:一个抽象的 Observer,通过实现 Disposable 允许异步取消。所有预先实现的 final 方法都是线程安全的。
使用公共 dispose() 方法从 onNext 实现中释放序列。
但我仍然不明白使用它的好处。是否在销毁视图时取消订阅可观察对象,以便它会从发射器onNext()
转到onComplete()
并关闭发射器上的订阅?
angular - 由多个子项目组成的 Angular 4 项目
我正在使用 Angular 4、Ionic 3 和 Cordova 开发跨平台移动应用程序。我想让我的项目分成多个子项目,这样我就有多个子项目,每个子项目都有自己独立于其他项目的依赖项。我的目标是在这个项目中使用干净的架构。
例如,我想拥有cache
,remote
和data
子项目。子项目cache
不需要对 http 模块的依赖,所以我不想在该模块中使用它,同样我不想在其他任何地方使用类cache
和remote
子项目,但data
子项目所以我的同事不能将来搞砸它。
最后,我想实现与此类似的项目,但这是本机 Android 项目。
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
模块?
我真的不喜欢他们的任何选择。(虽然它有助于解决需求但不开心)。有没有人有更好的方法?谢谢
android - 当 Uncle Bob Clean Architecture 中没有 UI 时该怎么办
我开始将商业 Android 中的Uncle Bob Clear Architecture应用到我正在处理的项目中。
有一些盲点我不知道如何整理我的代码,在这种情况下没有 UI。
我的示例将是一个包含杂项内容的单例依赖项:
数据层
ContentService.kt
有改造接口
ContentRepository.kt
具有与服务连接的存储库
领域层
ContentUseCase.kt
包含我将用于转换为业务逻辑并对其进行测试的用例
现在,我有一个名为的文件ContentManager.kt
,它将我的信息保存在 Singleton 中:
android - 使用 Dagger2 和 setRetainInstance(true) 时出现 NullPointException;
所以我遵循Clean Architecture来设计我的应用程序。我有一个Activity
带视图的寻呼机,里面有两个Fragment
。PagerAdapter
我通过 Dagger 为这个注入了。
我知道调用setRetainInstance(true)
一个片段可以防止它被破坏,并且getActivity()
如果 Activity 被破坏,在这样的片段上可能会返回一个问题。在我的活动处于后台并且活动已(可能)被破坏后尝试恢复我的活动时,我得到了 NullPointException。
所以我的问题是
- 有没有更好的方法来完成我想要做的事情?
- 有人可以指出我的任何资源吗?
- 如果片段已被破坏,也不确定为什么片段和适配器仍然处于活动状态。LeakCanary 没有内存泄漏。
我的活动有一个 Dagger 组件 MainActivityComponent 注入如下。并且还扩展了 HasComponent。有关这方面的更多信息,请参阅HasComponent
MainActivity.java
获取Activity的组件
让我知道你们是否有任何困惑。我知道我的解释是一团糟。谢谢
更新
似乎即使我删除setRetainInstance(true)
了这个错误也没有被阻止。
android - 使用 android clean 架构在用例之间共享域数据
我应该在哪里保存 android clean 架构项目中的域数据实例?如何在不破坏以下依赖规则的情况下使所有用例都可以访问实例:
源代码依赖项只能指向内部,内圈中的任何内容都无法了解外圈中的任何内容。
目前,我们正在使用静态数据,但是当操作系统终止进程(当应用程序处于后台时)时,我们遇到了静态数据丢失的问题。
我阅读了以下问题的答案,在 android studio 中丢失了对静态数据的引用,它建议如果您有一个想要保留的状态,您需要使用共享首选项或序列化文件流将其保存到磁盘。
有没有更好的方法在不同用例之间共享业务逻辑数据?
maven - 清洁架构 Maven 模块依赖
我有一个使用 Maven 工具由干净架构设计的项目。
我的入口点模块(E)依赖于下一个级别,即用例(UC)模块和E模块之间的桥(BR)。该 BR 模块依赖于 UC 模块,这意味着 UC 对 E 也是可见的。我可以更改模块中pom.xml
的某些内容,以便 E 不会看到 UC,但会看到看到 UC 的 BR 模块吗?
换句话说,我有这样的事情:
E <isDependentOn> BR <isDependentOn> UC ? 如何对 E 隐藏 UC?
我写了理论问题,因为我无法分享有关项目政策的代码。
java - 如何将存储库和存储库实现拆分到不同的模块?
伙计们!
我的应用程序中有两个 Maven 模块 - 域和持久性。
域具有域对象、服务和到外部端点的“数据提供者”接口,例如持久性。域包含业务逻辑并且没有外部依赖——他对持久性一无所知。
持久性取决于域。它从域模块实现“数据提供者”接口。它可能是关系数据库实现、nosql 实现、文件实现等。
例如,我在域中有接口PersonRepository ,如下所示:
我想用 Spring Data JPA 实现数据提供者接口。我需要写这样的东西:
但我不想将 spring 依赖项注入“核心域”。我想保持我的领域非常轻量级和独立。
有没有办法在 Persistence 模块中使用 Spring Data 实现 PersonRepository?
domain-driven-design - DDD 存储库可以是有状态的吗?
我正在设计一个运输应用程序并尝试使用 Clean Architecture。我试图找出在哪里保存 Shipment 对象的状态,这样我就不必在每次用户单击 UI 中的按钮时重新实例化一个新对象。这是流程。
- 用户在 UI 中输入交货编号
- UI 控制器处理 UI 事件并实例化用例交互器的一个实例。传递给用例交互器的构造函数的存储库实例
- 用例交互器通过调用工厂(例如 CREATE_BY_DELIVERY)来实例化 Shipment 的实例。工厂调用 Repository 从数据库中收集数据。
- 交付数据在 UI 上填充
- 用户然后单击“报价单”按钮
- UI Controller 处理按钮点击事件并调用 Use Case Interactor a 的 RATE_QUOTE 方法。用例交互器是否需要像第 3 步一样再次调用 Shipment 工厂,或者用例交互器是否可以获取已在第 3 步中创建的 Shipment 对象的实例?
- 费率显示在 UI 上
- 用户然后单击处理发货按钮
- UI Controller 处理按钮点击事件并调用 Use Case Interactor a 的 PROCESS_SHIPMENT 方法。用例交互器是否需要像第 3 步一样再次调用 Shipment 工厂,或者用例交互器是否可以获取已在第 3 步中创建的 Shipment 对象的实例?
装运对象的状态应该是 UI 控制器、用例交互器还是存储库上的实例变量?理想情况下,我想将它保存在某个地方,这样我就不需要在每次用户单击 UI 上的按钮时都创建一个新对象。
先感谢您!