代码之家  ›  专栏  ›  技术社区  ›  Vlad

设置默认值-表示逻辑还是业务逻辑?

  •  7
  • Vlad  · 技术社区  · 16 年前

    我想知道为selectlist设置默认值是否被认为是表示逻辑或业务逻辑?例如,如果一个要求是没有位置不能保存员工,但是99%的时间将被选择的位置是一个特定的项目,比如亚特兰大。因此,当显示新员工的输入屏幕时,位置选择列表应默认为Atlanta。我应该默认模型中的位置还是视图模型中的位置?我意识到一件事是单元测试变得很尴尬,因为在这两种情况下,我都会被迫对一个将一直存在于生产中的位置进行测试,但是我不能用自己的测试数据创建单元测试,除非“Atlanta”在测试中使用的一组位置中。如果你对此也有想法的话,我会很高兴的。

    4 回复  |  直到 16 年前
        1
  •  4
  •   AllenG    16 年前

    正如许多这样的问题(主观的)的答案是:“这取决于。”

    如果“默认值”是业务默认值(例如,业务位置的默认位置,或订单上的默认单位数等),则可能是业务层。这似乎对你在这里的具体情况是正确的。

    但是,如果列表的“默认值”仅仅是因为您需要一些值作为默认值,而您只需要选择索引0,或者只需要根据用户的位置或系统设置进行选择,那么我认为这将是表示层问题。

        2
  •  3
  •   John Feminella    16 年前

    因此,当显示新员工的输入屏幕时,位置选择列表应默认为位置5。我应该默认模型中的位置还是视图模型中的位置?

    在您的示例中,这是业务逻辑,但这不会阻止您在本例中也吃蛋糕。模型可以指定一个默认值;然后视图用这个默认值初始化自己。

    一般来说,什么东西是“业务逻辑”还是“表示逻辑”取决于它是否涉及到域。例如,将日期下拉列表中的最早年份设置为1900,可能是一个表示问题。但如果系统不接受1900年以前的日期,这也可能成为一个商业问题。

    我意识到一件事是单元测试变得很尴尬,因为在这两种情况下,我都会被迫对一个将一直存在于生产中的位置进行测试,但是我不能用自己的测试数据创建单元测试,除非“Atlanta”在测试中使用的一组位置中。如果你对此也有想法的话,我会很高兴的。

    使用上面提到的策略,单元测试很容易。只需验证:

    • 模型提供了一个默认值
    • 视图接受此默认值
    • 视图将自身初始化为该默认值
    • 无论模型是否提供该值,视图都具有适当的行为。
        3
  •  0
  •   ChrisF    16 年前

    我本以为默认值是业务逻辑。

    例如,如果公司重新定位,则默认位置不再是“Altanta”或“London”,而是“New York”或“Nottingham”。

        4
  •  0
  •   Mayo    16 年前

    如果您真的关心保留业务规则和表示层的边界,那么您可以 提供 通过业务逻辑和表示层的默认值可以使用该默认值初始化控件。