KONSTEN ATT SKRIVA BRA ÅTERANVÄNDBAR KOD Pierre Setteskog, Pontus Munck
Syfte/bakgrund Grundregler och designmönster Domändriven design Anti-patterns Guidelines Testdriven utveckling Diskussion INNEHÅLL
Syfte Enkelt att underhålla Smidigt att vidareutveckla Minimera buggar vid ny funktionalitet Förenkla enhetstestning Varför: I tider då kunder kräver mer och mer och ren produkt utveckling ibland kan bli för kostsam och tom Alphalib. Hinder: Plattform,kunskap, invanda företags mönster,roller. När skall man skriva återanvändbar kod.
Lär dig ditt verktyg! Resharper,Productivity Power Tools,.Net Reflector
Lär dig ditt verktyg! Kör mot debug kompilerat, inkludera.pdb och peka ut källfilerna.
Lär dig ditt verktyg!
Grundregler SOLID Design patterns / Anti-patterns KISS DRY YAGNI Böcker –Refactoring – Martin Fowler –Clean Code – Robert C Martin Autofac eller DI tänk ”If its not broken dont fix” it” vs Write once read many”
SOLID Single responsibility principle Open/Closed principle Liskov substitution principle Interface segregation principle Dependency inversion principle
Autofac Ta in alla externa beroenden genom konstruktorn. (Förutom string ) Registrera interface,abstrakt klass, klass, mest ärvda klass osv i uppstart. Autoregistrering,Multitenanty,Cache Decorate klass. Func (Funkar inte automatiskt i gammal autofac) Lazy (Funkar inte i gamla Autofac) IEnumerable IEnumerable (Kräver att man registrerar builder.RegisterModule(new ImplicitCollectionSupportModule());)
Domändriven design Koncept –Domain model (POCO) Entity, Value object, Aggregate –Service Hanterar operationer ”utanför” domänen –Repository Hanterar lagring av modellen –Factory Affärslogik – ändras sällan Infrastruktur – ändras oftare Rekommenderad bok –Eric Evans – Domain Driven Design
Anti-patterns Vanligt förekommande –Hardcoding –Magic numbers –Spaghetti code God object / Monster object Singleton object (statisk klass)
Guidelines Använd komposition istället för arv Undvik statiska klasser Hollywood principle –Don’t call the container, it will call you! Lägg inte alla knivarna i ett fack och alla gafflarna i ett annat. Dokumentera på fågelperspektiv nivå och kluriga delar. Försök göra så mycket som möjligt med så lite kod som möjligt och skriv tydlig kod Refaktorera
Testdriven utveckling Enklare + snabbare utveckling / test Möjliggör säker refactoring Specifikation + verifikation API design Dokumentation + exempelkod