Retour à la leçonMission
Mission : le routeur DSL qui perd une route en silence
Diagnostiquer un bug de chaînage dans un DSL de type builder et renforcer sa capacité d'inspection pour les game designers non-développeurs.
Contexte
Le studio a mis en place un DSL de routage façon builder pour ses game designers, mais un designer signale que sa route "POST /players" a disparu :
lua
local Router = {}
Router.__index = Router
function Router.new()
return setmetatable({ routes = {} }, Router)
end
function Router:get(path, handler)
table.insert(self.routes, { method = "GET", path = path, handler = handler })
-- oubli : pas de "return self" ici
end
function Router:post(path, handler)
table.insert(self.routes, { method = "POST", path = path, handler = handler })
return self
end
local router = Router.new()
:get("/players", function() end)
:post("/players", function() end) -- erreur: attempt to call a nil value (method 'post')Le designer ne comprend pas pourquoi enchaîner :post() juste après :get() fait planter le script.