3

これが私のシナリオです。

ASP.NET MVC 3 と HTML、CSS、JavaScript/JQuery を使用して Web アプリケーションを作成しています。私はVisual Studio 2010を使用しています

私たちはすでに製品をリリースしています (1.0 に含まれています) が、プロジェクトの「メンテナンス」モードになっているため、プロジェクトに新しい機能が追加されているため、一連の定数を維持するのが難しくなると感じています。 C# (ASP.NET MVC) と JavaScript の間。

たとえば、JavaScript で $.post を作成し、それを MVC URL コントローラー/アクションにリンクさせてから、パラメーター { key1: value1, key2: value2} を渡します。

問題は、C# パラメーター名が変更された場合、または署名内のパラメーターの位置が変更された場合、実行時に JavaScript を更新する必要があることしかわからないことです (私はアーキテクチャを知らないプログラマーであると想定しています)。実行前にこれを行うのに十分です)。

私の質問は、JavaScript 側をより簡単に管理して、C# 側で行われた変更と「同期」を維持できるようにするにはどうすればよいかということです。コンパイラは何らかの方法でこれを行うことができますか、または私を助けることができるプラグインはありますか?

ありがとう。

4

3 に答える 3

1

あなたの質問は、C# 定数と JavaScript 定数の同期について尋ねますが、パラメータ名と位置についても話します。

MVC の世界では、パラメーターの位置は名前ほど重要ではなく、大規模な単体テストと統合テストを行う前に、それらを同期させる良い方法を見つけられませんでした。あなたはそれらのテストを行っていますよね?;)

実際の定数と列挙型に関しては、T4 テンプレートを使用して、必要な定数/列挙型の .cs ファイルと (名前空間の) .js ファイルの両方を生成しました (私の場合は、データベースからですが、単に他のものと同じように簡単に)。

于 2013-04-16T22:20:27.290 に答える
0

簡単な方法は思いつきませんが、ここに役立つものがあります。私が通常いくつかのウェブサイトを開発するとき、まず、ビューに可能な限り最小限の JavaScript コードを記述し、それらをすべて .js ファイルに含めるようにします。このようにして、多くのコードを再利用できることを確認できます。すべてのコードは純粋な JavaScript であるためです。あなたが言及した問題はありません。また、すべてのアクションの記録をコントローラーとエリア名とともにデータベースに保持し、それらを使用してアクセス許可とセキュリティの問題を管理します。あなたの問題のために、このすべてのメソッドをデータベースに追加し、後でこのメソッドがもう存在するかどうかをコードチェックで確認できます。

DBへの追加:(ベースコントローラー内にあるため、手動で何もする必要はありません)

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var area = filterContext.RouteData.DataTokens["area"];
            string areaName = area != null ? area.ToString() : "";
            var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            string actionName = filterContext.ActionDescriptor.ActionName;

           //Add to DB
            base.OnActionExecuting(filterContext);
        } 

それが存在するかどうかを確認します。

bool exist = false;
 try
 {
      HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("http://www.example.com/image.jpg");
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
      {
           exist = response.StatusCode == HttpStatusCode.OK;
      }
 }
 catch
 {
 }
于 2013-04-16T19:08:35.753 に答える
0

最良の選択肢は統合テストです。ユーザーが行うアクションを正確にテストできます。Selenoは、統合テストを作成するための優れたオプションです (Selenium をラップします)。

やる価値はあります。統合テストのカバレッジが良ければ、本番環境で遭遇するバグは少なくなります。

于 2015-06-30T23:36:21.440 に答える