我想知道为SelectList设置默认值是否被视为表示逻辑或业务逻辑?例如,如果要求是在没有位置的情况下无法保存员工,但99%的时间选择的位置是特定项目 - 比如亚特兰大。因此,当显示新员工的输入屏幕时,应将位置SelectList默认为亚特兰大。我应该默认模型中还是视图模型中的位置?我意识到的一件事是单元测试变得笨拙,因为在这两种情况下,我都被迫测试一个始终存在于生产中的位置,但我无法使用自己的测试数据创建单元测试,除非“亚特兰大”是在测试中使用的一组位置中。如果你对此有任何想法,我会很高兴。
答案 0 :(得分:4)
与许多此类问题(主观)一样,答案是:“这取决于。”
如果“默认值”是业务默认值(例如,业务位置的默认位置,或订单或某些单位的默认单位数),则可能是业务层。这似乎对您的具体情况是正确的。
但是,如果列表的“默认值”仅仅是因为您需要某个值作为默认值,而您只是选择索引0,或者只是根据用户的位置或系统设置进行选择,我认为那些是表达层问题。
答案 1 :(得分:3)
因此,当显示新员工的输入屏幕时,应将位置SelectList默认为Location5。我是否应该默认模型中或视图模型中的位置?
这是你的例子中的商业逻辑,但这不会阻止你在这种情况下吃蛋糕和吃它。模型可以指定默认值;然后视图使用此默认值初始化自己。
通常,某些东西是“业务逻辑”还是“表示逻辑”取决于它是否涉及域。例如,将最早的年份设置为日期下拉到1900可能是一个表示问题。但如果系统不能接受早于1900年的日期,它也可能是一个商业问题。
我意识到的一件事是单元测试变得笨拙,因为在这两种情况下,我都会被迫测试一个始终存在于生产中的位置,但是我无法使用自己的测试数据创建单元测试,除非“亚特兰大“位于测试中使用的一组位置。如果你对此有任何想法,我会很高兴。
根据我上面提到的策略,单元测试很容易。只需验证:
答案 2 :(得分:0)
我原以为默认值是业务逻辑。
例如,如果公司重新定位默认位置不再是“Altanta”或“London”,而是“New York”或“Nottingham”。
答案 3 :(得分:0)
如果您真的担心保留业务规则和表示层的边界,您可以通过业务逻辑提供默认值,并且您的表示层可以使用该默认值来初始化控件。