130 likes | 280 Views
Konsten att skriva bra återanvändbar kod. Pierre Setteskog , Pontus Munck 2012-06-08. Innehåll. Syfte / bakgrund Grundregler och designmönster Domändriven design Anti- patterns Guidelines Testdriven utveckling Diskussion. Syfte. Enkelt att underhålla Smidigt att vidareutveckla
E N D
Konstenattskriva bra återanvändbarkod Pierre Setteskog, Pontus Munck 2012-06-08
Innehåll Syfte/bakgrund Grundregler och designmönster Domändriven design Anti-patterns Guidelines Testdriven utveckling Diskussion
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.
Lär dig ditt verktyg! • Resharper,Productivity Power Tools,.NetReflector
Lär dig ditt verktyg! • Kör mot debug kompilerat, inkludera .pdb och peka ut källfilerna.
Grundregler • SOLID • Design patterns / Anti-patterns • KISS DRY YAGNI • Böcker • Refactoring – Martin Fowler • Clean Code – Robert C Martin • Autofaceller 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,CacheDecorate klass. • Func<MyModel> (Funkar inte automatiskt i gammal autofac) • Lazy<MyVierdService> (Funkar inte i gamla Autofac) • IEnumerable<ResolveTags> IEnumerable<ApplicationStart> (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