高阶编程
探索基于数组和集合的流水线技术
探索基于数组和集合的流水线技术
一种反模式?
这是一次关于将所有内容编码为数组所能获得优势的探索。(借鉴SmallTalk的数组中心概念)
以下是一些指导原则:
-
所有输入都应视为类数组结构。即使数组长度为1。
-
高阶函数通常应同时接受并返回数组。(循环的回调方法除外:map/reduce/each/filter)
-
99%的开发者代码都患有我称之为
急性模式过剩综合症的疾病。 -
警惕臃肿的
类支撑模型——伴随着所有可预测的特征:脆弱的实例状态,有太多可调节的参数和开关,数据库事务、SQL锁、异步/互斥(总能第一次就完美运行),使用惯用的属性获取器/设置器,而你的public/private/final/等使用方式绝对正确,对吧? -
让我用一个常见问题来演示,并
添加一些基于集合的思考。 -
一个假设的博客网站有许多文章,还有更多的帖子(评论)。
-
我们添加一个
delete方法(如下)——同时支持单个或数组输入。
package net.danlevy.why.java___why.you.got.all.the.dots____it.must.be.all.the.factories;
public class Post { public String title; public Date created; public String message;
public Post(String title, String message) { this.title = title; this.message = message; this.created = new Date(); }
public Date isArchived() { return this.created < new Date(2015, 0, 1); }
// `Post.delete` 可以接受单个Post或Post[]数组调用 public static int delete(Post post) { List<Post> posts = new List<Post>(post); return delete(posts) }
public static int delete(List<Post> posts) { return posts.map(Dao.remove); }}如果我的Java有些生疏,请见谅。