clean code refactoring design best practices java software craftsmanship design patterns unit test architecture tdd spring functional programming evolutionary architecture extreme programming lambda microservices onion architecture mock java 8 training spring framework performance tips single-responsibility principle pure functions pragmatic design tuning jvm profiling code smells unit testing modules learning agile culture ethics integration tests exceptions dependency inversion principle test driven development jpa devoxx live coding simple code stream api uncle bob rest distributed systems timeout retry circuit breaker resilience consistency testing pitfalls spring webflux project reactor reactive programming insights java flight recorder websso oauth2 social login threats security oauth monolith professional philosophy hibernate aspect oriented programming software development software testing immutable objects professional development engagement online teaching webinar behaviour-driven-development cucumber mutation testing agile software development programming rename inline object-oriented programming feature envy emerging angular javascript promise callback asynchronous frontend typescript decorator aop conclusions hands-on entity adapter pattern separation by layer of abstraction simplicity transaction propagation dependency injection transactions declarative transaction aspect java8 passing a block template method elegant code craftsman conference barcelona enterprise development voxxeddays workshop slides pragmatic java enterprise
Tout plus