Skip to content

Instantly share code, notes, and snippets.

@stivni
Last active August 29, 2015 14:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save stivni/b71b9dfa6bc19e882008 to your computer and use it in GitHub Desktop.
Save stivni/b71b9dfa6bc19e882008 to your computer and use it in GitHub Desktop.
EventCentric Business Rules
<?php
final class Basket implements RecordsEvents
{
private $basketCanOnlyContainFiveProducts;
private function __construct()
{
$this->basketCanOnlyContainFiveProducts = new BasketCanOnlyContainFiveProducts();
}
private function whenBasketWasPickedUp(BasketWasPickedUp $event)
{
$this->basketCanOnlyContainFiveProducts->basketWasPickedUp();
}
private function whenProductWasAddedToBasket(ProductWasAddedToBasket $event)
{
$this->basketCanOnlyContainFiveProducts->productWasAddedToBasket();
}
private function whenProductWasRemovedFromBasket(ProductWasRemovedFromBasket $event)
{
$this->basketCanOnlyContainFiveProducts->productWasRemovedFromBasket();
}
public static function pickUp(BasketId $basketId)
{
$basket = new Basket($basketId);
$basket->recordThat(new BasketWasPickedUp($basketId));
return $basket;
}
public function addProduct(ProductId $productId, $name)
{
$this->basketCanOnlyContainFiveProducts->tryToAddProductToBasket();
$this->recordThat(
new ProductWasAddedToBasket($this->basketId, $productId, $name)
);
}
public function removeProduct(ProductId $productId)
{
$this->recordThat(
new ProductWasRemovedFromBasket($this->basketId, $productId)
);
}
}
@Steerlin
Copy link

$this->basketCanOnlyContainFiveProducts->tryToAdd(2);
would be more verbose

@stivni
Copy link
Author

stivni commented Jul 31, 2014

better?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment