【问题标题】:Presentation Layer Logic and Services / Entities表示层逻辑和服务/实体
【发布时间】:2014-10-29 15:34:18
【问题描述】:

我有一个 .net webform 'NewShift.ascx' 文件。它为您提供了一个界面来添加有关您将要工作(或刚刚工作)的新班次的信息。所以像你工作了多少小时,你的轮班经理等等。在我后面的代码中,我想将创建日期标签的文本更改为当前日期(DateTime.Now),当且仅当它在今天下午 5 点之前,否则把日期写在明天(原因我就不说了)。

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

您可能会争论,因为它的逻辑如此简单,我可以将其写在后面的代码中,但假设我有很多这些简单的小事情(更改值、格式化日期、基于逻辑显示值、等)。

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

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

所以如果我必须执行以下操作:

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

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

谢谢!

【问题讨论】:

    标签: c# design-patterns architecture domain-driven-design


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

    这两个显然都是演示问题。这意味着 UI 控件(ascx 文件)应该做出这些决定。如果有意义,您可以添加转换器,请参阅IValueConverter Interface 了解更多详细信息。它是为 Windows 窗体构建的,但您可以为 Web 调整类似的东西。尤其是使用网络表单,我发现这大大清除了标记。


    1. 将两个值相加并根据用户偏好为该总和分配一个标签文本

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

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

    【讨论】:

    • 谢谢 - 现在如果它是一段普通的代码,我会重复使用 5 或 6 次怎么办?
    猜你喜欢
    • 2012-03-08
    • 2012-03-14
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2011-07-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多