表示层逻辑和服务/实体

本文关键字:实体 服务 逻辑和 表示层 | 更新日期: 2023-09-27 18:28:14

我有一个.net网络表单'NewShift.ascx'文件。它为您提供了一个界面,可以添加有关您将要工作(或刚刚工作)的新轮班的信息。所以,比如你工作了多少小时,你的轮班经理等等。在我的代码中,我想将日期创建标签的文本更改为当前日期(DateTime.Now),如果并且仅当它在今天下午5点之前,否则明天就读取日期(因为我不想深入讨论的原因)。

此外,我可能想根据用户以某种方式格式化日期(例如,如果他们根据数据库中保存的设置,而不是他们浏览网站的当前国家/地区,与一种文化/另一种文化相关联)。

你可能会争论,因为这是一个非常简单的逻辑,我可以把它写在后面的代码中,但假设我有很多简单的事情在进行(更改值、格式化日期、基于逻辑显示值等)。

我的理解是,如果我在后面的代码中完成了所有这些,这将是智能UI反模式。上述逻辑应该在哪里?

我听说没有贫血的领域模型,并确保我的实体能够提供回答特定领域问题的功能(?)。我也听说过尽可能多地利用服务层。

因此,如果我必须执行以下操作:

  1. 根据X和Y将标签的文本更改为今天或明天
  2. 将两个值相加,并根据用户偏好为该总和指定标签文本
  3. 根据星期几有条件地隐藏复选框

这样的逻辑应该在哪里?在Shift对象上?或者某种_shiftService?

谢谢!

表示层逻辑和服务/实体

  1. 根据X和Y将标签的文本更改为今天或明天
  2. 根据星期几有条件地隐藏复选框

这两者显然都是演示方面的问题。这意味着UI控件(ascx文件)应该做出这些决定。如果有意义,您可以添加一个转换器,请参阅IValueConverter接口了解更多详细信息。它是为Windows窗体构建的,但您可以将类似的内容应用于web。特别是在使用web表单时,我发现这大大清除了标记。


  1. 将两个值相加,并根据用户偏好为该总和指定标签文本

这将真正取决于这两个值是什么。如果这些值在您的模型上,并且您只需要显示它们的总和,并且该总和只对演示文稿有意义,而对业务流程没有意义,那么这将是一个演示问题,您可以在标记中使用转换器,或者,如果您使用MVVM,您可以将该摘要放在视图模型中的一个新名称的属性下。

如果这两个值的总和是某个业务流程的一部分,那么该代码应该在您的域中,并且应该返回已经有总和的模型。