it-swarm-eu.dev

Kolik řádků na třídu je v Javě příliš mnoho?

Jaké je podle vašeho názoru užitečné pravidlo, kolik řádků kódu je pro jednu třídu Java příliš mnoho?

Jasně vím, že počet řádků není ani blízko skutečnému standardu, který by se měl použít pro to, co by mělo být v konkrétní třídě a co by nemělo. Třídy by měly být navrženy v souladu s řádnými OOP filosofiemi (zapouzdření atd.). To znamená, že pravidlo může poskytnout užitečný výchozí bod pro refaktoringové úvahy (tj. „Hmmm, tato třída má> n řádků kódu; je to pravděpodobně nečitelné a dělá mizernou práci zapouzdření, takže bych mohl chtít zjistit, jestli by se měl v určitém okamžiku refaktorizovat “).

Na druhou stranu jste se možná setkali s příklady velmi velkých tříd, které stále poslouchaly OOP design dobře a byly čitelné a udržitelné i přes svou délku?

Zde je související, neduplikovaný otázka o řádcích na funkci .

76
Michael McGowan

Některé zajímavé metriky:

 junit fitness testNG tam jdepend mravenec Tomcat 
 ----- -------- ------ --- ------- --- - ----- 
 max. 500 498 1450 355 668 2168 5457 
 průměr 64,0 77,6 62,7 95,3 128,8 215,9 261,6 [. 75 76 110 78 129 261 369 
 Soubory 90 632 1152 69 55 954 1468 
 Celkový počet řádků 5756 49063 72273 6575 7085 206001 384026 

FitNesse používám jako měřítko, protože jsem měl hodně co do činění s jeho napsáním. V FitNesse je průměrná třída 77 řádků dlouhá. Žádné nejsou delší než 498 řádků. A standardní odchylka je 76 řádků. To znamená, že drtivá většina tříd má méně než 150 řádků. Dokonce i Tomcat, který má jednu třídu nad 5000 řádků, má většinu tříd méně než 500 řádků.

Vzhledem k tomu můžeme pravděpodobně použít 200 řádků jako dobrý návod, jak zůstat pod.

80
Uncle Bob.

Řádky kódu jsou pro mě v tomto kontextu irelevantní. Je to všechno o počtu různých důvodů, proč jsem přišel do této třídy, abych to změnil.

Kdybych přišel do této třídy, když chci změnit pravidla pro ověření osoby, nechci přijít do stejné třídy, abych změnil pravidla pro ověření objednávky, ani nechci přijít sem, abych změnil kde vytrvat v osobě.

To znamená, že pokud to zacílíte, najdete třídy zřídka více než 200 řádků. Stanou se z platných důvodů, ale budou vzácné. Pokud tedy hledáte metriku s červenou vlajkou, není to špatné místo pro začátek; ale učinit z něj vodítko, nikoli pravidlo.

32
pdr

Je mi líto, ale velmi mě překvapuje, že mnoho odpovědí uvádí, že „na tom opravdu nezáleží“. Je velmi důležité, kolik řádků je ve třídě. Proč? Zvažte tyto zásady při psaní dobrého Java kód ...

  • Testovatelnost
  • Soudržnost
  • Spojování
  • Porozumění

Třídy se spoustou řádků v nich pravděpodobně všechny tyto zásady poruší.

Pro ty, kteří prohlásili, že „na tom opravdu nezáleží“ ..., jak zábavné pro vás bylo vyzkoušet a pochopit třídu, která v ní obsahuje více než 5000 řádků? Nebo ji upravit? Když řeknete, že je to zábava, máte zvláštní bolest k bolesti ...

Řekl bych, že by měla mít každá třída, která v ní má více než 1000 řádků alespoň být zpochybňován, jak mohou porušovat výše uvedené zásady a případně rozebrat do několika „off-shoot“ tříd.

Moje komentáře vycházejí ze čtení a studia takových autorů, jako jsou Martin Fowler, Joshua Bloch a Misko Hevery. Jsou to vynikající zdroje, které lze konzultovat při psaní dobrého kódu Java).

Udělejte příštímu chlapi (kterým byste mohli být za pár let) laskavost a snažte se psát třídy, které v nich mají méně než více řádků.

24
Zack Macomber

Závisí to na složitosti, ne na počtu řádků. Napsal jsem velké hloupé rutiny, které byly snadno srozumitelné a které dělaly přesně jednu věc a udělaly to dobře, ale pokračovaly stovky řádků. Napsal jsem poměrně krátké funkce, které bylo těžké pochopit (a ladit).

Další věc, na kterou byste se mohli podívat, je počet veřejných funkcí ve třídě. To může být také varovným signálem.

Nemám k dispozici dobré počty, ale navrhl bych podívat se na nějaký slušný kód, který ve vašem obchodě dělá užitečné věci, a založit to na tom. Určitě byste se měli podívat na nejdelší třídy a největší API.

12
David Thornley

Správná odpověď je 42. Jen si dělám srandu.
Ve skutečnosti je maximální doporučený řádek ve třídě 2000 linky.

„Konvence Java Code“ od roku 1999 to uvedly takto:
Soubory delší než 2000 řádků jsou těžkopádné a je třeba se jim vyhnout.

Po dodržení konvencí Sun/Oracle Coding od chvíle, kdy byl vynalezen Java), jsem shledal toto pravidlo palce na řádcích za třídu přiměřené. 99% vašich Java = Kód by měl odpovídat ... A pokud to přesáhne 2000, stačí dát TODO na vrchol a říci, že třída potřebuje práci.

Nejhorší je opačný případ, kdy programátoři vytvářejí příliš mnoho malých tříd s téměř žádnou skutečnou funkčností v každé třídě. Ignorují-li doporučení pro „Složení favoritů“, programátoři vytvářejí stovky zděděných tříd, které vytvářejí komplikované objektové modely, které jsou mnohem horší než problém velké třídy (které alespoň obvykle udržují funkčnost s příslušným názvem třídy).

http://www.Oracle.com/technetwork/Java/javase/documentation/codeconventions-141855.html#304

5
user1865223

Pokud třída dělá příliš mnoho různých věcí, existuje příliš mnoho řádků kódu. V zásadě platí, že pokud budete dodržovat zásadu jednotné odpovědnosti pro třídy, existuje omezení, jak velká třída poroste.

Pokud jde o fyzická omezení, která můžete mít (zdroj: formát souboru třídy Java5 ):

  • 65 536 konstant, použitá rozhraní, pole, metody a atributy - každá. Poznámka: vám dojde nedostatek místa, než vám dojde jakékoli ostatních položek. POZNÁMKA 2: atributy jsou konstrukty souborů třídy - neměly by být zaměňovány se značkami „@ atribut“ (tj. Informace o ladění a bajtový kód jsou uloženy jako samostatné atributy pro metodu).
  • Každá metoda může být 4 GB (32 bitů) vygenerovaného bajtového kódu. POZNÁMKA: Java verze před verzí 1.5 může mít pro každou metodu pouze 64 kB (16 bitů) vygenerovaného bajtového kódu.

Stručně řečeno, soubor třídy může být mnohem větší, než by kdokoli považoval za užitečné. Pokud se budete držet zásady jednotné odpovědnosti, vaše soubory třídy budou mít správnou velikost.

5
Berin Loritsch

Čistý kód:

Třídy by měly být malé!

První pravidlo tříd je, že by měly být malé. Druhým pravidlem tříd je, že by měly být menší než tohle. Ne, nebudeme opakovat přesně stejný text z kapitoly Funkce. Ale stejně jako u funkcí je menší pravidlo při navrhování tříd. Stejně jako u funkcí je naší okamžitou otázkou vždy „Jak malé?“

** Pomocí funkcí jsme změřili velikost počítáním fyzických řádků. U tříd používáme jiné měřítko. Počítáme odpovědnosti. **

Název třídy by měl popisovat, jaké povinnosti plní. Ve skutečnosti je pojmenování pravděpodobně prvním způsobem, jak pomoci určit velikost třídy. Pokud nemůžeme odvodit stručné jméno pro třídu, pak je to pravděpodobně příliš velké. Čím nejednoznačnější název třídy, tím je pravděpodobnější, že má příliš mnoho povinností. Například názvy tříd včetně slov lasička jako Procesor nebo Manažer nebo Super často naznačují nešťastnou agregaci odpovědností.

Pak:

  • Jen se ujistěte, že vaše metody dělají pouze jednu věc.
  • Pak se ujistěte, že třída nemá příliš mnoho odpovědností.

Skončíte s třídou zvládnutelné velikosti.

4
Tulains Córdova

Zkuste použít lepší metriku.

Jedním příkladem je metrika ABC. Je to spíše míra toho, kolik práce se kódem děje, než kolik je kódu.

2
sylvanaar

Počet řádků je velmi špatnou metrikou kvality třídy. Pro mě se ráda podívám (jak již zmínili ostatní) na veřejné metody a také na všechny veřejně exponované vlastnosti (myslím, že v Javě jsou veřejné getery/setters). Kdybych musel vytáhnout číslo ze vzduchu, kdy by to mohlo upoutat mou pozornost, řekl bych, když jich je více než 10. Opravdu, je-li jeho více než asi 5 buď vlastností nebo metod, podívám se a často najdu způsoby, jak refactor, ale cokoli přes 10 je obvykle varovným signálem, že něco je docela pravděpodobně špatně vystaveno.

Je to další konverzace úplně, ale soukromé metody a pole pro mě nejsou menší vůně, takže pokud hodně přispívají k počtu řádků, nemusím se tak bát. Přinejmenším to ukazuje, že pravděpodobně neexistuje nějaký božský vládce, který by manipuloval s objektem z dálky, což je docela problém s návrhem problému.

2

Jakýkoli řádek, který spadá do problémové domény vaší třídy psaný mimo třídu, je jeden řádek příliš málo a jeden příliš mnoho ve třídě, kde žije. Představte si třídu jako téma. Musíte to zakrýt. Pokud možno stručně, je to ideální, ale pokud má 500 řádků, trvá 500 řádků. Pokud 100 z těchto řádků pokrývá jiné téma, patří někde jinde. Rozdělení do menších subdomén v rámci třídy, protože třídy interiéru dává smysl, ale ty, které byly mimo třídu, bych definoval, pouze pokud by je použily jinde.

1
Erik Reppen