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

android - 清洁架构 Android:在哪里进行对象映射

我正在尝试基于 bob 的干净架构构建一个 android 应用程序。我读过很多相同的文章。最后跟着这个这个。我从这里阅读了关于存储库模式的信息。

该应用程序是一个简单的笔记(/想法)应用程序。我是按功能打包的。

封装结构

让我们以案例为例,从数据库中获取所有注释/想法。我有一个用例/交互GetAllIdeasUseCase器,它将返回(观察者)业务对象列表IdeasEntity。这使用IdeasRepository来获取想法列表。是数据库的IdeaLocalStore存储库。IdeasRepository 目前只是在 和 之间进行选择,IdeaLocalRepository并将IdeaCloudRepository在它们上调用相应的函数。

要创建 IdeasEntity,我需要使用多个数据库模型,因此需要多次调用 IdeaLocalStore。我需要将它们结合起来。

所以问题是我应该在哪里进行这种组合/映射。我IdesRepository应该在用例中还是应该在用例中进行?

0 投票
2 回答
434 浏览

swift - From where should I present an MFMailComposeViewController in a Clean Architecture?

Could you give some advice on where to place an MFMailComposeViewController?

In a non RxSwift and non Clean Architecture project, I would implement it in some view controller, like this:

Within the Clean Architecture, where would you place the Mail Composer?

Would you present this from the Navigator/Router? It is after all a "Scene", even if we don't necessarily have a Navigator/Router and a ViewModel dedicated to the MailComposer.

There are 2 distinct places where errors might occur, and I really don't think the Navigator should handle these.

Thanks!

0 投票
3 回答
1116 浏览

ios - 在 Clean Architecture 中使用 NSFetchedResultsController

我一直在寻找答案,但运气不佳。这个问题几乎相同,但答案不是很清楚(至少对我来说!): 它是 VIPER 架构中 NSFetchedResultsController 的位置?

NSFetchedResultsController 似乎对于 iOS 应用程序来说是一种非常有用的方法,但我所看到的所有示例都将其放在 ViewController 层——至少,VC 成为了一个委托。在 Clean Architecture/Viper 中,模型层与视图层非常脱节,我无法弄清楚 NSFRC 是如何在这样的架构中使用的。上述问题的答案暗示交互者应该是一个代表,但这没有意义——托管对象随后将呈现给交互者,而不是 PONSO。也许我还不太了解它,但是(a)它是否在清洁架构中占有一席之地?(b) 如果是,那么是否需要正确的 Swift 实现模式?

0 投票
1 回答
1876 浏览

clean-architecture - 清洁架构 - 如何处理数据库事务?

在“干净架构”中,交互者(用例)负责定义业务逻辑。大多数示例以这种方式定义用例:

交互器主要使用简单的 CRUD,例如对存储库的操作或查询。为简单起见,上面的示例是同步的,但您可以使用回调或 rxjava 等异步解决方案以相同的方法找到 repos。

但是用例的不完整性呢?例如,您不能 100% 确定插入后a它仍然存在b。如果插入后a你得到一些 RepositoryException 而插入b.

到目前为止我看到的所有回购都没有考虑到它,所以我的问题是:

清洁架构中上述问题的解决方案是什么?

0 投票
1 回答
318 浏览

android - 在 Bob 大叔的架构中将表示层中的模型映射到域层中的对象

目前,作为学习 Clean Architecture 的一部分,我正在使用 Uncle Bob 的干净架构开发一个 Android 应用程序。

在其中一项活动中,我要求用户输入姓名和出生日期,我正在确定出生日期的年龄。

我的问题是在表示层,我使用名称和出生日期创建了一个用户模型类,并且在域层的用户对象类中有一个额外的年龄字段,我可以从出生日期轻松确定。现在,当我使用表示层中的映射器类将模型类(在表示中)转换为对象类(在域中)时,我应该在表示层中执行年龄计算,还是应该在域层中执行此操作?

由于我是第一次使用干净的架构,所以我想确保遵循最佳实践,以在我的应用程序开发中保持干净的架构范围完整。

如果您觉得这是一个愚蠢的问题,请原谅我。

非常感谢您的帮助和回复。

0 投票
1 回答
100 浏览

java - Clean Architecture 中具有单一依赖项的用例

当用例类只有一个依赖项并且它的执行只调用该依赖项的方法时,是否值得创建一个用例类?

0 投票
1 回答
567 浏览

android - Android 清洁架构

我用 Android Studio 创建了一个简单的 android 项目。如何创建图层?我的意思是使用 Android Studio 的数据、表示、域层。我试图了解如何在我的 Android 应用程序中使用 Clean Architecture 模式。

据我了解,要创建一个新层,我需要这样做单击项目文件夹-> 创建新模块-> 选择 Java 库。我对吗?

0 投票
1 回答
264 浏览

android - 在干净的架构中,如何进行验收测试?

在 Android 中,我使用干净的架构并将我的代码按层打包。所以我有 4 层(模块)

  • 应用程序
  • 数据
  • 设备
  • 领域

我知道,如果我错了,请纠正我,验收测试(使用 FitNesse)应该更好地取代 UI,它应该模仿 UI 并从客户的角度测试系统的核心功能。

我的问题是:

我应该为 FitNesse 固定装置和其他东西创建另一个模块,并依赖于系统中的每个模块吗?

0 投票
2 回答
4316 浏览

android - 清洁架构:为不同的数据源使用不同的模型类?

我目前正在开发一个新闻提要 android 应用程序。我尝试根据干净架构的原则设计我的应用程序。

在数据层中,我使用存储库模式作为不同数据源的外观:来自 API ( https://newsapi.org/ ) 的远程数据、来自数据库 (Realm 或 SQLite) 的本地数据以及一些在-内存缓存。
在我的领域层中,我定义了一些不可变的模型类(Article、NewsSource 等),它们正在被领域层和表示层使用(我认为表示层中不需要额外的模型类)。

对远程数据源和本地数据源使用不同的模型类是否有意义?

例如,远程数据源使用 Retrofit 进行 API 调用,模型需要被注释以便被 GSON 解析。

本地数据源的模型也可能必须履行某些特定合同,例如 Realm DB 中的模型需要扩展 RealmObject。

显然,我不希望我的域模型被任何特定于数据源的合同(注释、RealmObject 继承等)“污染”。所以我认为对不同的数据源使用不同的模型是有意义的,并且存储库会处理它们之间的映射。

例如,我们想从远程 API 中获取所有文章,将它们存储在本地数据库中,然后将它们返回给领域层。

流程就像: 远程数据源向新闻 api 发出 http 请求并检索RemoteArticleModel´s 列表。存储库会将这些模型映射到特定领域的文章模型 ( Article)。然后这些将被映射到数据库模型(例如RealmArticleModel)并插入到数据库中。最后,Article's 列表将返回给调用者。

出现了两个问题: 上面的例子显示了使用这种方法会有多少分配。对于要下载并插入数据库的每篇文章,将在该过程中创建三个模型。会不会太过分了?

另外,我知道数据层应该使用与域层不同的模型类(内层不应该与外层无关)。但是在上面的例子中这有什么意义。对于两个不同的数据源,我已经有了两个不同的模型类。添加第三个被数据层/存储库用作“中介”模型以处理到其他模型(远程、本地、域)的映射将增加更多的分配。

那么数据层是否应该对领域模型一无所知,让领域做从数据层模型到领域层模型的映射呢?

是否应该有一个仅由存储库/数据层使用的通用模型?

谢谢,我非常感谢更有经验的开发人员提供的任何帮助:)

0 投票
1 回答
1130 浏览

android - 干净的架构 rxjava firebase 实现

我正在为我的项目使用 fernando cejas 的干净的 android 样板代码并为我的项目实现 firebase 实时数据库但是,当我调试我的代码时,我看到每次调用 onDataChange() 时我的发射器都被丢弃(当我添加一个新行时到我的firebase数据库),我的用户界面没有呈现新的列表内容,这是我的数据模块代码,有什么建议吗?