首页 > 解决方案 > 我在哪里处理 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 行为不是域关注的问题,那么我在哪里实现这个逻辑?

标签: androidformsarchitecturemvpclean-architecture

解决方案


在 Clean Architecture 中,所有特定于应用程序的逻辑都转到用例交互器。这还包括根据业务规则验证输入数据。

话虽如此,您仍然可以向 UI 添加(!)简单的健全性和一致性检查,以获得更好的用户体验,但这些不能替代用例层中的业务规则验证。


推荐阅读