V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dcalsky
V2EX  ›  问与答

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

  •  
  •   dcalsky · 2017-05-28 21:44:48 +08:00 · 1672 次点击
    这是一个创建于 2736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我目前有一个小项目中差不多有 12 个表也就是差不多 12 个 model

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

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

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

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

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

    模板方式有利有弊,最好评估一下是否有这样的必要。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:14 · PVG 02:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.