我正在开发一个小型 Ring/Compojure 网络应用程序,想知道是否有一种方法可以简化路由。我正在使用标准的 Clojure 解构方式,但需要向函数传递相当多的参数。
这是可以的,使用 Compojure 特定的解构方式:
(POST "/login/" [email password] (login-post email password)) ; handle login attempt
现在情况开始变得更加糟糕。我需要让函数同时接收存储在会话中的闪存消息和电子邮件:
(GET "/login/" {flash :flash {email :email} :session} (login-get flash email))
以下是通过表单提交数据的路由:
(POST "/" {{user-email :user-email} :session {title :title} :params {tags :tags} :params { content :content } :params { privacy :privacy } :params} (home-post user-email title tags content privacy))
我知道可以使用“:params”将原始请求发送到home-post函数,但是我认为将参数提取与路由放在一起更好。这使得home-post更加纯净,更易于测试。而不是将每个函数都提供一个巨大的请求映射。
在路由定义中解构是否可以更清晰(更易读),例如使用某种从地图中提取的函数、宏等?
将解构与路由放置的利弊是什么?