5

現在、ASP.NT MVC RC1を使用して、基本的なタイムシートアプリケーションを実装しています。DRYの原則に従いたいのですが、ある特定のケースでは難しいと感じています。

私のビューの1つ、実際には部分ビューには、特定のタスクに費やされた時間数を表す多数のテキストボックスがあり、曜日ごとに1つのテキストボックスがあります。最初にページをロードするときに、ビュー内のテキストボックスにそれらすべての時間の合計を表示する必要があります。さらに、テキストボックスの値を変更するときに、その合計を更新したいと思います。テキストボックスを更新しても完全なポストバックは発生せず、結果に対して何も行わないAJAXポストバックのみが発生します(ポストバックはDBの値を更新しますが、アクション結果はEmptyResultであるため、更新する必要はありません。 UI)。

現在、コントローラーにそのビューの「合計」が入力されたビューを作成させているため、すべての値を追加するロジックはC#コントローラーにあります。UI側では、UIレベルで合計を更新するJavaScriptがあります。しかし、これは良くありません。なぜなら、その合計の計算方法の背後にあるロジックを変更すると、2か所で変更する必要があるからです。AHH!乾かないで!

だから、どうすればこれを行うことができますか?これまでのところ、私が思いついた唯一の答えは、UIで合計を計算するjavascriptコードを破棄し、代わりにAJAXポストバックにそのビューの新しい「合計」を返すようにすることです。

他のアプローチはありますか?

4

3 に答える 3

3

Nikhil Kothari の Script# projectを試すことができます。これは、C# からブラウザに依存しない JavaScript にコンパイルおよび変換するクロス コンパイラであり、ロジックを共有できます。まさにその目的のために、Microsoft 内の多くのグループによって使用されています。

さらに、ウェブサイトから:

Script# は、Ajax と JavaScript の開発に生産性をもたらします。Script# は、開発者が C# ソース コードを作成し、その後、最新のすべてのブラウザーで動作する通常のスクリプトにコンパイルできるようにする無料のツールです。そうすることで、既存の .NET ツールと Visual Studio IDE の生産性と能力を活用できます。 . Script# は、Ajax アプリケーション、コンポーネント、およびフレームワークにソフトウェア エンジニアリング、長期的な保守性、およびスケーラブルな開発アプローチをもたらす開発方法論とアプローチを提供します。

Script# は、Windows Live や Office で Ajax エクスペリエンスを構築する Microsoft 内の開発者だけでなく、外部の開発者や Facebook などの企業によっても広く使用されています。Ajax ベースの RIA アプリケーションを作成している場合は、今すぐ Script# を試して、それが自分の Ajax 開発の改善に役立つかどうかを確認してください。

于 2009-02-25T19:56:29.670 に答える
1

C# と Javascript の両方で時間を合計するためのロジックを持つことは、厳密な意味で DRY ではありません。それは本当です。2 つの異なる環境で動作する 2 つの異なる言語であるという事実については、意見が分かれるかもしれませんが、結局のところ、一方を変更すると両方を変更する必要があります。

形と機能のトレードオフだと思います。JavaScriptを使用することはどれほど重要ですか? AJAX 呼び出しが遅すぎる場合 (可能性は高い)、DRY 原則は法律ではなく指針であることを理解する時期かもしれません。

于 2009-02-25T17:01:57.937 に答える
0

サーバーとクライアントの両方でコードを実行する場合は、式ツリーを JavaScript コンパイラに使用/書き込むことができます。

サーバー側では、式を評価し、JavaScript に変換された同じ式をクライアントに送信します。

于 2009-02-25T16:59:30.767 に答える