Чи є якісь пропозиції щодо розробки стандартів / документа найкращих практик кодування C #? [зачинено]


159

Я недавній випускник ШІ (близько 2 років), який працював на скромну роботу. Мені впало (в першу чергу, коли я перший «усиновлювач» у відділі), щоб створити базовий (читати корисний?) Документ зі стандартів кодування C #.

Думаю, я повинен пояснити, що я, мабуть, наймолодший інженер програмного забезпечення, але я з нетерпінням чекаю цього завдання, оскільки, сподіваюся, мені вдасться створити щось наполовину корисне. Я здійснив досить широкий пошук в Інтернеті та прочитав статті про те, що документ із стандартів кодування повинен / не повинен містити. Це здається гарним місцем, як будь-хто, щоб попросити якісь пропозиції.

Я усвідомлюю, що потенційно я відкриваю двері перед цілим світом розбіжностей щодо "найкращого способу робити справи". Я обидва розумію і поважаю незаперечний факт, що кожен програміст має переважний метод вирішення кожної окремої задачі, в результаті я не прагну написати щось настільки драконічно проскриптивне, щоб задушити особистий чуття, але спробувати отримати загальну методологію та згоду стандарти (наприклад, іменування конвенцій), щоб допомогти людям зробити коди легшими для читання.

Так ось .... будь-які пропозиції? Будь-який взагалі?

Відповіді:




26

Іронічно встановити фактичні стандарти, ймовірно, буде легкою частиною.

Першою моєю пропозицією було б отримати пропозиції від інших інженерів щодо того, що вони вважають, що їх слід охоплювати, і які рекомендації вони вважають важливими. Застосування будь-яких вказівок вимагає певного входу від людей. Якщо ви раптом скинете на них документ, який вказує, як писати код, ви зіткнетеся з опором, будь то молодший чи старший хлопець.

Після того, як у вас є набір пропозицій, надсилайте їх команді для зворотного зв'язку та перегляду. Знову ж змусьте людей купувати їх.

Вже можуть бути прийняті неформальні практики кодування (наприклад, префіксація змінних членів, назви функцій верблюда). Якщо це існує, і більшість кодів йому відповідає, тоді він заплатить за формалізацію його використання. Прийняття протилежного стандарту спричинить більше горя, ніж це варто, навіть якщо це щось загалом рекомендується.

Також варто розглянути рефакторинг існуючого коду, щоб відповідати новим стандартам кодування. Це може здатися марною витратою часу, але наявність коду, який не відповідає стандартам, може бути контрпродуктивним, оскільки у вас буде міш-меш різних стилів. Це також залишає людей перед дилемою, чи повинен код у певному модулі відповідати новому стандарту чи дотримуватися існуючого стилю коду.


14

Я завжди використовував Джувалі Лоуі в форматі PDF в якості еталону при виконанні стандартів кодування / найкращої практики всередині. Це слідує дуже близько до FxCop аналізу / Source Source , який є ще одним неоціненним інструментом для забезпечення дотримання стандарту. Між цими інструментами та посиланнями ви маєте змогу придумати приємний стандарт, який всі ваші розробники не будуть проти дотримуватися та мати можливість їх застосовувати.


9

Інші плакати вказали на основу, і все, що я хотів би додати, - зробити ваш документ коротким, милим, і до речі, використовуючи велику дозу Струнка і Білого, щоб відрізнити "must haves" від "було б добре, якщо ".

Проблема з документами про стандарти кодування полягає в тому, що ніхто насправді їх не читає так, як слід, і коли вони читають їх, вони не слідують за ними. Ймовірність того, що такий документ буде прочитаний та дотриманий, залежить від його довжини.

Я погоджуюся, що FxCop - хороший інструмент, але занадто багато цього може принести все задоволення прямо з програмування, тому будьте обережні.


9

Ніколи не пишіть свої власні стандарти кодування, використовуйте МС (або Сонці, або ... відповідно до вашої мови). Підказка у слові стандарт, світ був би набагато простішим місцем для кодування, якби кожна організація не вирішила написати своє. Хто насправді думає, що вивчати новий набір «стандартів» кожного разу, коли ви змінюєте команди / проекти / ролі, це корисний час для кого-небудь. Найбільше, що ви повинні зробити, це підсумовувати критичні моменти, але я б радив не робити цього навіть тому, що критичне значення залежить від людини до людини. Ще два моменти, які я хотів би зробити на стандартах кодування

  1. Закриття достатньо добре - Зміна коду для дотримання стандартів кодування до букви - це марна трата часу, поки код досить близький.
  2. Якщо ви змінюєте код, ви не писали, дотримуйтесь "локальних стандартів кодування", тобто зробіть новий код схожим на навколишній код.

Ці два моменти - це реальність, на яку я хочу, щоб усі писали код, який виглядав однаково.


8

Наступну документацію я вважаю дуже корисною та стислою. Він походить з сайту idesign.net і його автор Юваль Лоуї

C # Стандарт кодування

Примітка: вищезазначене посилання тепер мертве. Щоб отримати .zip файл, вам потрібно надати їм свою електронну адресу (але вони не використовуватимуть його для маркетингу ... чесно) Спробуйте тут


5

Я щойно почав з місця, де стандарти кодування зобов’язують використовувати m_ для змінних членів, p_ для параметрів і префіксів для типів, наприклад, "str" ​​для рядків. Отже, у вас може бути щось подібне в тілі методу:

m_strName = p_strName;

Жахливий. Дійсно жахливий.


1
IntelliSense у Visual Studio 2010 дозволяє вводити "Ім'я", і це відповідатиме підрядковій стрічці p_strName- робить його на 10% менш болісним, коли ви змушені працювати з такою гидотою. : o
Сем Харвелл

5

Я додав би Code Complete 2 до списку (я знаю, Джефф тут є шанувальником) ... Якщо ви є молодшим розробником, книга стане в нагоді налаштувати свій розум таким чином, щоб створити основу для найкращого існують практики написання коду та створення програмного забезпечення.

Треба сказати, що я прийшов до цього трохи пізно у своїй кар’єрі, але це багато правил, які я думаю про кодування та розвиток рамки в своєму професійному житті.

Варто перевірити;)


2
Я збирався запропонувати ту саму книгу. Потрібно прочитати.
Паскаль Парадіс

Я в процесі читання книги, читаю> 67%. Це змінило те, як я передбачаю програмування. Обов’язково читати.
UrsulRosu

4

Власні правила Microsoft є відмінною відправною точкою. Ви можете застосувати їх за допомогою FxCop.


4

Мені б сподобалося застосувати Стиль Майкрософт як стандарт. Це може бути застосовано на час збирання. але якщо у вас є застарілий код, просто застосуйте за допомогою StyleCop за новим кодом.

http://code.msdn.microsoft.com/sourceanalysis

Врешті-решт у нього буде можливість рефактора для очищення коду.

http://blogs.msdn.com/sourceanalysis/


2
Ви можете не погодитись із усім, що застосовується StyleCop, але вважаєте, що Microsoft рухається до єдиного стандарту, як це застосовує StyleCop - тому це набір стандартів, з якими ви можете розраховувати, що інші розробники мають ознайомитись. Узгодженість з великою частиною іншої галузі може бути цінною.
Беван

4

Особисто мені подобається той, який IDesign зібрав. Але це не те, чому я публікую ...

Хитрий біт у моїй компанії враховував усі різні мови. І я знаю, що моя компанія не одна. Ми використовуємо C #, C, збірку (ми робимо пристрої), SQL, XAML тощо. Хоча у стандартах будуть деякі подібності, кожен з них обробляється по-різному.

Також я вважаю, що стандарти вищого рівня мають більший вплив на якість кінцевого продукту. Наприклад: як і коли використовувати коментарі, коли винятки є обов'язковими (наприклад, події, ініційовані користувачем), чи (або коли) використовувати винятки проти повернених значень, який об’єктивний спосіб визначити, яким повинен бути код контролера та коду презентації, і т.д. Не зрозумійте мене неправильно, потрібні також стандарти низького рівня (форматування важливе для читабельності!) Я просто маю упередженість щодо загальної структури.

Ще одна деталь, про яку слід пам’ятати, - це придбання та примусове використання. Стандарти кодування чудові. Але якщо з ними ніхто не згоден і (мабуть, що важливіше) ніхто їх не примушує, то це все нанівець.


4

Як я писав як опублікований для Philips Medical Systems, так і той, що розміщений на веб-сайті http://csharpguidelines.codeplex.com, я, можливо, трохи упереджений, але я пишу, підтримую і просуваю стандарти кодування вже більше 10 років. Я спробував написати один CodePlex з різними думками, і більшу частину вступу витратив на те, як боротися з цим у вашій конкретній організації. Прочитайте і надайте мені відгуки .....


Я дійсно люблю це керівництво і думаю, що воно слідує фантастичному формату (швидка версія та повна версія, як і багато людей, яких я бачив використовувати). Ви отримуєте мій голос проти всіх інших, приємна робота. Я настійно рекомендую використовувати цей документ на Codeplex як початок, оскільки це справді хороший посібник для порівняння приміток або уважного слідування.
atconway

Я побачив, що. Я справді це маю на увазі, продовжуйте добре працювати, і я рекомендую це керівництво хоча б як вихідний пункт для серйозних розробників .NET.
atconway

1
+1 за чудову роботу, хотілося б, щоб я міг +100. Це коротко, тому люди насправді читатимуть його, тому він виграє стандарти Microsoft та IDesign. У ньому є змістовні назви правил, шпаргалка, файли стилів для VS / R # ... можливо, відсутні чіткіші приклади в шпаргалці :)
Віктор Сергієнко


1

Ви, швидше за все, налаштовані на збій. Ласкаво просимо в галузь.

Я не погоджуюся - доки він створює документ, найгірше, що може статися, - це те, що він забуде кожен.

Якщо інші люди мають проблеми зі вмістом, ви можете попросити їх оновити, щоб показати, що вони вважають за краще. Таким чином він знятий з вашої тарілки, а інші зобов'язані виправдати свої зміни.


Я не погоджуюсь. Найгірше, що може статися, це те, що вказівки є непостійними; і клопи прослизають. Якщо він випадково пише програмне забезпечення для управління LHC, тоді ми будемо зручні. / Сарказм
TraumaPony


1

Я великий шанувальник книги Франческо Балена " Практичні вказівки та найкращі практики для розробників VB та C # ".

Це дуже детально і охоплює всі найважливіші теми. Це не лише дає вам правило, але також пояснює причину цього правила і навіть надає анти-правило, де може бути два найкращих протилежних практики. Єдиним недоліком є ​​те, що він був написаний для розробників .NET 1.1.




1

Я маю запропонувати документ dotnetspider.com .
Це чудовий і детальний документ, який корисний у будь-якому місці.


1

Раніше я використовував Juval's і це через не надмірність, але я лінивий і тепер просто відповідаю волі Решарпера .



0

Я думаю, що я повторюю інші коментарі, що вже пов'язані керівні принципи щодо MS є чудовою відправною точкою. Я моделюю свій код значною мірою на цих.

Що цікаво тим, що мій менеджер говорив мені в минулому, що він не надто захоплюється ними: D

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


0

Стандарт від Philips Medical Systems добре написаний і в основному відповідає вказівкам Microsoft: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

Мої стандарти базуються на цьому з декількома налаштуваннями та деякими оновленнями для .NET 2.0 (стандарт Philips написаний для .NET 1.x, тому трохи датовано).



0

У коді, який я пишу, я зазвичай дотримуюся інструкцій .NET Framework Design для API, що публічно піддаються впливу, та рекомендацій щодо моно-кодування для корпусів та відступів приватних членів . Mono - це реалізація .NET з відкритим кодом, і я думаю, що хлопці знають свою справу.

Я ненавиджу, як код Microsoft витрачає простір:

try
{
    if (condition)
    {
        Something(new delegate
        {
            SomeCall(a, b);
        });
    }
    else
    {
        SomethingElse();
        Foobar(foo, bar);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Okay, you got me");
}

Що вам може здатися дивним в інструкціях Mono, це те, що вони використовують 8-пробільні вкладки. Однак після деякої практики я виявив, що насправді це допомагає мені писати менш заплутаний код, застосовуючи свого роду обмеження відступу.

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

try {
        if (condition) {
                Something (new delegate {
                        SomeCall (a, b);
                });
        } else {
                SomethingElse ();
                Foobar (foo, bar);
        }
} catch (Exception ex) {
        Console.WriteLine ("Okay, you got me");
}

Але будь ласка, не примушуйте нічого подібного, якщо ваші колеги не люблять цього (якщо ви не готові внести свій внесок у Mono ;-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.