Skip to content

Instantly share code, notes, and snippets.

Created January 28, 2021 21:02
What would you like to do?
Article: Tell don't ask - sales with disconnected domain model
public class Sales {
private final CrateRepository crateRepository;
private final DeliveryService deliveryService;
public Sales(CrateRepository crateRepository, DeliveryService deliveryService) {
this.crateRepository = crateRepository;
this.deliveryService = deliveryService;
public SaleResult sell(Integer soldCrates, ProductType type, Customer customer) {
Crates crates = Crates.of(crateRepository.findByTypeLimit(type, soldCrates));
if (!crates.hasAtLeastCountOf(soldCrates)) {
return SaleResult.productOutOfStock();
Package packageToDeliver = crates.packFor(customer);
if (packageToDeliver.send(deliveryService) == ACCEPTED) {
return SaleResult.sold();
return SaleResult.receiverAddressUnknown();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment