Az osztályok használata túlbonyolított kód írására ösztönöz
Előszöris :D
Az osztályok használata túlbonyolított kód írására ösztönöz
Igen, ez tényleg így van. Erre azonban nem az a megoldás, hogy nem használjuk emiatt az osztályokat. Van egy olyan aranyszabály, hogy single responsibility principle, ami elég jól meghatározza, hogy egy-egy osztálynak mekkora lehet a hatóköre. Ha ezt a szabályt alkalmazzuk, akkor jó eséllyel elkerülhetjük az overengineeringet. Ami még nagyon sokat segített nekem ezzel kapcsolatban az a TDD. A TDD-nél magasabbról alacsonyabb absztrakciós szint felé haladva az SRP alapján osztjuk fel a kódot osztályokra, és írjuk meg ezeknek az osztályoknak a unit test-jeit. A TDD azért nagyon hatékony, mert előbb tesztet ír az ember, utána magát a kódot. Így nem fordulhat elő, hogy felesleges kód kerül a rendszerbe, és olyan dolgokkal foglalkozunk, ami a feladat szempontjából teljesen lényegtelen általános valami. Szóval a TDD nekem nagyon sokat segített az egy-egy problémára való fókuszálásban...
szerk:
Közben megnéztem, és többé-kevésbé egyet tudok érteni vele. De ez az egész inkább az overengineering-ről szól, és nem arról, hogy az osztályok rosszak lennének...
I hate code and I want as little of it as possible in our product.
The signature that this shouldn't be a class, is that it has two methods, one of which is __init__ [konstruktor]. Anytime you see that you should probably think: hey, maybe I just need the one method.
So anytime you see aliasing your classes to just instantiate them once, use them and then throw them away - in your brain you should be thinking: oh, I should refactor that, it can be simpler. Much simpler.
I don't know how many of you have CS [Computer Science] degrees, I have one, I learnt about separation of concerns, decoupling, encapsulation, implementation hiding. I haven't used those words in fifteen years, since I graduated. Anytime you hear someone using those words, they're trying to pull a fast one on you [át akarnak vágni]. It just doesn't come up. And even if it does come up, people mean different things when they use them, it's not useful for furthering conversation.
So, the overuse of classes: lots of times people think that they might need something later. You don't. Or you can just do it later.
d = MuffinMail.MuffinHash.MuffinHash(foo=3)
Some other signs that you don't need this: you have to type Muffin thee times. You're not helping anyone, you're making users angry.
Classes are great for things that classes are great for. So when you have a bundle of mutable data and a bunch of related functions that you want to use with that data, then yes, classes are the right thing to do.
[...]they're always operating on the same thing, which kind of implies: yes, this actually is a class.
Belenéztem a speaker egy találomra választott github repójának találomra választott fájljába (ez), kb. a harmada áll olyan osztályokból, amikben a konstruktoron kívül egy függvény van, vagy annyi se.
Konferencián trollkodni nyilván hálás dolog, mert annál többen fogják megosztani az előadást, minél provokatívabb. Amikor kódolni kell, akkor átkapcsol manikűr módba.
Belenéztem a speaker egy találomra választott github repójának találomra választott fájljába (ez), kb. a harmada áll olyan osztályokból, amikben a konstruktoron kívül egy függvény van, vagy annyi se
Már nem emlékszem teljesen a videora, de nekem nem tűnt úgy, hogy verné a mellét, hogy minde hülyék vagytok, bezzeg én. Egy szóval sem mondta, hogy ő ne követte volna el ugyanezeket a hibákat. De lehet én emlékszem rosszul...
Egyébként az egy osztály - egy metódus tényleg overengineering-re utaló jel lehet sok esetben, de azért nem mindben. Pl egy DTO-nál teljesen elfogadott, hogy csak adatküldő funkciója van az osztálynak, és nem igazán vannak benne metódusok...
A linkelt fájl a konferencia előtt készült, ráadásul az előadáson is saját kódon mutatja be, hogy mi a rossz. És nem hiszem, hogy trollkodott volna az illető, szerintem tudja, miről beszél, a python egyik core fejlesztője.
Kívánságműsor
Osztályok
A videónak nem én adtam a
Az osztályok használata
Előszöris :D
Igen, ez tényleg így van. Erre azonban nem az a megoldás, hogy nem használjuk emiatt az osztályokat. Van egy olyan aranyszabály, hogy single responsibility principle, ami elég jól meghatározza, hogy egy-egy osztálynak mekkora lehet a hatóköre. Ha ezt a szabályt alkalmazzuk, akkor jó eséllyel elkerülhetjük az overengineeringet. Ami még nagyon sokat segített nekem ezzel kapcsolatban az a TDD. A TDD-nél magasabbról alacsonyabb absztrakciós szint felé haladva az SRP alapján osztjuk fel a kódot osztályokra, és írjuk meg ezeknek az osztályoknak a unit test-jeit. A TDD azért nagyon hatékony, mert előbb tesztet ír az ember, utána magát a kódot. Így nem fordulhat elő, hogy felesleges kód kerül a rendszerbe, és olyan dolgokkal foglalkozunk, ami a feladat szempontjából teljesen lényegtelen általános valami. Szóval a TDD nekem nagyon sokat segített az egy-egy problémára való fókuszálásban...
szerk:
Közben megnéztem, és többé-kevésbé egyet tudok érteni vele. De ez az egész inkább az overengineering-ről szól, és nem arról, hogy az osztályok rosszak lennének...
Minden szava arany
d = MuffinMail.MuffinHash.MuffinHash(foo=3)
Arany bizony
Belenéztem a speaker egy
Konferencián trollkodni nyilván hálás dolog, mert annál többen fogják megosztani az előadást, minél provokatívabb. Amikor kódolni kell, akkor átkapcsol manikűr módba.
Belenéztem a speaker egy
Már nem emlékszem teljesen a videora, de nekem nem tűnt úgy, hogy verné a mellét, hogy minde hülyék vagytok, bezzeg én. Egy szóval sem mondta, hogy ő ne követte volna el ugyanezeket a hibákat. De lehet én emlékszem rosszul...
Egyébként az egy osztály - egy metódus tényleg overengineering-re utaló jel lehet sok esetben, de azért nem mindben. Pl egy DTO-nál teljesen elfogadott, hogy csak adatküldő funkciója van az osztálynak, és nem igazán vannak benne metódusok...
A linkelt fájl a konferencia
És nem hiszem, hogy
Lehet olyat mondani, hogy építő jelleggel trollkodott? :D Lehet, hogy ez ütközik a trollkodás definíciójával, de tényleg ilyen jellegű az előadása...
Miért?
A hangosan felröhögés a
Senki sem tökéletes. Nekem
a tultervezesrol es YAGNIrol