在Clojure中,我们一次又一次地使用相同的数据结构,并在其上运行许多函数。另一方面,Java程序员为每一组数据创建一个唯一的类,并使用自己的“API”(getter、setter、return type等)来访问和操作数据。由于被迫在两个这样的“类API”之间进行翻译,我想与大家分享我的经验,从而在实践中证明格言中的真理
请注意,本文谈论的是数据和数据承载类,而不是“业务逻辑”,它将由Java中所述对象上的方法和Clojure中命名空间中的函数(最好是纯函数)实现。
注意:本文会交替使用Java和Groovy,因为它们基本相同;本文所说的一个也适用于另一个。
问题所在
我一直在写一个代理,接收 javax.servlet.http.HttpServletRequest 并通过 Apache HttpClient 的 org.apache.http.client.methods.HttpUriRequest ,然后从 org.apache.http.HttpResponse 到 javax.servlet.http.HttpServletResponse ,尤其是关于(一个子集)头的响应。
这是一件痛苦的事,因为每个人都有自己的头表示和使用 headers 的API:
// javax.servlet.http.HttpServletRequest:
Enumeration<String> getHeaderNames();
/** Returns all the values of the specified request
header as an Enumeration of String objects. */
Enumeration<String> getHeaders(String name);
// org.apache.http.client.methods.RequestBuilder:
/** Add a header; repeat to add multiple values */
RequestBuilder addHeader(String name, String value);
//-------------
// javax.servlet.http.HttpServletResponse:
/** Add a header; repeat to add multiple values */
void addHeader(String name, String value);
// org.apache.http.HttpResponse:
Header[] getAllHeaders();
// Header:
String getName();
338



被折叠的 条评论
为什么被折叠?



