繁体   English   中英

对于模型是必需的,但最初为View - MVVM的空字段

[英]Required for model but initially empty field for View - MVVM

请在这件事上给予我帮助:

我有Enum类型属性的模型。 此属性是必需的,但在View初始值必须为空。 会显示水印..

如果我理解正确,那么模型将不具有可空的属性。 但是viewModel将具有可空性。 这是对的吗?

在这种情况下看起来像:

  • 需要创建viewModel
  • viewModel和model有时会有不同的数据
  • viewModel需要设置逻辑并从模型中获取正确的值或在第一次获取null并保留为模型
  • viewModel还需要一个验证规则

其他方式是:

Model将具有可空属性并需要验证:

  • 可以绑定到模型
  • 模型不“对应现实”
  • 我们需要始终从可空的枚举中公开数据并忘记null吗? 或处理它(转换为DTO或类似的东西)
  • 可空属性只是UI要求,将来可以更改

让(域)模型使用不可为空的枚举表明该值必须具有用例和/或数据完整性的有效值。

在UI上要求允许无效值(初始或其他)将导致以下两件事之一:

当View发布一个空值(通过一个专用的ViewModel)并执行检查以确保它不为null(我假设用户从选择框中选择“Please Select”值)服务器将响应一条错误消息说某事比如“请选择一个有效的值等等等等”。 或者,服务器将允许来自视图模型的空值,并将域模型属性默认为某个预定的合理值。

根据我的经验,这种设置会导致令人沮丧的用户体验,因为让UI呈现无效的选择选项,仅在提交时进行反馈(或使用一些前端/客户端验证)是相当烦人的(特别是在长形式,等等)。

也许您最好重新考虑该要求,以便UI仅为选择提供有效的枚举值,并可选择使默认值成为合理的值。

话虽如此,如果你真的希望UI没有有效的初始值,那么使用可以为空的版本创建一个视图模型,并按照你的建议在服务器上进行验证。 至于用可空的方式改变(域)模型,你已经开始担心它不会“对应于现实”这是一个很好的冲动,考虑到你已经提到过这是一个只有UI的要求,因此将细节置于其中分层并保持您的域模态尽可能接近现实,以满足您的用例和/或业务需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM