Есть ли какие-либо предложения по разработке документа о стандартах / передовых методах кодирования C#?

Я недавний выпускник ИИ (около 2 лет), работаю на скромном предприятии. На меня выпало (прежде всего потому, что я первый «усыновитель» в отделе) создать базовый (полезный?) Документ по стандартам кодирования C#.

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

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

Итак, начнем .... есть предложения? Есть вообще?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
159
0
71 489
26
Перейти к ответу Данный вопрос помечен как решенный

Ответы 26

Собственные правила Microsoft - отличная отправная точка. Вы можете обеспечить их соблюдение с помощью FxCop.

Ответ принят как подходящий

Мы начинаем с

а затем задокументируйте отличия и дополнения к этой базовой линии.

Я всегда использовал pdf Джувала Лоуи в качестве справочника при разработке стандартов / передовых методов кодирования внутри компании. Он очень близок к FxCop / Исходный анализ, который является еще одним бесценным инструментом, позволяющим убедиться, что стандарт соблюдается. Между этими инструментами и справочными материалами вы должны быть в состоянии придумать хороший стандарт, которому все ваши разработчики не будут возражать, и они смогут обеспечить их соблюдение.

IDesign содержит широко используемый стандарт кодирования C#. Также см. Руководство по дизайну каркаса 2-е изд..

Другие плакаты указали вам на базовый уровень, все, что я хотел бы добавить, это сделать ваш документ коротким, приятным и по существу, используя большую дозу Strunk и White, чтобы отличить «обязательные» от «было бы неплохо, если бы» ".

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

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

По иронии судьбы установить настоящие стандарты, вероятно, будет проще всего.

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

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

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

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

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

Что интересно, потому что мой менеджер сказал мне в прошлом, что он не слишком увлечен ими: D

У тебя впереди веселое задание, мой друг. Желаем удачи и, пожалуйста, спросите, нужно ли вам еще что-нибудь :)

You are most likely being set up to fail. Welcome to the industry.

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

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

Я не согласен. Худшее, что может случиться, - это несоответствие руководящих принципов; и ошибки проскальзывают. Если он пишет управляющее программное обеспечение для LHC, тогда мы пойдем. /Сарказм

TraumaPony 22.09.2008 08:37

Никогда не пишите свои собственные стандарты кодирования, используйте стандарты MS (или Sun, или ... в зависимости от вашего языка). Ключ к разгадке в слове «стандарт». В мире было бы намного проще писать код, если бы каждая организация не решила написать свое собственное. Кто действительно думает, что изучение нового набора «стандартов» каждый раз, когда вы меняете команду / проект / роли, полезно для любого времени. Максимум, что вам когда-либо следует сделать, - это суммировать критические моменты, но я бы не советовал делать даже это, потому что то, что важно, варьируется от человека к человеку. Еще два момента о стандартах кодирования.

  1. Close - это достаточно хорошо - изменение кода в соответствии со стандартами кодирования до буквы является пустой тратой времени, если код достаточно близок.
  2. Если вы меняете код, который не писали, следуйте «местным стандартам кодирования», то есть сделайте свой новый код похожим на окружающий код.

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

Стандарт Philips Medical Systems хорошо написан и в основном соответствует рекомендациям Microsoft: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

Мои стандарты основаны на этом с некоторыми изменениями и некоторыми обновлениями для .NET 2.0 (стандарт Philips написан для .NET 1.x, поэтому он немного устарел).

У меня возникнет соблазн использовать Microsoft StyleCop в качестве стандарта. Это может быть применено во время сборки. но если у вас есть устаревший код, просто принудительно используйте StyleCop в новом коде.

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

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

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

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

Bevan 22.11.2008 07:15

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

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

Стоит проверить;)

Я собирался предложить ту же книгу. Обязательно прочтите.

Pascal Paradis 28.11.2008 16:48

Читаю книгу, прочитал> 67%. Это изменило мои представления о программировании. Должен прочитать.

UrsulRosu 23.10.2013 11:41

Недавно я нашел Руководство по Encodo C#, который включает идеи из многих других источников (IDesign, Philips, MSDN).

Другой источник может быть Рекомендации по программированию для профессиональных C# / VB .NET.

Следующая документация показалась мне очень полезной и краткой. Он взят с сайта idesign.net, его автором является Жюваль Лоуи.

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

NB: указанная выше ссылка теперь мертва. Чтобы получить файл .zip, вам нужно предоставить им свой адрес электронной почты (но они не будут использовать его для маркетинга ... честно) Попробуйте здесь

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

Он очень подробный и охватывает все основные темы. Он не только дает вам правило, но также объясняет причину этого правила и даже предлагает антиправило, где могут быть две противоположные передовые практики. Единственным недостатком является то, что он был написан для разработчиков .NET 1.1.

Я только начал с того места, где стандарты кодирования предписывают использование m_ для переменных-членов, p_ для параметров и префиксов для типов, таких как 'str' для строк. Итак, у вас может быть что-то вроде этого в теле метода:

m_strName = p_strName;

Ужасный. Действительно ужасно.

IntelliSense в Visual Studio 2010 позволяет вам ввести «Имя», и оно будет соответствовать подстроке в p_strName - что на 10% менее болезненно, когда вы принужденный работает с такой мерзостью. : o

Sam Harwell 13.12.2009 00:33

Лично мне нравится тот, который собрал IDesign. Но я пишу не поэтому ...

Сложность в моей компании заключалась в том, чтобы учесть все языки. И я знаю, что моя компания не одинока в этом. Мы используем C#, C, сборку (мы создаем устройства), SQL, XAML и т. д. Хотя в стандартах есть некоторые сходства, каждый из них обычно обрабатывается по-разному.

Кроме того, я считаю, что стандарты более высокого уровня имеют большее влияние на качество конечного продукта. Например: как и когда использовать комментарии, когда исключения являются обязательными (например, события, инициированные пользователем), следует ли (или когда) использовать исключения или возвращаемые значения, каков объективный способ определить, каким должен быть код контроллера или код представления, и т. д. Не поймите меня неправильно, также необходимы стандарты низкого уровня (форматирование важно для удобочитаемости!) У меня просто предубеждение в отношении общей структуры.

Еще одна вещь, о которой следует помнить, - это бай-ин и принудительное исполнение. Стандарты кодирования великолепны. Но если с ними никто не согласен и (что, вероятно, более важно) никто не принуждает к ним, то это все напрасно.

Весь наш стандарт кодирования примерно гласит: «Используйте StyleCop».

Я должен предложить документ dotnetspider.com. Это отличный и подробный документ, который пригодится где угодно.

Раньше я использовал Juval, и это закончилось, если не переборщить, но я ленив и теперь просто подчиняюсь воле Решарпер.

Я также слежу за Решарпером. Также руководство, упомянутое в блоге Скотта Гатри http://weblogs.asp.net/scottgu/archive/2007/10/08/october-8th-links-asp-net-asp-net-ajax-silverlight-and-net.aspx И http://csharpguidelines.codeplex.com/releases/view/46280

В коде, который я пишу, я обычно следую Рекомендации по проектированию .NET Framework для общедоступных 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 ;-)

Вы можете проверить это, 7 лучших стандартов кодирования и руководящих указаний для разработчиков C# /. NET http://www.amazedsaint.com/2010/11/top-6-coding-standards-guideline.html надеюсь, что это поможет

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

Мне ДЕЙСТВИТЕЛЬНО нравится это руководство, и я думаю, что оно соответствует фантастическому формату (быстрая версия и полная версия, как многие люди, которых я видел). Вы получили мой голос против всех остальных, хорошая работа. Я настоятельно рекомендую использовать этот документ на Codeplex в качестве начала, поскольку это действительно хорошее руководство для сравнения заметок или внимательного изучения.

atconway 30.11.2012 00:30

Я видел это. Я серьезно, продолжайте в том же духе, и я рекомендую это руководство хотя бы в качестве отправной точки для серьезных разработчиков .NET.

atconway 30.11.2012 02:18

+1 за большую работу, если бы я мог +100. Он краткий, поэтому люди его действительно прочтут - так что он превосходит стандарты Microsoft и IDesign. У него есть значимые имена правил, шпаргалка, файлы стилей для VS / R # ... возможно, в шпаргалке отсутствуют более подробные примеры :)

Victor Sergienko 20.03.2013 14:29

Правила SSW

Он включает в себя некоторые стандарты C# и многое другое .... в первую очередь ориентировано на разработчиков Microsoft

Другие вопросы по теме