Czy klasy, wyliczenia i inne byty powinny być umieszczone w osobnych plikach?

12

Wiodący \ architekt zespołu mojej firmy twierdzi, że projekt na dużą skalę jest łatwiejszy do zrozumienia, jeśli „podmioty połączone logiką” zostaną umieszczone w jednym pliku .cs.

Cytuję:

  • „Całą strukturę logiki, interfejsu i klasy można zobaczyć w jednym miejscu, jest to argument, którego nie można obalić. Aby zobaczyć to samo, ale z mnóstwem plików musisz użyć narzędzi, klasy schemat, R # do nawigacji itp. ”

  • „Zgodnie z kiepską teorią mogę krzyczeć, że armia oddzielnych plików jest fajna, ale jeśli chodzi o dokonywanie zmian w istniejącym kodzie, szczególnie jeśli nie byłeś autorem tego kodu, bardzo trudno jest zrozumieć wiele rozproszonych plików. Na forach możesz więc napisać „jeden plik enum- jeden”, ale w praktyce nigdy nie należy stosować tego podejścia ”

  • „... Jeśli chodzi o rozdzielenie bazy kodu między programistami, w dzisiejszych czasach nie jest problemem edytować jednocześnie ten sam plik. Scalenie nie stanowi problemu”.

Wiele razy słyszałem i czytałem, że musimy utworzyć jeden plik .cs na wyliczenie, klasę itd. I jest to najlepsza praktyka.

Ale nie mogę go przekonać. Mówi, że nie ufa żadnym znanym programistom, takim jak Jon Skeet. Nawiasem mówiąc, tutaj jest opinia Skeeta na ten temat: Gdzie jest najlepsze miejsce do zlokalizowania typów enum?

Co myślisz? Czy istnieje prawdziwy problem? Czy jest to kwestia gustu i powinna być regulowana standardem kodowania organizacji?

EngineerSpock
źródło
Nie możesz wygrać wszystkich, nawet jeśli zagrasz kartą Skeet.
JeffO
6
Szczerze mówiąc, twierdzenie, że sława Jona Skeeta nie jest doskonałym rzemieślnikiem kodu, jest chętne i zdolne do szybkiego i dokładnego odpowiadania na pytania w języku C # (i dosłownie napisał książkę). I prawdopodobnie nigdy nie śpię, choć to tylko plotka. Sama jego opinia na ten temat nie powinna wystarczyć, a jego argumentacja nie jest mocna. To nie znaczy, że się myli w tym przypadku, mówię tylko, że twój senior ma prawo powiedzieć „przyjdź do mnie z faktami i powodami, a nie opiniami”.
pdr
2
Głosuję na jedną klasę na plik, a wszelkie wyliczenia lub interfejsy, które są istotne tylko dla tej klasy, powinny znajdować się w klasie, a nie tylko w pliku. Z drugiej strony powinieneś postępować zgodnie z firmowym standardem kodowania, bez względu na to, jak nieuzasadniony może być, ponieważ jest to część pisania dobrego kodu do swojej pracy .
Bobson,
2
Można zauważyć, że StyleCop jako wtyczka Visual Studio ma ostrzeżenia, jeśli istnieje> 1 klasa na plik
Kevin

Odpowiedzi:

20

W argumencie lidera zespołu jest kilka wad:

  1. Dobrze zaprojektowane klasy i wyliczenia są przeznaczone do użycia w dowolnym miejscu projektu, nie tylko tam, gdzie mogą mieć sens logiczny.

  2. Klasy i wyliczenia, które są odpowiednio udokumentowane komentarzami XML, są bardzo samoopisujące, po prostu najeżdżając kursorem na element, do którego się odnoszą.

  3. Zawsze możesz przejść do definicji klasy lub wyliczenia, klikając odnośnik prawym przyciskiem myszy i wybierając „Idź do definicji”, więc tak naprawdę nie powinno mieć znaczenia, gdzie go umieścisz.

  4. Układanie obiektów w „logiczny” sposób jest arbitralne (tzn. Musisz pomyśleć o tym, co oznacza „logiczny”. Wolałbym spędzić te cykle zegara na programowaniu).

Ustawienie każdej definicji obiektu we własnym pliku stwarza jednolite, zdyscyplinowane oczekiwania dotyczące organizacji i struktury i nie rodzi pytań typu „dlaczego to tutaj?”. To bardzo miło mieć.

Jeśli dwa lub więcej obiektów są logicznie powiązane, po prostu umieść je w swoim folderze w Eksploratorze projektów.

Robert Harvey
źródło
5
Z drugiej strony, kod łączy ssanie. Jasne, możesz to zrobić, ale dlaczego, jeśli nie musisz?
Robert Harvey
4

Najprawdopodobniej prowadzący zespół obciął zęby we wcześniejszej erze, gdy kliknięcie prawym przyciskiem myszy i wybranie „przejdź do definicji” nie było opcją. Wiem, że kiedy jestem w trybie programowania z dużymi skokami, będę rozwijał całkiem masywne pliki klas, dopóki nie pozwolę, aby resharper je naprawił.

W każdym razie, jeśli chcesz doprowadzić zespół do zadania, spytaj go, dlaczego te klasy i wyliczenia nie są klasami i wyliczeniami podrzędnymi - nie ma powodu, aby zadeklarować je jako niezależne byty, jeśli są naprawdę zależnymi bytami. To może mu pomóc przemyśleć fatwę.

Wyatt Barnett
źródło