2016-12-18 4 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.

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.
  • Почему этот способ Objectializer лучше.

Я очень любопытно, чтобы получить ответ, так как он может вести меня до конца.

Добавление еще один метод: -

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

Насколько я знаю Статические методы занимают память, когда приложение инициализируется независимо от того, вызваны они или нет.

Все методы делают это. Вероятно, вы путаете это со статическими полями, которые занимают память даже тогда, когда не создаются экземпляры класса. Как правило, если метод можно сделать статическим, он должен быть статическим, за исключением случаев, когда это реализация интерфейса.

Когда я уже знаю тип возврата, зачем использовать ключевое слово var.

Чтобы не указывать тип дважды в одной строке кода.

Почему этот способ объектива intializer лучше?

Потому что он визуально отображает задания и уменьшает беспорядок вокруг них, что упрощает чтение.

+0

Спасибо за сообщение, будет ли это обновлять производительность? –

+0

@ Kgn-web Вероятно не поддающимся измерению. Это немного улучшает читаемость и простоту понимания, что является целью соблюдения последовательных стандартов кодирования в первую очередь. – dasblinkenlight

+0

Я добавил еще один метод. Здесь я передаю Instance varilable, но он предлагает мне пометить его как static - –

1
  1. Статические методы не занимают больше памяти, чем методы экземпляра.Кроме того, ваш метод должен быть статичным, поскольку он никак не зависит от доступа к нему (this) в качестве экземпляра.

  2. Использование var, скорее всего, пригодно для удобочитаемости. var всегда всего 3 буквы, в то время как многие типы намного длиннее и могут форсировать имя переменной намного дальше вдоль линии.

  3. Инициализатор объекта, опять же, скорее всего, для удобства чтения, не имея префикса имени переменной всех атрибутов. Это также означает, что все ваши задания выполняются сразу.

В большинстве случаев этот инструмент, который вы используете, по-видимому, делает код более удобочитаемым и чистым. Могут быть определенные случаи, когда изменения повышают производительность, намекая компилятору о ваших намерениях, но в целом это связано с тем, что можно сразу понять код.

Только заботитесь о производительности, если вы действительно испытываете проблемы с производительностью. Если вы : испытываете проблемы с производительностью, используйте некоторые инструменты профилирования для измерения производительности вашего приложения и выясните, какие части вашего кода работают медленно.

+0

Спасибо за сообщение, будет ли это обновлять производительность? –

+0

@ Kgn-web читаемость почти всегда более важна. Если вы испытываете проблемы с производительностью, заботитесь о производительности. В этом случае вы должны использовать некоторые инструменты профилирования, чтобы увидеть, где ваш код работает медленнее. – Soviut

+0

Ничего подобного. Меняет ли метод экземпляра на статический метод улучшение использования памяти? –

0

Насколько я знаю Статические методы занимают память, когда приложение интериализуется независимо от того, вызваны они или нет.

Методы, которые никогда не вызываются, могут быть оптимизированы или не могут быть оптимизированы, в зависимости от компилятора, отладки и выпуска. Статический или нестатический не имеет значения.

Метод, который не требует ссылки this, может быть (и IMO) статическим.

Когда я уже знаю, возвращаемый тип, то почему я должен использовать ключевое слово Var

Нет причины. Нет никакой разницы; делать то, что вы предпочитаете.

Почему этот способ инсайлера Object лучше.

Синтаксис инициализатора объекта генерирует тот же самый код для большинства практических целей (см. Ответ @ SonerGönül для деталей). В основном это вопрос предпочтения - лично я считаю, что синтаксис инициализатора объекта легче читать и поддерживать.

+0

«Синтаксис инициализатора объекта генерирует один и тот же код». На самом деле, нет, это не так. Проверьте мой ответ. –

+0

Thanks; обновлено. –

1

Насколько я знаю Статические методы занимают память, когда приложение инициализируется независимо от того, вызваны они или нет.

Это верно для всех видов методов, поэтому это не имеет значения.

Когда я уже знаю тип возврата, то почему я должен использовать ключевое слово var.

var является личным предпочтением (что является syntactic sugar).Этот анализатор может подумать, так как тип возврата уже известен, нет необходимости явно использовать тип, поэтому я рекомендую вместо этого использовать var. Персоналий, я использую var как можно больше. По этому вопросу вы, возможно, захотите прочитать: Use of var keyword in C#

Почему этот способ инсайлера Object лучше.

Я не могу сказать объект инициализатора всегда лучше, но объект инициализировать материалы, которые либо ваш 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; 

так, это не такой же, как ваш первый. Есть хороший ответ на обзор кода по этому вопросу. 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. Я добавил еще один метод. Здесь я передаю Instance varilable, но он предлагает мне пометить его как static - –

+0

Предположим, что, приближаясь таким образом, все мои методы отмечены как статические, тогда я должен продолжить и пометить мой класс также статическим –

Смежные вопросы