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

Asp.net 设置默认值--表示逻辑还是业务逻辑?,asp.net,asp.net-mvc,mvp,Asp.net,Asp.net Mvc,Mvp,我想知道为SelectList设置默认值是表示逻辑还是业务逻辑?例如,如果一项要求是员工在没有位置的情况下无法被保存,但99%的时间会选择一个特定的位置——比如亚特兰大。因此,当显示新员工的输入屏幕时,location SelectList应默认为Atlanta。我应该在模型或视图模型中设置默认位置吗?我意识到的一件事是,单元测试变得很尴尬,因为在这两种情况下,我都会被迫针对生产中始终存在的位置进行测试,但我无法使用自己的测试数据创建单元测试,除非“Atlanta”在测试中使用的位置集中。如果您

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

我会认为默认值是业务逻辑

例如,如果公司搬迁,默认位置不再是“Altanta”或“London”,而是“New York”或“Nottingham”

因此,当显示新员工的输入屏幕时,location SelectList应默认为location 5。我应该在模型或视图模型中设置默认位置吗

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

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

我意识到的一件事是,单元测试变得很尴尬,因为在这两种情况下,我都会被迫针对生产中始终存在的位置进行测试,但我无法使用自己的测试数据创建单元测试,除非“Atlanta”在测试中使用的位置集中。如果你对此有任何想法,我将不胜感激

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

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

与许多此类问题(主观)一样,答案是:“视情况而定。”

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


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

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

如果默认值在我的员工模型中,我不必为默认位置硬编码名称吗。e、 g.私人地点;公共位置位置{get{if(Location==null)Location=new Location(1,“Atlanta”,…)返回位置;}set{Location=value;}这可以接受吗?我可以使用注册表模式来帮助协调我正在硬编码默认值这一事实。但在这种情况下,位置不是引用数据,因为用户可以添加新的位置。