java - MVP Clean Architecture - 计算和非数据相关任务属于哪里?
问题描述
我一直在做大量的研究并尝试在我的应用程序中使用带有 Clean Architecture 的 MVP,但我仍然有很多困惑并且不完全理解它。我最大的疑问是:非数据库相关的,比如复杂的数学计算,逻辑应该去哪里?我在互联网上找到的每个示例应用程序都必须简单地从数据库中保存和检索一些数据。
例如,我有一个屏幕,用户需要在其中插入 4 个值,然后我有代码来获取这些值,执行一些计算并返回代表要显示的数据的对象。
我现在的问题是:我应该将负责在具有干净架构项目的 MVP 中产生结果的类或代码放置在哪里,具有以下结构:
view <--> presenter <--> use cases <--> repositories
View 将输入发送给演示者,但是呢?还有许多示例使用不同的“服务”类,其中一些连接到演示者,另一些连接到存储库。
解决方案
用例是模型的一部分。在模型中有数据(定义数据如何存储在内存中的 pojo)和用例。您的所有业务逻辑,因为这种复杂的数学计算必须在一个或多个用例中。
视图将获取数据并将其传递给演示者,演示者应该创建一个线程(以异步运行代码的多种方式之一,我喜欢为此使用 threadpoolexecutors)来运行将进行数学运算并回答演示者的用例. 最后,presenter 会将数据发送回视图。
除非您必须检索任何数据(来自传感器、文件、数据库、url 响应......)或永久存储它,否则我认为在这种情况下您不需要存储库。
推荐阅读
- java - 在非模拟方法中模拟方法
- ios - URLSession 在 WfI 上是否安全?
- php - Symfony 3 在根目录下提供静态 html 文件
- python-3.x - 用`statsmodels`绘制掩码值的残差
- android - 为 RecyclerView 项目添加延迟
- preact - 如何通过cdn在preact中使用jsx?
- oracle - Oracle 外键约束 - 检查约束语法?
- asp.net-mvc - MVC Jquery 数据表不工作
- angular - 在 zone.js 中随机获取超过最大调用堆栈大小
- python - 为什么使用类方法而不是只使用类名作为实例?