android - 我在哪里处理 Clean Architecture 中的 UI 规则?
问题描述
我正在编写一个 Android 应用程序,用户可以在其中创建和查看事件。我无法将 Clean Architecture 的原则应用于我的创建事件表单的 UI 行为。每个事件都有一个开始日期、一个结束日期和一个描述,我在我的域中有以下表示:
data class Event(
val startDate: LocalDate,
val endDate: LocalDate,
val description: String
)
我希望我的表单 UI 有一些规则,其中之一是:如果用户选择的开始日期晚于当前选择的结束日期,则将所选结束日期设置为等于新的开始日期。
我的日期是使用 Android 日期选择器选择的,这些选择器输出所选的年、月和日,并且我的日期在 TextViews 中显示为文本。
fun startDateSelected(year: Int, month: Int, dayOfMonth: Int) { ... }
interface IView {
fun renderStartDate(date: String)
}
我的困惑
一方面,一个 UI 输入影响另一个 UI 输入对我来说听起来像是一个控制器问题,因为用户尚未提交表单。另一方面,无论我使用什么组件来实现它,日期选择器的行为都存在,所以我不想被迫使用类似于 UI 的年、月和日约定来执行该操作当我的域LocalDate
对象更易于使用并且不关心适合 UI 的格式时的逻辑。
如果适配器层(控制器、演示者)保留用于在细节之间转换数据,并且如果 UI 行为不是域关注的问题,那么我在哪里实现这个逻辑?
解决方案
在 Clean Architecture 中,所有特定于应用程序的逻辑都转到用例交互器。这还包括根据业务规则验证输入数据。
话虽如此,您仍然可以向 UI 添加(!)简单的健全性和一致性检查,以获得更好的用户体验,但这些不能替代用例层中的业务规则验证。
推荐阅读
- selenium - 如何找到以下 HTML 的元素?
- java - Java 8 流字符串操作和比较
- java - Spring cloud gateway 2.5 with eureka return 404
- react-native - expo 应用程序在网络上异常冻结,没有错误消息
- reactjs - 如何使用 VSC 在现有的 react 项目上安装 react 但安装了新的操作系统?
- scala - apache/spark/scala - 如何在流式传输时为每个上传的文件编写具有当前时间戳的文件?
- python - 如果连接“with”和“cur”在另一个不同的py文件中,如何调用cursor.execute?
- python - 使用分类器列过滤熊猫中的数据框
- angular - Angular 8 中的 ngx-useful-swiper 设置会出错
- python - 3D 卷积神经网络中的输入输出形状