问题标签 [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.
java - 清洁架构、数据请求协调器、演示者或用例/交互器?
谁应该从 ui中编排/映射数据?例如,登录,我有username
并且password
:
1.) 我应该在我的演示者上接受LoginParam
as参数,然后从 UI,创建LoginParam
对象然后提供它吗?或者
2.) 只接受username
然后password
将presenter
创建LoginParam
要传递的use case
?或者
3.) 最后,将username
and password
from传递presenter
给usecase
然后会为 API 调用usecase
创建对象吗?LoginParam
然后在用例上:
如果是这样,那为什么?(请说明你的答案,并指出错误的解决方案会出现的问题)
从我读过的东西来看,我没有找到任何关于我的问题的具体答案。(或者也许我错过了/不明白一些事情,哈哈)
android - 如何在 gradle 中为 Clean 架构设置项目?
所以我在 android 中经历了干净的架构,真的很喜欢人们甚至为域、数据和表示层创建单独的项目。我尝试为干净的架构创建自己的项目,但无法为域、数据和表示层设置不同的项目。
我怎样才能完成这种项目架构? https://github.com/android10/Android-CleanArchitecture
android - 在哪里添加全局所需数据(通过 API 传递)?
清洁架构问题
我有许多表单activities
,其中包含 1 个必须在提交期间附加的公共数据,我的问题是,逻辑必须放在哪里?
域还是表示层?
演示文稿:
我将创建一个BaseFormActivity
具有将所需数据插入到其form
子级的方法的方法,该子级BaseForm
包含全局所需的数据。
BaseForm:(被所有形式扩展)
BaseFormPresenter:
BaseFormActivity:(由处理表单的所有活动扩展)
SpecificFormActivity:(扩展 BaseFormActivity)
对于域:
SubmitSpecificFormInteractor:(对不起编码,这只是我想做什么的表示)
我正在考虑将它放在域层上(您可以看到它非常孤立,但我必须在所有表单提交上都这样做,这是冗余),但我仍然只想让我的决定更加可靠。重构是耗时的。希望您在这里理解我的观点,特别是关于我的类似伪代码的编码。如果有难以理解的内容,请随时发表评论。谢谢你。
swift - 何时进行 API 调用
我目前正在使用 VIP 架构,我想知道何时应该进行 API 调用。
例如,我有两种观点。指向列表视图的连接视图。该列表需要用户连接才能加载。
我的问题是,我应该在哪里进行 API 调用以获取第二个视图的数据?
- 我是否应该在连接成功后立即发出请求,然后在获得此请求的数据后启动第二个视图。
或者
- 我应该先启动第二个视图,然后再请求这个视图吗?
第一个解决方案似乎稍微快一些,但第二个解决方案感觉更干净。你怎么看 ?
c# - 使用 C# 的清洁架构:在值对象中执行验证的更好设计
我正在创建一个应用程序,其架构基于鲍勃叔叔的清洁架构概念和DDD。请注意,它基于DDD,所以我给了自己与严格 DDD 不同的自由。
为了创建这个应用程序,我使用 C# 和 .Net Standard 2.0
DDD 的原则之一与值对象有关。根据Wikipedia ,值对象的定义如下:
值对象
包含属性但没有概念标识的对象。它们应该被视为不可变的。
示例:人们在交换名片时,一般不会区分每张唯一的名片;他们只关心印在卡片上的信息。在这种情况下,名片是价值对象
现在,如果某些验证不成功,我希望我的值对象不允许创建它们。当它发生时,实例化过程中会抛出异常。我真的打算在那里抛出一个异常,因为架构的核心确实不希望任何无效数据到达那个点。
在进一步讨论这个问题之前,为了给你们更多的背景知识,这是我的架构(注意:仍然不完整):
我在这个架构中遵循的规则是:
- 一个层只能知道其最内层邻居层的接口
- 一个层不能知道任何最外层的任何信息
- 层之间的所有通信都必须通过接口完成
- 每一层都必须是可独立部署的
- 每一层都必须是可独立开发的
为了更好地理解此图中的箭头,我建议阅读 Stack Exchanges 的问题:
https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition
现在,我现在面临的挑战是找到一种使用验证器的好方法。在这一点上,我对我的架构并不满意。问题如下:
由于我可以在给定时间实例化数千个值对象,因此我不希望值对象的每个实例都有一个实例方法来执行验证。我希望验证方法是静态的,因为每个实例的逻辑都是相同的。此外,我希望架构的上层可以使用验证逻辑来执行验证,而无需尝试实例化值对象,从而导致抛出昂贵的异常。
问题是:C# DOES NOT ALLOW polymorphism with static methods,所以我不能做类似的事情:
如何在不依赖静态方法多态性的情况下实现此功能,同时又不浪费内存?
unit-testing - 测试在 Clean 架构中做不止一件事的交互器方法
我一直在阅读有关单元测试和清洁架构的内容,并尝试实现涉及这两件事的东西。
据我了解,Clean 架构的结构是为了对 Interactor 对象的方法进行单元测试。
但是当用例类似于“创建一个文件,其内容是从某种格式的某些数据中计算出来的”时,我会感到困惑,因为它不是单一的(文件内容的计算和文件的创建,两者都是在用例中)
这是一些说明我的情况的伪代码:
我的问题如下:
- Interactor 中定义的方法必须是单一的吗?(如,只做一件事)
- 必须对 Interactor 中定义的方法进行单元测试吗?(我看到一个函数,无论是否单一,作为可测试单元,如果不正确,请纠正我)
- 哪个类必须在 Clean 架构中进行 fileContent 的计算?
android - 使用 DisposableObserver 测试 Presenter
我正在开发一个 Android 应用程序,试图遵循 Clean Architecture / MVP 指南。
我目前正在为我的演示者编写单元测试,但我坚持调用以 DisposableObserver 作为参数的 Interactor/UseCase。
我想测试的是,当交互器调用 OnNext 或 OnError 例如(隐藏/显示加载指示器...)时,会调用正确的行为。
我不知道如何在我的用例中“模拟” Observable 的行为,因为它是在调用 execute() 方法时使用受保护的方法构建的。
以下是部分代码:
主持人
交互者/用例
基本用例
android - 使用 Room 时如何解耦模型
作为序言,我对 Android 开发还很陌生,目前我正在尝试通过构建应用程序来学习,同时遵循 Clean Architecture。
我目前有一个名为“Card”的模型和用于存储所有“Card”数据的 Room 库。但是,我发现在我的应用程序中实现 Room 库的唯一方法是将“卡”模型指定为我的实体,该实体位于我的应用程序的域层中。据我了解,这违反了层的解耦,因为域层应该独立于框架。
我尝试将模型子类化为装饰器,但无法让注释在子类上工作。有没有更好的方法,这是我应该关注的吗?
另外我不确定您需要多少信息来回答我的问题,但如果您需要更多信息,请告诉我!谢谢!
architecture - 难以理解干净的架构
我对干净架构的架构概念比较陌生。不幸的是,我有一些理解问题:
我理解这个概念,你应该遵循规则,没有内层可以知道外层的任何信息,你只能通过边界接口调用外层。
现在让我们做一个简单的思想实验,其中用户输入持久存储的数据:您有一个 UI(Webform、Console 等)并且用户输入数据。在一个事件(例如提交)之后,控制器调用一个用例(比如“PersistentStoreData”),我们向下工作到实体级别。我有点理解这一点。但是假设我们要将数据存储到数据库中。解耦规则说,内层的任何实体、用例或任何东西都不能知道外层的任何信息。只能通过接口进行调用。但是有一次必须有一个实例化的对象,它具有处理数据库请求的业务逻辑,并且您肯定不能实例化接口。哪个组件实例化了这个“数据库对象”?由于依赖规则,不是内层。唯一的其他组件是 UI,但这对我来说毫无意义。为什么 UI 应该知道有关数据库的任何信息?
也许是一个愚蠢的问题,但我无法理解这个问题。