问题标签 [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 投票
0 回答
507 浏览

android - 在 android app 中应用 rxjava 的最佳实践

我目前正在开发应用程序,我想在其中应用一些新的实践、架构解决方案和库(Rxjava、MVP、干净的架构)。有一个登录过程,包括几个步骤:

  1. 如果不执行 nr.2,则检查设备上的本地数据库中是否存在用户帐户
  2. 使用电子邮件和 ID 向服务器请求(由 Google SignIn 提供)- 服务器检查用户是否已存在于远程服务器数据库中 a。如果不是 - 服务器发送错误响应 (404)
    • 根据响应,如果成功,我将新用户添加到服务器数据库
    • 我将用户保存到设备 b 上的本地数据库中。如果存在(查看数字 2)
    • 我只将用户保存到设备上的本地数据库

每个调用都是使用 RXJava 完成的。每个呼叫都基于前一个呼叫的结果(基于在订阅者中处理的响应)。每个新呼叫都从订户开始。如果在订阅者中调用 OnError 方法,我执行将数据保存在服务器上的 api 调用。所有对 observable 的订阅都在“presenter”中进行。

我想知道是否不可能将所有这些调用合二为一(zip,flatmap)?有更好的主意吗?

0 投票
1 回答
645 浏览

java - hibernate 业务对象可以用作干净架构中的实体吗?

在我们的项目中,我们使用 eclipse hibernate 插件生成的类进行持久化。生成的类具有以下结构。


我的问题是,如果我们使用映射文件中使用的 POJO 类作为最内层的实体,是否会违反 Uncle Bobs 的清洁架构。

在这种情况下,特定于休眠的 DAO 类将属于最外层,而 UseCases 层将通过提供要实现的接口与该层进行通信。

0 投票
1 回答
372 浏览

ios - 使用 SWIFT Clean Architecture 处理无效的 Firebase 数据

我正在尝试使用此处描述的 Clean Architecture for Swift 显示从 Firebase 收到的消息列表:

http://clean-swift.com/clean-swift-ios-architecture/

我的疑问是当数据在 firebase 中无效时如何处理。目前应用程序崩溃,因为提供给 UITableView 的索引不正确。

我正在使用FUArray 类的 SWIFT 版本(称为 FireBaseQueryDataSource),它正确地为 firebase 节点提供索引,如下所示

因此,这些索引被传播到 UITableView,从以下跟踪中可以看出:

ChatMessagesViewController.displayMessage(viewModel : ChatMessageViewModel) -> () (ChatMessagesViewController.swift:83)

ChatMessagesPresenter.presentChatMessage(response : ObserveChatMessagesResponse) -> () (ChatMessagesPresenter.swift:36)

ChatMessagesInteractor.chatMessagesWorkerDidAddObjectAtIndex(worker : ChatMessagesWorker, message : FireBaseChatMessage, index : Int) -> () (ChatMessagesInteractor.swift:66)

ChatMessagesWorker.dataSourceDidAddObjectAtIndex(数据源:FireBaseQueryDataSource,快照:FIRDataSnapshot,索引:Int)->()(ChatMessagesWorker.swift:131)

FireBaseQueryDataSource.insertSnapshot(snapshot : FIRDataSnapshot, previousChildKey : String?) -> () (FireBaseQueryDataSource.swift:99)

FireBaseQueryDataSource.(observeQuery() -> ()).(closure #1) (FireBaseQueryDataSource.swift:69)

当 FIRDataSnapshot 解析为 Worker 类中的 FireBaseChatMessage 时,会检测到无效数据,因此不再传播。

问题是以下对象的索引不正确,因此 UITableView 断言处理程序会引发异常。

我不确定应该在哪里以及如何处理索引。Interactor/Worker 类没有对节点列表的引用,因此我无法在那里获得新的索引。

在 FireBaseQueryDataSource 类中,我不能放置与此功能相关的任何逻辑,因为它可以处理任何类型的数据。

Presenter 或 ViewController 类不应处理任何逻辑,ChatMessageViewModel 在到达该点时应该已经具有正确的索引。

任何帮助,将不胜感激。

0 投票
1 回答
169 浏览

ios - 更多文件会增加 Swift 中的编译时间吗?

我目前正在为一个相当大的 iOS 应用程序使用 CLEAN Swift iOS 架构(http://clean-swift.com),它基于鲍勃叔叔的清洁架构。它确实减少了视图控制器的大小,但是每个场景(或屏幕)都有很多文件。典型的屏幕将包含以下文件:ViewController、Presenter、Interactor、Router、Configurator。我们还为每个视图控制器使用单独的故事板——每个故事板只有一个视图控制器。还有许多工作文件可以执行各种 api 调用。Swift 编译时间相当慢,但在我的记忆中,我很确定它总是如此(甚至在我们将架构从 MVC 更改为 CLEAN 之前)。然而,一些同事开始质疑这种架构是否是导致编译时间缓慢的原因。我的问题是,使用更多文件会增加编译时间吗?MVC 会编译得更快吗?还,故事板呢?这是使用每个视图控制器一个不好的做法吗?

0 投票
1 回答
185 浏览

asp.net-mvc - 为什么 Orchard 没有模型视图控制器?

我在果园工作。写这样一个项目是我的梦想!..所以我开始了一项研究。我对 orchard 感兴趣的是,虽然 orchard 是 mvc 项目,但为什么它在他的 web 层解决方案中没有任何模型视图控制器?它使用 或像这样CleanArchitecture的一些特定架构吗?

我试图在果园文件中了解这个案例,但我没有找到任何关于它的描述。

0 投票
1 回答
1725 浏览

android - 随时间在服务器上更改数据的存储库模式

我正在关注著名的Robert C. Martin提出的Clean Architecture。Clean Architecture 的鸟瞰图如下:

在此处输入图像描述 但是现在我担心存储库模式修改。存储库模式的基本步骤是:

  1. 搜索内存缓存并向应用层提供数据
  2. 如果没有找到,搜索本地数据源并同步到内存缓存并提供数据给应用层
  3. 如果没有找到,搜索远程数据源并同步到本地数据源并提供数据给应用层

严格按照上述步骤,如果本地数据源中存在数据,则永远不会从远程数据源同步数据,而远程数据可能会更改。我该如何修改才能处理这种情况?我想到了一个想法,写在下面,但我确实在寻找更好的解决方案。

我的想法是跟踪本地数据库中每条记录的最后同步时间。如果上次同步时间超过阈值时间,则自动同步。

0 投票
1 回答
258 浏览

android - 干净架构中具有优先级作业队列的依赖注入

我在一个使用干净架构概念的项目中使用优先级作业队列。问题是:要使用优先级作业队列执行 DI,我需要创建一个 BaseJob 作业,如下所示:

问题在于:

我需要访问位于表示层中的 ApplicationComponent,但由于我的 BaseJob 位于数据层中,因此我无权访问它。

如果我让数据层知道表示,我将打破干净架构的原则。

有谁知道我该怎么做?

0 投票
1 回答
4348 浏览

android - 存储库和用例有什么区别?

我正在使用干净的架构创建一个聊天应用程序,我想在应用程序启动时检查用户是否登录,如果他没有登录,则打开登录屏幕,所以我的问题是:

  1. 实现它的最佳方法是什么?如果用户已经登录,我应该进行LoginActivity启动器活动并检查启动时间然后打开?我应该把检查用户是否经过身份验证的逻辑放在哪里(也许?)?LoginPresenterMainActivityIsLoggedInUseCase

  2. 我真的不明白存储库和用例之间有什么区别,当已经有了and时,为什么我要制作GetAllUsersUseCaseand .. 等?为什么要创建一个全新的类来引用存储库中已经存在的方法?EditUserUseCaseUsersRepository.getAllUsers()UsersRepository.editUser(User user)

0 投票
2 回答
877 浏览

php - 对引用不同实体的用户帐户进行建模

我正在开始一个新项目,它将充当授权/身份验证服务器和特定类型用户的简单用户管理。用户可以是HelpDeskResponsibleGroupManagerEmployeeCustomer。所有这些组成员都可以在 Web 界面上使用相同的表单登录。每个模型将包含描述它们的不同数据集。

我的问题是模型设计。我很确定我需要一些User具有登录和读取角色所需的所有数据的实体,但我不知道如何将其余模型与用户帐户相关联以轻松获取有关登录用户的信息。另一个问题是用户管理 - 给定用户帐户已创建,我需要以某种方式将其链接到我上面提到的一种类型的模型。

我的概念是过度设计吗?有没有针对此类问题的解决方案?也许我不需要针对不同帐户类型的多个实体?

感谢您的任何建议。

编辑:不同的权限级别不是这里最大的问题 - 我想根据用户所属的角色存储有关用户的不同信息。Customer将具有与 不同的数据集Employee。我很确定它们是不同的模型,但我想保存使用相同登录表单登录的能力。

0 投票
1 回答
2006 浏览

android - 每种存储库方法的Android Clean Architecture UseCase?

我们是否需要从领域层的接口UseCases为每个方法创建?Repository

例如假设我有这样的存储库接口

如您所见,有一种size()方法可以返回数据库或文件中的记录数,无论如何。而且这种方法非常快。我猜这个方法不需要,UseCase因为它不会阻塞UI线程并且可以同步执行。

所以你能解释我什么时候创建UseCases 什么时候不创建。基本上有什么UseCase创作规则吗?

对不起,如果这个问题有一些误解。

提前致谢 ;)

我也在 github 上的 Android-CleanArchitecture repo 上打开了同样的问题,但还没有人回答,这就是我在这里问的原因。