设置默认值——展示逻辑还是业务逻辑?

7
我想知道为SelectList设置默认值是属于表现逻辑还是业务逻辑?例如,如果要求员工必须选择一个位置才能保存,但99%的情况下会选择一个特定的位置——比如亚特兰大。因此,在显示新员工录入界面时,位置SelectList应默认为亚特兰大。我应该在模型或视图模型中设置默认位置?有一件事我意识到了,那就是单元测试变得很麻烦,因为在两种情况下,我都必须针对在生产中始终存在的位置进行测试,但除非“亚特兰大”在测试中使用的位置集合中,否则无法使用自己的测试数据创建单元测试。如果您对此有任何想法,我将不胜感激。
4个回答

4
与许多主观问题一样,答案是:“这取决于情况。”
如果“默认值”是业务默认值(例如商业位置的默认位置或订单上的默认单位数等),那么它可能属于业务层。在您特定的情况下,这似乎是正确的选择。
然而,如果您列表中的“默认值”仅仅是因为您需要某个值作为默认值,并且您将选择索引0,或者根据用户的位置或系统设置进行选择,我认为这些应该是表示层问题。

如果默认值在我的员工模型中,那么我不是必须要为默认位置硬编码一个名称吗?例如: private Location location; public Location Location { get { if (location == null) location = new Location(1, "亚特兰大", ...) return location; } set { location = value; }} 这样做可以吗? - SideFX
我可以使用注册表模式来帮助调和我正在硬编码的默认值。但在这种情况下,位置不是参考数据,因为用户可以添加新位置。 - SideFX

3
由于这个原因,在显示新员工的输入屏幕时,位置选择列表应该默认为Location5。我应该在模型中还是视图模型中设置默认位置?
在您的示例中,这是业务逻辑,但这不会阻止您在此情况下同时拥有自己的优势。模型可以指定默认值;视图随后使用此默认值进行初始化。
一般来说,某些东西是否是“业务逻辑”或“演示逻辑”取决于它是否涉及领域。例如,将日期下拉列表中最早的年份设置为1900年可能是演示问题。但如果系统没有设计为接受早于1900年的日期,则它也可能是业务问题。
我意识到的一件事是,单元测试变得尴尬了,因为在这两种情况下,我都必须针对一个始终存在于生产中的位置进行测试,但除非“Atlanta”在测试中使用的位置集中,否则我无法使用自己的测试数据创建单元测试。如果您对此有任何想法,我将不胜感激。
使用上述策略,单元测试很容易。只需验证:
- 模型提供默认值 - 视图接受此默认值 - 视图以此默认值初始化 - 视图在模型提供或不提供该值时具有适当的行为

0

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

例如,如果公司搬迁,那么默认位置不再是“亚特兰大”或“伦敦”,而是“纽约”或“诺丁汉”。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接