5

我目前正在使用 ASP.NT MVC RC1 来实现一个基本的时间表应用程序。我想遵循 DRY 原则,但在一种特殊情况下很难做到:

我的一个观点,实际上是部分观点,有许多文本框,代表在特定任务上花费的小时数,一周中每天一个文本框。当我最初加载页面时,我希望视图中有一个文本框来显示所有这些小时的总数。此外,我希望在更改文本框中的值时更新该总数。对文本框的更新不会导致完整的回发,只会导致对结果不做任何事情的 AJAX 回发(回发会更新 DB 上的值,但返回的 ActionResult 是 EmptyResult,因为我不需要在用户界面)。

目前,我让控制器创建一个视图,该视图填充了该视图的“总计”,因此添加所有值的逻辑位于 C# 控制器中。在 UI 方面,我有更新 UI 级别总数的 javascript。但这不好,因为如果我改变计算总数的逻辑,我必须在两个地方改变它!啊!不干燥!

那么,我该怎么做呢?到目前为止,我唯一的答案是废弃计算 UI 上总数的 javascript 代码,而是让 AJAX 回发返回该视图的新“总数”。

还有其他方法吗?

4

3 回答 3

3

您可以尝试Nikhil Kothari 的 Script# 项目。它是一个交叉编译器,可将 C# 编译并转换为独立于浏览器的 javascript,让您共享逻辑。它被微软内部的许多团体正是为了这个目的而使用的。

更多,来自网站:

Script# 为 Ajax 和 JavaScript 开发带来了生产力。Script# 是一个免费工具,使开发人员能够编写 C# 源代码,然后将其编译为适用于所有现代浏览器的常规脚本,并在此过程中利用现有 .NET 工具以及 Visual Studio IDE 的生产力和功能. Script# 为您提供了一种开发方法和方法,为您的 Ajax 应用程序、组件和框架带来了软件工程、长期可维护性和可扩展的开发方法。

Script# 被 Microsoft 内部的开发人员广泛使用,以在 Windows Live、Office 中构建 Ajax 体验(仅举几例),以及包括 Facebook 在内的外部开发人员和公司。如果您正在构建基于 Ajax 的 RIA 应用程序,那么您应该立即尝试 Script#,看看它是否有助于改进您自己的 Ajax 开发!

于 2009-02-25T19:56:29.670 回答
1

在最严格的意义上,在 C# 和 Javascript 中计算总时间的逻辑并不是 DRY,这是真的。人们可能会因为它们是在两个不同环境中运行的两种不同语言这一事实​​而分心,但归根结底,如果您更改其中一种,则必须同时更改两者。

我认为这是形式和功能之间的权衡。拥有 javascript 有多重要?如果 AJAX 调用太慢(一种真正的可能性),那么这可能是时候意识到 DRY 原则是指导原则,而不是法律。

于 2009-02-25T17:01:57.937 回答
0

如果您希望代码在服务器和客户端上都执行,您可以使用/编写表达式树到 JavaScript 编译器。

在服务器端,您评估表达式并将翻译成 JavaScript 的相同表达式发送到客户端。

于 2009-02-25T16:59:30.767 回答