Asp.net MVC 大神们,有关 ViewModel 的问题

2017-05-28 21:44:48 +08:00
 dcalsky
我目前有一个小项目中差不多有 12 个表也就是差不多 12 个 model

每个 model 有对应的 4 … 5 个 ViewModel 来创建表单

这样算起来我要写差不多 60 个 viewmodel,这倒是没问题的。
但是要我写对应的 60 个 razor html template 我就很为难了。

有没有简单点的办法,让我只写一个模版,只用数据填充呢?求大神赐教 cms 相关的业务开发流程!

或是给个技术的名词也好!
1631 次点击
所在节点    问与答
10 条回复
dcalsky
2017-05-28 21:46:33 +08:00
是 60 个 html 表单
anyele
2017-05-28 22:45:09 +08:00
CMS 推荐 umbraco, 电商推荐 nopcommerce
anyele
2017-05-28 22:45:34 +08:00
两个都是 ASP.NET MVC 的, 以后会支持.net core
anyele
2017-05-28 22:53:09 +08:00
好像对于只写一个 html 模版就能填充所有数据并咩有好的办法, 同问解决办法
leeg810312
2017-05-29 08:25:54 +08:00
我参与的项目是这样解决的:想用模板方法做,表设计就得按照模板,而不是按业务实体设计表,因为物理实体和逻辑实体不同,对于复杂统计分析的需求还增加了额外的表
leeg810312
2017-05-29 08:30:45 +08:00
也就是 viewmodel 即模板一个,在 controller 传数据,view 自己负责填充,只做了几个模板就满足了几十个页面的需要
dcalsky
2017-05-29 11:11:51 +08:00
@leeg810312 我能不能只做一个高度抽象的 view ?有没有这种可能
leeg810312
2017-05-29 19:55:54 +08:00
这个不建议做在一个 view,现有 12 个表,每个 4-5 个 viewmodel,要改成只做在一个 view 里面,那在这个 view 处理的数据可能非常多,后期运维会很麻烦,建议根据业务逻辑适当划分成几个模板,逻辑上会比较清晰,维护也会比较方便
dcalsky
2017-05-29 20:58:51 +08:00
@leeg810312 比如,注册登陆,创建,修改,删除等等这几个大功能抽象出来是吗
leeg810312
2017-05-29 23:53:53 +08:00
注册登录不需要模板,因为只有一个。其他实体的增删改查是类似的话,可以用模板方法。将原来实体对象的字段作为元数据存到一个表,包含唯一标识、字段名、长度、数据类型等,实体数据都存到一个业务表,包含实体数据标识、元数据标识和值,根据业务需要,可能要在元数据表或业务数据表增加字段用来条件查询或分组统计,例如表单 id、时间、操作用户等。当需要操作该实体时,可以在各功能的 controller 中读取相应的元数据和业务数据,由 view 对数据在前端控制,例如数字字段只能输入数字,为 HTML 内容提供一个 HTML 编辑器等,提交数据在 controller 做统一安全校验,然后做业务校验。

模板用统一方式的操作实体,可以减少前端工作量,但缺陷有 3 个:1、物理模型和逻辑模型不一致,如果文档不完善,后期运维会有很大问题,所有业务数据是混杂在一个表里的,不知道业务逻辑根本无法筛查出所需数据。2、所有业务数据存在一个表里,在数据量达到千万或存储达到 TB 性能将遇到明显的瓶颈,若 sql 写得不好,索引优化不当,可能几十万数据就会有性能问题,预计 3-5 年到不了性能瓶颈可以忽略,3-5 年使用后一般会有较多改动需求,可以到时再调整架构重构代码。3、同类功能处理不同实体,如果业务相差很多,就得在一个 controller 写大量不同的业务逻辑,这是很糟糕的情况,所以要预先分析,一个模板只操作相似的,少量的不同可以在 controller 处理。要是你各个实体的业务差别都很大,做成模板反而是得不偿失的,不仅没有一致的实体模型,代码可维护性也不高。

模板方式有利有弊,最好评估一下是否有这样的必要。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/364492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX