Diskuze: Static vs instance
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Statiku používej jen v nejnutnějších případech. Skoro všechno se dá vyřešit bez statiky.
Ja pouzivam jen v pripade "rychlych" nastroju kde neni zapotrebi vytvaret celou instanci. Napriklad mam program pro praci s jednim HW, ze ktereho doluju data pomoci SNMP protokolu. Trida implementuje SNMP + OID. Kdyz potrebuju dostat napriklad teplotu tak je zbytecne vytvaret instanci tridy - zavolam jen statikckou metodu.
Neposlouchej nikoho, kdo ti bude tvrdit bez podrobnosti, ze nemáš používat statiku, nebo ji mas používat pouze v nejnutnejsich případech, takový člověk je pravdepodobne svázány OOP dogmaty, což je v tak skvělém multiparadigmatickem jazyku jako je c# velká škoda.
Statické metody jsou dobré, umožňují ti využít naplno funkcionální přístup tam kde se hodí a je to vesměs jediná možnost jak udělat skutečně správně a efektivnine doménový DAL. Statické metody ti obzvláště ve formě extension methods dávají ohromnou moc.
A právě proto, že statika dává ohromnou moc, by se měla využívat jen tam, kde je to nutné. Při neopatrném použití se programátor dostane do "sjaček" poměrně rychle a dost blbě se pak z toho bude dostávat...
Statika je skvělá třeba na helper metody, třeba když potřebuješ v
celé aplikaci specificky formátovat datum a pod.
Myslím, že obecně se dá říct, že se dá v pohodě používat na menší
pomocné celky bez závislostí.
Rozhodně není dobrý nápad ji používat na struktury, co uchovávají
nějaká data.
Bože, jak můžete říkat takové hlouposti. Hrajete si tu na SW architekty a DDD a stejně 95% vas ma v projektu Servisy, genericky repositare a service-locator UOW z anemickeho modelu... Tak jen pro informaci, právě ty metody z tech vašich service, jsou vhodné pro to existovat jako nějaká statická metoda. Třeba klidně jako extension metoda.
Mimochodem jeste jedna věc.. V clean codeu jdou třeba ještě tak daleko, ze mutace jsou jen statické metody, proto aby to byly pure metody..
Jak bys tedy řešil zmenšování obrázků a jeho ukládání, nebo třeba že zadaných hodnot vypočítání nějaké číslo. Metody by byly statické, nebo objektové?
Neočekáváš, že ti dám univerzální odpověď, že ne?
Třeba pokud by šlo o nějaký SW zaměřený na matematiku, třeba nějaký renderer, 2D/3D grafika, tak bych šáhnul po operátoru..
U matematických operací je to jednoduché, protože máš VŽDY 2 immutable hodnoty a vzniká ti 3. nová immutable hodnota.. nic bys nikdy neměl měnit, takže nějaká statická metoda je u matematických operací poměrně jasná volba a je jedno jestli je to klasická statická metoda, nebo třeba operátor.
klasické použití.-. vynásobení nějakého vektoru číslem atd..
C# má statické metody nad Math třeba pro různé matematické výpočty...
Pro zmenšování, zvětšování obrázků, opět zase nějaké statické metody na třídě Image2D atd.
Ono.. statické metodě předáš instanci v prvním parametru,,.. instanční metodě, se předá ta reference na instanci v prvním hidden parametru také.
je to rozhodně případ od případu a nikdo ti nedá jasný návod "používej tento přístup, nebo tento". neomezuj se, pokud nemusíš.
Zobrazeno 10 zpráv z 10.