DanLevy.net

Programmazione di Ordine Superiore

Esplorazione di Tecniche di Pipeline Basate su Array e Insiemi

Hero image for Programmazione di Ordine Superiore

Esplorazione di Tecniche di Pipeline Basate su Array e Insiemi

Un Anti-Pattern?

Questa è un’esplorazione dei vantaggi che si ottengono quando si programma tutto come un array. (Usando concetti Jedi derivati da SmallTalk)

Ecco alcuni principi guida:

  1. Tutto l’input è di tipo array. Anche se si tratta di un array di un solo elemento.

  2. Le funzioni di livello superiore dovrebbero generalmente accettare E restituire array. (Eccezione fatta per i metodi di callback per i loop: map/reduce/each/filter)

  3. 99 sviluppatori su 100 soffrono di quella che chiamo sindrome da surplus di schema acuto.

  4. Attenzione ai modelli basati su classi gonfiati — con tutte le conseguenze prevedibili: stato dell'istanza fragile con tante leve e manopole da sbagliare, transazioni DB, lock SQL, async/mutex (che funzionano sempre al primo colpo, vero?), uso idiomatico di getter/setter di proprietà, e il vostro utilizzo di public/private/final/ecc. è solido, giusto?

  5. Quindi lasciatemi prendere un problema comune e infilare ~~~aggiungere~~~ alcune riflessioni basate sugli insiemi.

  6. Un ipotetico sito Blog ha molti Articoli, e ha ancora più Post (Commenti).

  7. Aggiungiamo un metodo delete (di seguito) — ma con supporto sia per singoli che per array.

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` può essere chiamato con un singolo Post o un array di 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);
}
}

Perdonatemi se il mio Java è un po’ arrugginito.