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

时间:2010-06-18 18:43:28

标签: asp.net asp.net-mvc mvp

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

4 个答案:

答案 0 :(得分:4)

与许多此类问题(主观)一样,答案是:“这取决于。”

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

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

答案 1 :(得分:3)

  

因此,当显示新员工的输入屏幕时,应将位置SelectList默认为Location5。我是否应该默认模型中或视图模型中的位置?

这是你的例子中的商业逻辑,但这不会阻止你在这种情况下吃蛋糕和吃它。模型可以指定默认值;然后视图使用此默认值初始化自己。

通常,某些东西是“业务逻辑”还是“表示逻辑”取决于它是否涉及域。例如,将最早的年份设置为日期下拉到1900可能是一个表示问题。但如果系统不能接受早于1900年的日期,它也可能是一个商业问题。

  

我意识到的一件事是单元测试变得笨拙,因为在这两种情况下,我都会被迫测试一个始终存在于生产中的位置,但是我无法使用自己的测试数据创建单元测试,除非“亚特兰大“位于测试中使用的一组位置。如果你对此有任何想法,我会很高兴。

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

  • 模型提供默认值
  • 视图接受此默认值
  • 视图将自身初始化为此默认值
  • 视图是否具有相应的行为,无论模型是否提供该值

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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