From c9938409fd4a9a14a03d4585f74310b8bbe3a46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kucha=C5=99?= <honza.kuchar@grifart.cz> Date: Thu, 25 Feb 2016 15:19:19 +0100 Subject: [PATCH] Migrated to PHP7 types --- app/AggregateHistory.php | 8 +++----- app/AggregatePersister.php | 14 ++++++++++++++ app/RecordsEvents.php | 2 +- app/aggreagates/AbstractAggregate.php | 8 +++++--- app/aggreagates/Basket.php | 11 ++++++----- app/events/BasketWasPickedUp.php | 9 ++++----- app/events/DomainEvent.php | 5 +++-- app/events/ProductWasAddedToBasket.php | 16 ++++++---------- app/events/ProductWasRemovedFromBasket.php | 14 +++++--------- app/ids.php | 7 +++++-- tests/BasketTest.phpt | 2 +- 11 files changed, 53 insertions(+), 43 deletions(-) create mode 100644 app/AggregatePersister.php diff --git a/app/AggregateHistory.php b/app/AggregateHistory.php index d471239..b34b1fa 100644 --- a/app/AggregateHistory.php +++ b/app/AggregateHistory.php @@ -1,4 +1,5 @@ <?php +use Ramsey\Uuid\UuidInterface; /** * Collection of domain events @@ -7,7 +8,7 @@ class AggregateHistory extends ArrayObject { private $aggregateId; - public function __construct($aggregateId, DomainEvents $domainEvents) + public function __construct(UuidInterface $aggregateId, DomainEvents $domainEvents) { $this->aggregateId = $aggregateId; @@ -17,10 +18,7 @@ class AggregateHistory extends ArrayObject { parent::__construct((array) $domainEvents); } - /** - * @return array|null|object - */ - public function getAggregateId() + public function getAggregateId(): UuidInterface { return $this->aggregateId; } diff --git a/app/AggregatePersister.php b/app/AggregatePersister.php new file mode 100644 index 0000000..4b68e95 --- /dev/null +++ b/app/AggregatePersister.php @@ -0,0 +1,14 @@ +<?php + +use Ramsey\Uuid\UuidInterface; + +class AggregatePersister +{ + public function save(string $aggregateRoot, AbstractAggregate $aggregate) : void { + + } + + public function load(string $aggregateRoot, UuidInterface $id): AbstractAggregate { + + } +} \ No newline at end of file diff --git a/app/RecordsEvents.php b/app/RecordsEvents.php index e0e7361..c1c3458 100644 --- a/app/RecordsEvents.php +++ b/app/RecordsEvents.php @@ -2,7 +2,7 @@ interface RecordsEvents { - public function getRecordedEvents(); + public function getRecordedEvents(): DomainEvents; public function clearRecordedEvents(); } \ No newline at end of file diff --git a/app/aggreagates/AbstractAggregate.php b/app/aggreagates/AbstractAggregate.php index ea6c001..b0a8f83 100644 --- a/app/aggreagates/AbstractAggregate.php +++ b/app/aggreagates/AbstractAggregate.php @@ -7,7 +7,7 @@ abstract class AbstractAggregate * @param \DomainEvent $domainEvent * @return string */ - private function getApplyMethodForDomainEvent(DomainEvent $domainEvent) + private function getApplyMethodForDomainEvent(DomainEvent $domainEvent): string { return "apply" . get_class($domainEvent); } @@ -17,7 +17,8 @@ abstract class AbstractAggregate * @param \DomainEvent $domainEvent * @internal */ - public function applyIfAccepts(DomainEvent $domainEvent) { + public function applyIfAccepts(DomainEvent $domainEvent) + { if(method_exists($this, $this->getApplyMethodForDomainEvent($domainEvent))) { $this->apply($domainEvent); } @@ -27,7 +28,8 @@ abstract class AbstractAggregate * Apply domain event; if objects does not accepts this event -> fail * @param \DomainEvent $domainEvent */ - public function apply(DomainEvent $domainEvent) { + public function apply(DomainEvent $domainEvent) + { $method = $this->getApplyMethodForDomainEvent($domainEvent); $this->$method($domainEvent); } diff --git a/app/aggreagates/Basket.php b/app/aggreagates/Basket.php index 8d1a7eb..6a9706d 100644 --- a/app/aggreagates/Basket.php +++ b/app/aggreagates/Basket.php @@ -22,17 +22,17 @@ final class Basket extends AbstractAggregate implements RecordsEvents * @param \BasketId $basketId * @return \Basket */ - public static function pickUp(BasketId $basketId) + public static function pickUp(BasketId $basketId): self { $basket = new Basket($basketId); $basket->recordThat(new BasketWasPickedUp($basketId)); return $basket; } - public static function reconstituteFrom(AggregateHistory $aggregateHistory) + public static function reconstituteFrom(AggregateHistory $aggregateHistory): self { $basketId = $aggregateHistory->getAggregateId(); - $basket = new static($basketId); + $basket = new static(new BasketId($basketId)); foreach($aggregateHistory as $event) { $basket->apply($event); @@ -106,14 +106,15 @@ final class Basket extends AbstractAggregate implements RecordsEvents } } - private function isProductInBasket(ProductId $productId) { + private function isProductInBasket(ProductId $productId): bool + { return isset($this->itemsCountById[(string) $productId]) && ($this->itemsCountById[(string) $productId] > 0); } // -------- implementation of RecordsEvents ------------------ private $recordedEvents = []; - public function getRecordedEvents() + public function getRecordedEvents(): DomainEvents { return new DomainEvents($this->recordedEvents); } diff --git a/app/events/BasketWasPickedUp.php b/app/events/BasketWasPickedUp.php index 3e6d4f7..71d8ce3 100644 --- a/app/events/BasketWasPickedUp.php +++ b/app/events/BasketWasPickedUp.php @@ -1,5 +1,7 @@ <?php +use Ramsey\Uuid\UuidInterface; + class BasketWasPickedUp implements DomainEvent { private $basketId; @@ -13,11 +15,8 @@ class BasketWasPickedUp implements DomainEvent $this->basketId = $basketId; } - /** - * @return \BasketId - */ - public function getAggregateId() + public function getAggregateId(): UuidInterface { - return $this->basketId; + return $this->basketId->getId(); } } \ No newline at end of file diff --git a/app/events/DomainEvent.php b/app/events/DomainEvent.php index 32bd64e..8843617 100644 --- a/app/events/DomainEvent.php +++ b/app/events/DomainEvent.php @@ -1,12 +1,13 @@ <?php +use Ramsey\Uuid\UuidInterface; + interface DomainEvent { /** * Aggregate instance identifier (must be unique per aggregate) - * @return \Ramsey\Uuid\Uuid */ - public function getAggregateId(); + public function getAggregateId(): UuidInterface; } \ No newline at end of file diff --git a/app/events/ProductWasAddedToBasket.php b/app/events/ProductWasAddedToBasket.php index d2a327c..ce07c86 100644 --- a/app/events/ProductWasAddedToBasket.php +++ b/app/events/ProductWasAddedToBasket.php @@ -1,5 +1,7 @@ <?php +use Ramsey\Uuid\UuidInterface; + class ProductWasAddedToBasket implements DomainEvent { private $basketId; @@ -19,23 +21,17 @@ class ProductWasAddedToBasket implements DomainEvent $this->productName = $productName; } - public function getAggregateId() + public function getAggregateId(): UuidInterface { - return $this->basketId; + return $this->basketId->getId(); } - /** - * @return BasketId - */ - public function getProductId() + public function getProductId(): ProductId { return $this->productId; } - /** - * @return ProductId - */ - public function getProductName() + public function getProductName(): string { return $this->productName; } diff --git a/app/events/ProductWasRemovedFromBasket.php b/app/events/ProductWasRemovedFromBasket.php index 4c47a3b..2a38bda 100644 --- a/app/events/ProductWasRemovedFromBasket.php +++ b/app/events/ProductWasRemovedFromBasket.php @@ -1,5 +1,7 @@ <?php +use Ramsey\Uuid\UuidInterface; + class ProductWasRemovedFromBasket implements DomainEvent { private $basketId; @@ -16,18 +18,12 @@ class ProductWasRemovedFromBasket implements DomainEvent $this->productId = $productId; } - /** - * @return BasketId - */ - public function getAggregateId() + public function getAggregateId(): UuidInterface { - return $this->basketId; + return $this->basketId->getId(); } - /** - * @return ProductId - */ - public function getProductId() + public function getProductId(): ProductId { return $this->productId; } diff --git a/app/ids.php b/app/ids.php index fba5901..f622910 100644 --- a/app/ids.php +++ b/app/ids.php @@ -1,5 +1,7 @@ <?php +use Ramsey\Uuid\UuidInterface; + abstract class AbstractId { private $uuid; @@ -13,11 +15,12 @@ abstract class AbstractId { $this->uuid = $uuid; } - function getId() { + function getId(): UuidInterface + { return $this->uuid; } - function __toString() + function __toString(): string { return (string) $this->uuid; } diff --git a/tests/BasketTest.phpt b/tests/BasketTest.phpt index da11dc3..4c1aea0 100644 --- a/tests/BasketTest.phpt +++ b/tests/BasketTest.phpt @@ -74,7 +74,7 @@ class BasketTest extends \Tester\TestCase { // Act $reconstitutedBasket = Basket::reconstituteFrom( - new AggregateHistory($basketId, $retrievedEvents = $events) + new AggregateHistory($basketId->getId(), $retrievedEvents = $events) ); // Assert -- GitLab