Czy są jakieś sugestie dotyczące opracowania dokumentu C# coding standards / best practices? [zamknięte]

Jestem niedawnym absolwentem AI (około 2 lat) pracy dla skromnej operacji. Do mnie (przede wszystkim jako pierwszy "adopter" w dziale) przypadło stworzenie podstawowego (czyt. przydatnego?) C# coding standards document.

Myślę, że powinienem wyjaśnić, że jestem prawdopodobnie najbardziej młodszym inżynierem oprogramowania, ale nie mogę się doczekać tego zadania, ponieważ mam nadzieję, że będę w stanie wyprodukować coś w połowie użytecznego. Przeprowadziłem dość obszerne przeszukanie Internetu i przeczytałem artykuły co powinien / nie powinien zawierać dokument norm kodowania. Wydaje się, że to dobre miejsce, jak każde inne, aby poprosić o kilka sugestii.

Zdaję sobie sprawę, że potencjalnie otwieram drzwi do całego świata niezgody na temat "najlepszego sposobu działania". Rozumiem i szanuję niezaprzeczalny fakt, że każdy programista ma preferowaną metodę rozwiązywania każdego zadania, dlatego nie chcę pisać niczego tak drakońsko proskryptywnego, aby stłumić osobisty talent, ale spróbować i uzyskać ogólną metodologię i uzgodnione standardy (np. konwencje nazewnictwa), aby pomóc w uczynieniu kodu jednostki bardziej czytelnym.

No to zaczynamy .... jakieś sugestie? W ogóle?

Author: Erick Robertson, 2008-08-18

26 answers

Zaczynamy od

A następnie udokumentować różnice i uzupełnienia do tej linii bazowej.

 135
Author: ESV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 18:03:38

IDesign posiada powszechnie używany dokument standardów kodowania C#. Zobacz również Framework Design Guidelines 2nd Ed.

 32
Author: denis phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-29 13:00:25

Jak na ironię ustalenie rzeczywistych standardów prawdopodobnie będzie łatwą częścią.

Moją pierwszą sugestią byłoby pozyskanie sugestii od innych inżynierów na temat tego, co uważają za ważne i jakie wytyczne uważają za ważne. Egzekwowanie wszelkiego rodzaju wytycznych wymaga pewnego stopnia wpisowego od ludzi. Jeśli nagle upuścisz na nich dokument, który określa, jak pisać kod, napotkasz opór, niezależnie od tego, czy jesteś najbardziej młodszym, czy starszym facetem.

Po zestaw propozycji następnie wysłać je do zespołu do opinii i przeglądu. Jeszcze raz, niech ludzie się w nie kupują.

Mogą być już stosowane nieformalne praktyki kodowania (np. prefiksowanie zmiennych członkowskich, nazwy funkcji camelcase). Jeśli istnieje, a większość kodu jest z nim zgodna, to opłaci się sformalizować jego użycie. Przyjęcie przeciwnego standardu spowoduje więcej żalu niż warto, nawet jeśli jest to coś ogólnie zalecane.

Warto też rozważyć refaktoryzacja istniejącego kodu w celu spełnienia nowych standardów kodowania. Może to wydawać się stratą czasu, ale posiadanie kodu, który nie spełnia standardów, może być nieproduktywne, ponieważ będziesz miał mish-mash różnych stylów. Pozostawia to również ludzi w dylemacie, czy kod w danym module powinien być zgodny z nowym standardem, czy też podążać za istniejącym stylem kodu.

 26
Author: Andrew Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 17:50:32

Zawsze używałem Juvala lowy ' s pdf jako odniesienia podczas wykonywania standardów kodowania / najlepszych praktyk wewnętrznie. Jest bardzo blisko FxCop/Analiza źródłowa , która jest kolejnym nieocenionym narzędziem, aby upewnić się, że standard jest przestrzegany. Pomiędzy tymi narzędziami i odniesieniami powinieneś być w stanie wymyślić ładny standard, który wszyscy twoi programiści nie będą mieli nic przeciwko naśladowaniu i będą mogli je egzekwować.

 14
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 18:58:40

Inne plakaty wskazywały ci punkt odniesienia, dodam tylko, że twój dokument jest krótki, słodki i do rzeczy, używając dużej dawki Strunka i bieli, aby odróżnić "must haves" od "It would be nice ifs".

Problem ze standardami kodowania dokumentów polega na tym, że nikt tak naprawdę nie czyta ich tak, jak powinien, a kiedy je czyta, nie podąża za nimi. prawdopodobieństwo odczytania i naśladowania takiego dokumentu zmienia się odwrotnie z jego długość.

Zgadzam się, że FxCop jest dobrym narzędziem, ale zbyt wiele z tego może zabrać całą zabawę z programowania, więc bądź ostrożny.

 9
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 17:46:57

Nigdy nie pisz własnych standardów kodowania używaj tych MS (lub tych słonecznych lub ... w zależności od języka). Wskazówka jest w słowie standard, świat byłby o wiele łatwiejszym miejscem do kodowania, gdyby każda organizacja nie zdecydowała się napisać własnego. Kto naprawdę uważa, że uczenie się nowego zestawu "standardów" za każdym razem, gdy zmieniasz zespoły/projekty/role, jest dobrym wykorzystaniem czyjegoś czasu. Najbardziej powinieneś zrobić to podsumować punkty krytyczne, ale odradzam nawet to, bo co jest krytyczny różni się od osoby do osoby. Dwie inne kwestie, które chciałbym poruszyć na temat standardów kodowania

  1. Close is good enough - zmiana kodu zgodnie ze standardami kodowania na literę jest stratą czasu, dopóki kod jest wystarczająco blisko.
  2. jeśli zmieniasz kod, którego nie napisałeś, postępuj zgodnie z "lokalnymi standardami kodowania", tzn. spraw, aby nowy kod wyglądał jak kod otaczający.

Te dwa punkty są rzeczywistością na moje życzenie, aby każdy napisał kod, który wyglądał to samo.

 9
Author: David Hayes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 18:26:49

Poniższa dokumentacja okazała się bardzo pomocna i zwięzła. Pochodzi z idesign.net strona i jej autorem jest Juval lowy

C# Coding Standard

Uwaga: powyższy link nie działa. Aby dostać .plik zip musisz podać im swój adres e-mail (ale nie będą go używać do celów marketingowych... szczerze) spróbuj TUTAJ

 8
Author: Abel Gaxiola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-19 10:07:22

Właśnie zacząłem w miejscu, gdzie standardy kodowania nakazują użycie m_ dla zmiennych członkowskich, p_ dla parametrów i przedrostków dla typów, takich jak ' str ' dla ciągów. Więc możesz mieć coś takiego w ciele metody:

M_strName = p_strName;

Straszne. Naprawdę straszne.

 5
Author: demoncodemonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-26 12:21:54

Dodałbym Code Complete 2 do listy (wiem, że Jeff jest tu fanem)... Jeśli jesteś młodszym programistą, książka jest przydatna, aby skonfigurować swój umysł w sposób, który stanowi podstawę dla najlepszych praktyk pisania kodu i budowania oprogramowania.

Muszę powiedzieć, że doszedłem do tego trochę późno w mojej karierze, ale to rządzi wieloma sposobami, w jakie myślę o kodowaniu i tworzeniu frameworków w moim życiu zawodowym.

Warto sprawdzić;)

 5
Author: samiq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-24 20:17:28

Własne zasady Microsoftu to doskonały punkt wyjścia. Możesz je egzekwować za pomocą FxCop.

 4
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 17:41:00

Pokusiłbym się o wyegzekwowanie StyleCop Microsoftu jako standardu. Może być egzekwowane w czasie budowy. ale jeśli masz kod legacy to po prostu wymusić użycie StyleCop na nowym kodzie.

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

W końcu będzie miał opcję refactor do czyszczenia kodu.

Http://blogs.msdn.com/sourceanalysis/

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 04:11:46

Osobiście podoba mi się ten, który IDesign zebrał. Ale nie dlatego piszę posty...

Trudnym bitem w mojej firmie było wzięcie pod uwagę wszystkich różnych języków. I Wiem, że moja firma nie jest w tym osamotniona. Używamy C#, C, assembly( tworzymy urządzenia), SQL, XAML, itp. Chociaż będą pewne podobieństwa w standardach, każdy z nich jest zwykle traktowany inaczej.

Ponadto uważam, że wyższe standardy mają większy wpływ na jakość produkt końcowy. Na przykład: jak i kiedy używać komentarzy, kiedy wyjątki są obowiązkowe (np. zdarzenia inicjowane przez użytkownika), Czy (lub kiedy) używać wyjątków a wartości zwracane, jaki jest obiektywny sposób określenia, jaki powinien być Kod kontrolera a kod prezentacji, itd. Nie zrozum mnie źle, potrzebne są również standardy niskiego poziomu (formatowanie jest ważne dla czytelności!) Po prostu mam stronniczość w stosunku do ogólnej struktury.

Kolejnym elementem, o którym należy pamiętać, jest wpisowe i egzekwowanie. Kodowanie standardy są świetne. Ale jeśli nikt się z nimi nie zgadza i (co chyba ważniejsze) nikt ich nie egzekwuje, to wszystko na nic.

 4
Author: derGral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-23 06:56:23

Jak napisałem zarówno ten opublikowany dla Philips Medical Systems jak i ten na http://csharpguidelines.codeplex.com Mogę być nieco stronniczy, ale mam ponad 10 lat na pisanie, Konserwację i promowanie standardów kodowania. Próbowałem napisać jeden CodePlex z różnicami w opiniach i spędziłem większość wstępu na tym, jak sobie z tym poradzić w danej organizacji. Przeczytaj i przekaż mi opinie.....

 3
Author: Dennis Doomen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 21:06:04

Zasady SSW

Zawiera kilka standardów C# + dużo więcej.... przede wszystkim koncentruje się na programistach Microsoft

 2
Author: Adam Cogan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-11 10:51:51

Najprawdopodobniej zostaniesz ustawiony na porażkę. Witamy w branży.

Nie zgadzam się - tak długo, jak tworzy dokument, najgorsze, co może się zdarzyć, to to, że zostanie zapomniany przez wszystkich.

Jeśli inne osoby mają problemy z zawartością, możesz poprosić ich o aktualizację, aby pokazać, co wolą. W ten sposób to zniknie z twojego talerza, a inni mają obowiązek uzasadnić swoje zmiany.

 1
Author: Adam V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 18:21:47

Niedawno znalazłem Podręcznik Encodo C# , który zawiera pomysły z wielu innych źródeł (IDesign, Philips, MSDN).

Innym źródłem może być Professional C#/VB.NET Coding Guidelines .

 1
Author: alexandrul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-28 18:27:05

Jestem wielkim fanem Książki Francesco Baleny " praktyczne wskazówki i najlepsze praktyki dla programistów VB i C# ".

Jest bardzo szczegółowy i obejmuje wszystkie istotne tematy, nie tylko podaje regułę, ale także wyjaśnia przyczynę reguły, a nawet zapewnia anty-regułę, w której mogą istnieć dwa przeciwstawne najlepsze praktyki. Jedynym minusem jest to, że został napisany dla programistów. NET 1.1.

 1
Author: urini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 15:37:38

Nasz cały standard kodowania brzmi mniej więcej: "Użyj StyleCop."

 1
Author: John Kraft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-29 13:07:00
 1
Author: Pradeep Kumar Mishra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 21:07:51

Muszę zaproponować dotnetspider.com dokument.
Jest to świetny i szczegółowy dokument, który jest przydatny wszędzie.

 1
Author: the_drow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-02 13:07:08

Używałem już wcześniej Juvala i to już koniec, jeśli nie przesada, ale jestem leniwy i teraz po prostu podporządkowuję się woli Resharper.

 1
Author: kenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-20 15:34:46

Możesz sprawdzić to, Top 7 standardów kodowania i wytyczne dla programistów C#/. Net http://www.amazedsaint.com/2010/11/top-6-coding-standards-guideline.html hope this helps

 1
Author: Elaine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 02:52:47

Myślę, że powtórzę tutaj inne uwagi, że już połączone Przewodniki MS są doskonałym punktem wyjścia. Wzoruję mój kod głównie na nich.

Co jest ciekawe, bo mój manager w przeszłości mówił mi, że nie przepada za nimi :d

Masz przed sobą zabawne zadanie, przyjacielu. Powodzenia i proszę zapytać, czy potrzebujesz czegoś więcej:)

 0
Author: Rob Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-18 18:14:55

Standard firmy Philips Medical Systems jest dobrze napisany i w większości zgodny z wytycznymi Microsoftu: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

Moje standardy są oparte na tym z kilkoma poprawkami i kilkoma aktualizacjami dla. NET 2.0 (standard Philips jest napisany dla.NET 1.x więc jest trochę przestarzały).

 0
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 16:55:57
 0
Author: Kamran Shahid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 06:53:13

W kodzie, który piszę zazwyczaj podążam . NET Framework Design Guidelines for public exposed API and mono Coding Guidelines for private member casing and indentation. Mono to implementacja. NET o otwartym kodzie źródłowym i myślę, że ci faceci znają się na tym.

Nienawidzę tego, jak kod Microsoftu marnuje przestrzeń:

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

To, co może być dziwne w wytycznych Mono, to to, że używają 8-spacji. Jednak po kilku praktykach stwierdziłem, że faktycznie pomaga mi pisać mniej splątany kod, wymuszając rodzaj limitu wcięć.

Podoba mi się również, jak umieszczają spację przed otwarciem nawiasu.

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

Ale proszę, nie wymuszaj czegoś takiego, jeśli twoi współpracownicy tego nie lubią (chyba, że chcesz przyczynić się do Mono; -)

 0
Author: Dan Abramov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 07:13:54