【问题标题】:A model defined in a view?在视图中定义的模型?
【发布时间】:2012-12-05 16:02:12
【问题描述】:

我正在开发一个网站,该网站将在世界各地使用,并且必须在地球上的任何时间任何地方都高度负责。这就是为什么我尝试使用所有可能的技巧来最大程度地减少在必须进行小规模维护时重新编译/重新启动网站的需要。

Asp.Net MVC 中编辑视图并由框架自动动态重新编译而不中断服务的能力非常棒,完全符合我的需求。但是如果我不能以类似的方式编辑底层模型并且必须重新编译整个东西,它的兴趣就会受到极大的限制。

所以我的问题:有可能以任何方式(甚至是一种糟糕的、骇人听闻的方式)在代码块中的视图本身内部定义视图模型类?

否则,我可以探索哪些路径来实现“可热编辑”网站(我的意思是:在网站仍然存在时可以重新编译哪些部分,并立即考虑更改)?

提前非常感谢您! :-)

【问题讨论】:

  • 假设您可以在视图中定义模型。如何让控制器知道这些修改?
  • Unity(或 IoC/DI 容器)之类的东西会在这里提供帮助吗?所以你没有在视图中定义模型只是允许它动态改变......
  • 如果可能的话,您所要求的将是一场维护噩梦。
  • 当您将更新的 DLL 拖放到网站目录中时,IIS 会检测到更改并将继续无缝地为该站点提供服务(它通过影子复制程序集来实现),但有几个小警告。也可能会有短暂的延迟,因为它也做了一些工作(但不超过几秒钟)。您是否有任何特殊情况要避免?
  • @cadrell0 不是问题。只要绑定是由框架自动执行的,动态检索值并不是什么大问题。当然,控制器方法不会有静态的强类型和命名参数,我将不得不在请求中挖掘一下。

标签: c# asp.net-mvc view model


【解决方案1】:

如果您担心性能和正常运行时间,请考虑使用服务器场来托管您的网站。当您需要进行更新时,您可以单独关闭每台服务器,以便您的站点始终可用。

但是,大多数部署只需要几秒钟。您的应用程序可能需要更多或更少的时间来启动(例如,EF 视图生成可能需要 10-20 秒),但只要您在非高峰时段更新就可以了。

另外,我绝不会建议在实时服务器上更改代码。你最终会破坏一些东西。

【讨论】:

  • 您的回答非常合乎逻辑,当然让我的问题看起来很疯狂。然而,在我的组织中不能如此简单地应用它有很多务实的(你会说“不好的”)原因。你倾向的好习惯也是一个相当沉重的习惯,恐怕我负担不起。然后我应该想象一些敏捷和更灵活的方法来快速将小更新放到网上。当然,从这样的角度来看,在上传任何更改之前,我需要进行密集测试。但是,当我们在 C# 中使用动态类型时,我们已经这样做了,不是吗? :-)
  • Azure 可能更具成本效益,但我一点也不熟悉。当然,经过足够的测试和谨慎,您提出的建议可能是可行的,但仍然很危险。
【解决方案2】:

最终,我设法通过另一种策略实现了目标。 所有视图都有相同的模型,称为DataSource,它全局是一个在渲染之前打开并在渲染之后关闭的记录集(如果需要,读取由视图内的 Razor 代码执行)。

记录集的列列表可以实时更改而不会导致站点崩溃。

对于表单和验证,从数据库中获取有关底层存储过程的元数据会导致代码发射,从而动态创建 c# 类型,仅此而已。尽管每次更改 sp 都会生成一个新类型,但应用程序池回收率可以防止过多的过时类型在内存中僵尸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多