Habitués du BreizhCamp, cette année, nous avons eu l’occasion de participer à l’événement français incontournable pour les développeurs passionnés de nouvelles technologies et d’innovation : le Devoxx Paris.
Près de 3000 participants ont assisté aux 200 conférences programmées lors de cette édition. Poulpi a été représenté par nos envoyés spéciaux, Yoann & Mathieu. Dans cet article, ils partageront leur expérience et les tendances qui ont marqué cette édition 2023.
Mercredi
Rendons le DDD aux devs
Au cours de cette “University”, Dorra Bartaguiz et Arnaud Thiefaine nous proposent de refactoriser pas à pas une fonction en appliquant, à chaque étape, les principes du Domain-Driven Design (DDD). Afin d’effectuer ce refactoring en toute sécurité, nous nous appuyons sur des tests “golden master” qui garantissent que notre ancien code et notre nouveau code remplissent toujours la même fonction métier. Ensuite, le point d’entrée pour commencer le refactor est d’identifier les code smells.
Un point important du DDD, bien qu’il paraisse évident lorsqu’on le mentionne, est que les développeurs doivent comprendre le métier et identifier les termes métier. Un exercice possible est l’“Event Storming”, où les développeurs et les product owners se rassemblent pour expliquer le métier et en extraire les différents domaines.
Comprendre et utiliser les modèles de langage d’IA
Cette session sur les modèles de langage IA de Sébastien Collet est complétement ancrée dans l’air du temps.
En effet, ces presque 3 heures de conférences ont permis de balayer l’historique de la création et l’émergence des réseaux de neurones, à la révolution actuelle annoncée par ChatGPT et consorts. Outre le fait que cette conférence était très accessible (oui sans mathématiques appliquées :D ), c’était l’occasion de bien comprendre d’où l’on vient, de prendre conscience des contraintes de budgets induites par une solution basée sur l’IA puis entrevoir le futur de ces solutions.
Jeudi
Fun(ctional) Domain Driven Design (featuring Ukulele)
Cette conférence de Jérémie Chassaing était plutôt atypique pour plusieurs raisons. Tout d’abord, le live coding se faisait en F#, ce qui rendait la compréhension du live coding nettement plus difficile. De plus, la connaissance du métier était plus aisée pour ceux ayant déjà quelques années de solfège derrière eux, ce qui n’est pas le cas de tout le monde.
Malgré cette barrière à l’entrée que l’intervenant tentait de réduire en offrant un rapide cours de solfège, en persévérant un peu, nous avons eu droit à une belle démonstration de construction d’un DSL de musique permettant d’apprendre le ukulélé en mode Domain-Driven Design.
Revisiting Design Patterns after 20
Quoi de mieux qu’un jeudi après-midi pour parler Design Patterns et Gang of Four ?
Edson Yanaga, Java Champion & speaker régulier sur ces sujets, nous a proposé, durant 45min, sa vision des implémentations des designs patterns les plus courants comme Strategy, Template Method, Visitor, Command, Decorator ou encore Builder en utilisant les dernières fonctionnalités des version 8 à 20 de Java. L’objectif, rendre le code plus simple, lisible, fonctionnel grâce notamment aux lambdas ou encore sealed classes.
Vendredi
Bootiful Spring Boot 3
Entre conférence et one-man-show, Josh Long nous offre une performance à la fois divertissante et instructive, en réalisant un live coding qui met en avant les nouvelles fonctionnalités de Spring 6 et Spring Boot 3.
Il présente la classe ProblemDetail qui représente une erreur HTTP, que l’on utilisera dans nos @ExceptionHandler. Cette nouvelle classe implémente le standard introduit en 2016 dans ce document par la Internet Engineering Task Force (IETF). Voici comment l’utiliser simplement :
@ExceptionHandler
fun handleNotFoundException(exception: EntityNotFoundException): ProblemDetail {
return ProblemDetail.forStatus(HttpStatus.NOT_FOUND).apply {
detail = exception.message
}
}
ce qui donne cette réponse standardisé :
GET http://localhost:8080/todos/2efd7405-27c4-4c63-861b-22ee2a4da746
HTTP/1.1 404
Content-Type: application/problem+json
Transfer-Encoding: chunked
Date: Thu, 27 Apr 2023 12:07:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "Todo with id [2efd7405-27c4-4c63-861b-22ee2a4da746] doesn't exist",
"instance": "/todos/2efd7405-27c4-4c63-861b-22ee2a4da746"
}
Spring 6 introduit également les clients HTTP déclaratifs. La notation ressemble beaucoup à celle du @RestController que nous connaissons déjà, mais sert cette fois-ci à créer un client. Nous avons à notre disposition l’annotation @HttpExchange("/posts") qui permet de définir un chemin de base pour notre client, ainsi que des annotations pour chaque opération HTTP :
- @GetExchange
- @PostExchange
- @PutExchange
- @PatchExchange
- @DelectExchange
On configure notre client comme ceci en Kotlin :
@Configuration
class ClientConfig {
@Bean
fun jsonPlacehoderClient(builder: WebClient.Builder): JsonPlaceholderClient {
return HttpServiceProxyFactory.builder().clientAdapter(
WebClientAdapter.forClient(
builder.baseUrl("https://jsonplaceholder.typicode.com").build()
)
).build().createClient(JsonPlaceholderClient::class.java)
}
}
data class Post(
val id: Long,
val title: String,
val body: String,
val userId: Long,
)
data class ApiCreatePost(
val title: String,
val body: String,
val userId: Long,
)
@HttpExchange("/posts")
interface JsonPlaceholderClient {
@GetExchange
fun getPosts(): List<Post>
@GetExchange("/{id}")
fun getPost(@PathVariable id: Long): Post
@PostExchange
fun addPost(@RequestBody post: ApiCreatePost): Post
}
Il aborde également d’autres sujets tels que les contrôleurs GraphQL et GraalVM. Si vous souhaitez obtenir plus de détails, je vous invite à regarder la rediffusion de la conférence.
Virtual Threads power with Helidon Nima
Vous connaissez Quarkus ? Micronaut ? Découvrez Helidon!
Helidon est un autre framework Java qui cible le cloud-native et c’est son créateur, Dmitry Aleksandrov qui nous le présente. Ses promesses ?
- Une implémentation complète de la spécification MicroProfile
- 2 modes pour deux DX : une version classique native ultra légère (Helidon MP) et une version réactive non bloquante (Helidon SE)
Evidemment, Helidon supporte nativement GraalVM et se targue (contrairement à spring-native) d’avoir des binaires plus légers que ceux de Pivotal.
Mais ce n’est pas tout ! Helidon, dans sa version 4 (actuellement en alpha) est le premier framework qui se base entièrement sur les fameux Virtual Threads de Loom… affaire à suivre !
Conclusion
Comme vous avez pu le voir, revenir du Devoxx c’est avoir plein d’idées en tête, plein de nouveaux outils et méthodes à essayer ou mettre en application sur nos missions. Et rien que pour ça, cette édition 2023 fut une réussite !
Toutes les vidéos sont d’ores et déjà disponibles sur : https://www.youtube.com/@DevoxxFRvideos/playlists