2010-06-18 76 views
7

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

回答

4

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

如果“默认值”是一个商业默认值(比方说,一个企业位置的默认位置,或组的订单,或诸如此类的默认号码),这可能是业务层。这对你在这里的具体情况似乎是正确的。但是,如果列表的“默认值”仅仅是因为您需要一些值作为默认值,而您只是选择索引0,或者只是根据用户的位置或系统进行选择设置,我想这些会是表现层问题。

+0

如果默认值在我的员工模型中,那么我是不是必须硬编码默认位置的名称。 例如 私人位置的位置; 公共地点{ 得到 { 如果(位置== NULL) 位置=新的位置(1, “亚特兰大”,...) 回报位置; } set {location = value; } 这是可以接受的吗? – SideFX 2010-06-18 19:23:48

+0

我可以使用注册表模式来协调我对硬编码默认值的事实。但在这种情况下的位置不是参考数据,因为用户可以添加新的数据。 – SideFX 2010-06-18 19:25:43

0

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

例如,如果公司搬迁的默认位置不再是“Altanta”或“伦敦”,但“纽约”或“诺丁汉”。

3

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

这是您的示例中的业务逻辑,但这并不会阻止您在此情况下拥有您的蛋糕并进食它。该模型可以指定一个默认值;视图然后用这个默认值初始化它自己。

一般来说,东西是否是“商业逻辑”或“表示逻辑”取决于它是否涉及域或没有。例如,将日期下拉的最早的一年设置为1900年,可能是一个关于演示的问题。但它也可能是一个企业的关注,如果系统没有设计更早接受日期比1900年

一两件事,我意识到的是,单元测试变得尴尬,因为在这两种情况下,我会强迫测试将始终存在于生产中的位置,但我不能用我自己的测试数据创建单元测试,除非在测试中使用的位置集合中包含“亚特兰大”。如果您对此有任何想法,我会非常感激。

随着我上面提到的策略,单元测试是容易的。简单地验证:

  • 模型提供一个默认值
  • 认为接受此默认值
  • 视图初始化自己这个默认值
  • 视图有相应的行为是否属于模型耗材价值
0

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