我目前正在使用ASP.NT MVC RC1来实现基本的时间表应用程序。我想遵循DRY原则,但在一个特定情况下发现它很难:
我的一个观点,实际上是部分视图,有许多文本框,表示在特定任务上花费的小时数,一周中每天一个文本框。当我最初加载页面时,我希望视图中的文本框显示所有这些小时的总和。另外,我希望在更改文本框中的值时更新总计。文本框的更新不会导致完整的回发,只有一个AJAX回发不对结果做任何事情(回发更新数据库上的值,但返回ActionResult是一个EmptyResult,因为我没有什么需要更新的UI)。
目前我让控制器创建一个用该视图的“total”填充的视图,因此添加所有值的逻辑位于C#控制器中。在UI方面,我有javascript更新UI级别的总数。但这并不好,因为如果我改变计算总数的逻辑,我必须在两个地方改变它! AHH!不要干!
那么,我该怎么做呢?到目前为止,唯一的答案是废弃在UI上计算总数的javascript代码,而是让AJAX回发返回该视图的新“总计”。
还有其他方法吗?
答案 0 :(得分:3)
您可以尝试Nikhil Kothari's Script# project。它是一个交叉编译器,可以编译和转换从C#到浏览器独立的javascript,它允许您共享逻辑。它正在微软内部的许多团体用于这个目的。
更多,来自网站:
脚本#为Ajax和JavaScript开发带来了生产力。 Script#是一个免费工具,使开发人员可以编写C#源代码 代码,然后将其编译成可以使用的常规脚本 所有现代浏览器,并在这样做,利用生产力和 现有.NET工具以及Visual Studio IDE的强大功能。脚本# 为您提供开发方法和方法 软件工程,长期可维护性和可扩展性 您的Ajax应用程序,组件和的开发方法 框架。
脚本#被Microsoft building中的开发人员广泛使用 Windows Live中的Ajax体验,Office仅举几例,如 以及包括Facebook在内的外部开发商和公司。如果 你正在构建基于Ajax的RIA应用程序,你应该自己去做 今天尝试脚本#,看看它是否可以帮助改进你自己的Ajax 发展!
答案 1 :(得分:1)
在C#和Javascript中总结时间的逻辑在严格意义上并不是DRY,这是事实。人们可能会因为它们是在两个不同的环境中运行的两种不同语言这一事实而分道扬,,但在一天结束时,如果你改变一种,你必须改变这两种语言。
我认为这是形式和功能之间的权衡。拥有javascript有多重要?如果AJAX调用太慢(真实可能),那么可能是时候认识到DRY原则是一个指导原则,而不是法律。
答案 2 :(得分:0)
如果您希望代码在服务器和客户端上执行,则可以使用/编写表达式树到JavaScript编译器。
在服务器端,您评估表达式并将转换为JavaScript的相同表达式发送给客户端。