2016-12-18 19 views
0

インストール済みCodeCrackerコーディング標準の理解を深めるため

これは私のオリジナルの方法です。

//Add 
public bool AddItemToMenu(MenuMapper mapperObj) 
{ 
    using (fb_databaseContext entities = new fb_databaseContext()) 
    { 
     try 
     { 
      FoodItem newItem = new FoodItem(); 
      newItem.ItemCategoryID = mapperObj.ItemCategory; 
      newItem.ItemName = mapperObj.ItemName; 
      newItem.ItemNameInHindi = mapperObj.ItemNameinHindi; 
      entities.FoodItems.Add(newItem); 
      entities.SaveChanges(); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      //handle exception 
      return false; 
     } 
    } 
} 

これはCodeCrackerの推奨する方法です。アプリケーションはintializeかかわらず、それらが呼び出されたりしていない場合とき

public static bool AddItemToMenu(MenuMapper mapperObj) 
{ 
    using (fb_databaseContext entities = new fb_databaseContext()) 
    { 
     try 
     { 
      var newItem = new FoodItem 
      { 
       ItemCategoryID = mapperObj.ItemCategory, 
       ItemName = mapperObj.ItemName, 
       ItemNameInHindi = mapperObj.ItemNameinHindi, 
      }; 

      entities.FoodItems.Add(newItem); 
      entities.SaveChanges(); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      //handle exception 
      return false; 
     } 
    } 
} 
  • は、私の知る限りでは静的メソッドは、メモリを占有します。
  • 返品の種類が分かっている場合は、なぜvarというキーワードを使用する必要がありますか?
  • なぜこのようなオブジェクト初期化ツールが優れているのですか?

私は長い道のりで私を導くことができるので、これらの答えを得るのは非常に面倒です。もう一つの方法の追加

: -

private string GeneratePaymentHash(OrderDetailMapper order) 
{ 
    var payuBizzString = string.Empty; 

    payuBizzString = "hello|" + order.OrderID + "|" + order.TotalAmount + "|FoodToken|" + order.CustomerName + "|[email protected]|||||||||||10000"; 
    var sha1 = System.Security.Cryptography.SHA512Managed.Create(); 

    var inputBytes = Encoding.ASCII.GetBytes(payuBizzString); 
    var hash = sha1.ComputeHash(inputBytes); 

    var sb = new StringBuilder(); 
    for (var i = 0; i < hash.Length; i++) 
    { 
     sb.Append(hash[i].ToString("X2")); 
    } 
    return sb.ToString().ToLower(); 
} 

答えて

0

これらの多くは個人的な好みですが、ほとんどのコーディング標準は、他のプログラマがあなたのコードをより簡単に読むことができます。

静的メソッドをインスタンスに変更すると、オブジェクト指向の概念がより有効になります。混合状態の量が制限され、テストのためにクラスをモックアウトすることができます。

varキーワードはまだ静的に型付けされていますが、命名に集中してオブジェクトをより意味のあるものにする必要があるため、型が明示的に宣言されると冗長になります。

オブジェクトの初期化に関しては、これはオブジェクトのセットアップに必要なものすべてをグループ化するだけです。ちょっと読みやすくするだけです。

4

私が知る限り、Staticメソッドは、呼び出されたかどうかに関係なく、アプリケーションが初期化されたときにメモリを占有します。

すべての方法がそうです。クラスのインスタンスが作成されていない場合でも、メモリを占有する静的フィールドと混同している可能性があります。一般に、メソッドを静的にすることができれば、メソッドを静的にする必要があります。

私はすでに戻り値の型を知っていますが、なぜvarキーワードを使うべきですか?

コードを同じ行に2回指定しないようにします。

なぜこのようなオブジェクト初期化ツールが優れていますか?

割り当てを視覚的にグループ化し、周囲の混乱を減らすため、読みやすくなります。

+0

あなたの投稿のおかげで、このアップデートはパフォーマンスを向上させるでしょうか? –

+0

@ Kgn-webおそらく測定可能な方法ではありません。これは、読みやすさと理解の容易さを若干向上させます。これは、最初に一貫したコーディング標準を追うという目標です。 – dasblinkenlight

+0

もう1つの方法を追加しました。ここで私はInstanceを渡していますvarilableそれは静的としてそれをマークすることを提案しています - –

1
  1. 静的メソッドは、インスタンスメソッドより多くのメモリを占有しません。さらに、メソッド自体(this)をインスタンスとして使用する際に依存しないため、メソッドは静的である必要があります。

  2. varを使用すると、読みやすくなります。 varは常に3文字のみですが、多くの型がはるかに長く、変数の名前を行に沿ってさらに強くすることができます。

  3. オブジェクト初期化子は、変数名の前にすべての属性が付いていないため、読みやすくなります。また、すべての割り当てが一度に完了したことを意味します。多くの場合

、あなたが使っているこのツールは、コードをより読みやすく、きれいなことについてのようです。コンパイラがあなたの意図をヒントすることによって、変更がパフォーマンスを向上させる特定のケースがあるかもしれませんが、一般的に、これはコードを一目で理解できることです。

実際にパフォーマンスの問題が発生している場合は、パフォーマンスにご懸念ください。 のパフォーマンス問題が発生した場合は、プロファイリングツールを使用してアプリケーションのパフォーマンスを測定し、コードのどの部分が遅く実行されているかを確認します。 intializeかかわらず、アプリケーションは、それらが呼び出されるかされない場合とき

+0

あなたの投稿をありがとう、このアップデートはパフォーマンスを向上させるでしょうか? –

+0

@ Kgn-webの可読性は、ほとんどの場合常に重要です。パフォーマンスの問題がある場合は、パフォーマンスについてのみ心配してください。その場合、プロファイリングツールを使用して、コードが最も遅く実行されている場所を確認する必要があります。 – Soviut

+0

このような問題はありません。インスタンスメソッドを静的メソッドに変更すると、メモリ使用率が向上しますか? –

0

は、私の知る限りでは静的メソッドは、メモリを占有します。

コンパイラ、デバッグとリリースなどによっては、呼び出されないメソッドは最適化されていても、最適化されていなくてもかまいません。静的対非静的は関係ありません。

this参照を必要としない方法(およびIMOは静的にすることができます)。私はすでに、なぜ私はvarキーワード

ない理由を使用する必要があり、戻り値の型を知っている

。違いはありません。あなたが好むものは何でもしてください。

なぜこのようなオブジェクト初期化ツールが優れているのですか?

オブジェクトイニシャライザ構文は、ほとんどの実用目的で同じコードを生成します(詳細はanswer @SonerGönülを参照してください)。主にそれは好みの問題です - 個人的に私はオブジェクトの初期化子の構文を読みやすく、維持するのが簡単です。

+0

"オブジェクトイニシャライザ構文は同じコードを生成します。"実際は、そうではありません。私の答えをチェックしてください。 –

+0

ありがとうございます。更新しました。 –

1

私が知る限り、アプリケーションが呼び出されるかどうかにかかわらず、アプリケーション が初期化すると、静的メソッドはメモリを占有します。

これは、すべての種類のメソッドに当てはまります。したがって、これは無関係です。

返品の種類がわかっている場合は、なぜvarというキーワードを使用する必要がありますか?

varは、個人的な好み(syntactic sugar)です。このアナライザは、戻り値の型がすでに分かっているので、型を明示的に使用する必要はないと考えるかもしれないので、代わりにvarを使用することをお勧めします。個人的には、私は可能な限りvarを使用します。この問題のために、あなたは読んでいるかもしれませんUse of var keyword in C#

なぜこの方法の方が良いですか?

私はは、オブジェクト初期化子が常に優れていると言うが、あなたのnewItemどちらかがnullになりますか、それはあなたのため、初期化完全だ物資を初期化オブジェクトことはできません。

var newItem = new FoodItem 
{ 
    ItemCategoryID = mapperObj.ItemCategory, 
    ItemName = mapperObj.ItemName, 
    ItemNameInHindi = mapperObj.ItemNameinHindi, 
}; 

はそう

var temp = new FoodItem(); 
newItem.ItemCategoryID = mapperObj.ItemCategory; 
newItem.ItemName = mapperObj.ItemName; 
newItem.ItemNameInHindi = mapperObj.ItemNameinHindi; 
var newItem = temp; 

に等しい実際で、これはあなたの最初のものと同じないです。この件についてCode Reviewに素敵な答えがあります。 https://codereview.stackexchange.com/a/4330/6136また、あなたはチェックしたいかもしれません:http://community.bartdesmet.net/blogs/bart/archive/2007/11/22/c-3-0-object-initializers-revisited.aspx

+0

非常に有益です。新しく追加されたpriivateメソッドにあなたの提案を加えてください。 もう1つの方法を追加しました。ここで私はインスタンスvarilableを渡している静的としてマークすることを示唆している - –

+0

このように近づくと、私のすべてのメソッドは静的としてマークされています –

関連する問題