Unter anderem findet man in Vaughn Vernon Implementing Domain-Driven Design die Empfehlung das Repositories das Collection-Interface imitieren sollen:
public interface CargoRepository { add(Cargo cargo); remove(Cargo cargo); ... }
Der Hintergedanke dabei ist, ein Repository nicht als DAO (Database Access Object) zu verstehen, sondern als fachlichen Behälter für aufzubewahrende Dinge – egal wie diese jetzt tatsächlich persistiert werden (Stichwort: persistence ignorance).
Aber warum nicht noch einen Schritt weiter gehen, und ein Repository als First-Class Collection betrachten:
public interface Cargoes {
add(Cargo cargo);
remove(Cargo cargo);
...
}
Dieser Gedanke kam mir beim Lesen von Jeff Bays Object Calisthenics. Mehr lässt sich Persistenz wohl nicht ignorieren…