2009-02-25 8 views
5

私は現在、ASP.NT MVC RC1を使用して基本タイムシートアプリケーションを実装しています。私はDRYの原則に従いたいと思いますが、ある特定のケースでは難しいと感じています:ロジックがC#とJavascriptの実装を必要とするときにDRYを維持するには?

私の意見の1つは実際には部分的な見解で、特定のタスクに費やされた時間数1日のテキストボックス。最初にページをロードするときに、ビュー内のテキストボックスにその時間の合計を表示する必要があります。さらに、テキストボックスの値を変更すると、その合計が更新されます。テキストボックスの更新では、完全なポストバックは発生せず、結果に何も作用しないAJAXポストバックのみが発生します(ポストバックはDBの値を更新しますが、ActionResultの戻り値はEmptyResultです。 UI)。

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

どうすればいいですか?これまでの私の唯一の答えは、UIの合計を計算し、AJAXポストバックにそのビューの新しい「合計」を返すようにJavaScriptコードをスクラップすることです。

他の方法はありますか?

答えて

1

C#とJavascriptの両方で時間を合計するロジックを持つことは、厳密にはDRYではありません。 2つの別々の環境で動作する2つの異なる言語であるという事実を頭で分けるかもしれませんが、1つを変更するとその日の終わりに両方を変更する必要があります。

私はフォームと機能のトレードオフだと思います。 javascriptを持っていることはどれくらい重要ですか? AJAXの呼び出しが遅すぎると(本当の可能性がある)、DRYの原則は法律ではなく、指針の原則であることに気付くはずです。

+2

* *は法律ではなく指導原則です。両方のロジックを必要とし、同じ実装を共有することは技術的に実現可能ではない場合は、2回実装する必要があります。タフ運、それは人生です。 ;) – jalf

+0

@ jalf:正確に。 A(any)ガイドラインは、破棄不可能な法則ではありません。 – Richard

+0

OK、記載済み、変更済み) –

0

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

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

+0

JavaScriptのクライアント側を作成するには、C# - > Javascriptトランスレータを使用することをお勧めしますか?または、あなたはクライアント側と同様にサーバー側でjavascriptを使用することを意味しますか? –

+0

私は彼がC#とJavascriptの両方で実行できる「表現」を持っていることを意味しているとは思わない。 –

+0

はい、いいえ。式ツリーは、C#/ VB.NET式のサブセットのメモリ内表現です。それらは簡単にサーバー上で評価することができます。ただし、そのような式ツリーをJavaScriptに変換するコンポーネントを作成する必要があります。 –

3

Nikhil Kothari's Script# projectを試すことができます。これはクロスコンパイラで、C#からコンパイルして、JavaScriptを独立したJavaScriptに変換します。これによりロジックを共有できます。その目的のためにMicrosoftの多くのグループで使用されています。ウェブサイトから、

より:

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

Script#は、Microsoftの建物内の開発者が広範に使用しています Windows Live、Ajaxでの経験はちょうどカップルの名前として、 として、外部の開発者やFacebookなどの企業も同様です。 あなたがAjaxベースのRIAアプリケーションを構築している場合は、 にスクリプトを試してみて、それが自分のAjaxを改善するのに役立つかどうかを確認してください !

関連する問題