@@ 20-60 (lines=41) @@ | ||
17 | * rely on user data without checking their input. |
|
18 | * It will be the responsibility of the Aggregate to validate the data coming from the Command. |
|
19 | */ |
|
20 | abstract class AbstractCommand |
|
21 | { |
|
22 | use PopulatePropertiesTrait; |
|
23 | ||
24 | /** |
|
25 | * List of aggregate root impacted by this command. |
|
26 | * This should be set by the CommandHandler when it get all the aggregate roots according to the command's data. |
|
27 | * You'll probably manage only one aggregate root per command. It's an array just in case you need more. |
|
28 | * |
|
29 | * See CommandHandler for more details on the purpose of this. |
|
30 | * |
|
31 | * @var AbstractAggregateRoot[] |
|
32 | */ |
|
33 | public $aggregateRoots = []; |
|
34 | ||
35 | /** |
|
36 | * The command requester. |
|
37 | * We use the same object type (Author) as for an event in order to keep the track of the Command Requester |
|
38 | * in the Event ($author). |
|
39 | * |
|
40 | * @var Author |
|
41 | */ |
|
42 | public $requester; |
|
43 | ||
44 | /** |
|
45 | * @param array $data An array ['propertyName' => 'value', ...] |
|
46 | */ |
|
47 | public function __construct(array $data = []) |
|
48 | { |
|
49 | $data['requester'] = isset($data['requester']) ? $data['requester'] : Author::robot(); |
|
50 | $this->populate($data); |
|
51 | } |
|
52 | ||
53 | /** |
|
54 | * @param AbstractAggregateRoot $abstractAggregateRoot |
|
55 | */ |
|
56 | public function addAggregateRoot(AbstractAggregateRoot $abstractAggregateRoot) |
|
57 | { |
|
58 | $this->aggregateRoots[] = $abstractAggregateRoot; |
|
59 | } |
|
60 | } |
|
61 |
@@ 14-46 (lines=33) @@ | ||
11 | /** |
|
12 | * Base class for every event. |
|
13 | */ |
|
14 | abstract class AbstractEvent implements Serializable |
|
15 | { |
|
16 | use PopulatePropertiesTrait; |
|
17 | ||
18 | /** |
|
19 | * Get the aggregate root from which is the event is triggered. |
|
20 | * |
|
21 | * @var AbstractAggregateRoot |
|
22 | */ |
|
23 | public $aggregateRoot; |
|
24 | ||
25 | /** |
|
26 | * @var Author |
|
27 | */ |
|
28 | public $author; |
|
29 | ||
30 | /** |
|
31 | * @var DateTime |
|
32 | */ |
|
33 | public $date; |
|
34 | ||
35 | /** |
|
36 | * @param array $data The list of properties values. The key represent the property name. |
|
37 | */ |
|
38 | public function __construct(array $data = []) |
|
39 | { |
|
40 | // Enforce the date property to be set. |
|
41 | // Should not rely on the one given by the user. |
|
42 | $data['date'] = new DateTime(); |
|
43 | $data['author'] = isset($data['author']) ? $data['author'] : Author::robot(); |
|
44 | $this->populate($data); |
|
45 | } |
|
46 | } |
|
47 |