Comments (3)
Normally we add value objects and asserts to our commands. So we thought about extending the try-catch-block to catch the exceptions:
But now we are thinking of moving the value objects to the "Handler":
#14
In that case we no longer would have to extend and keep it the original way - see initial comment.
from php-ddd.
We decided to make our Command DTOs (aka Symfony Form data classes) using primitives only again.
The creation of value objects was moved to the Command Handler.
Every value object throws a specific Domain Exception if they cannot be created or violate a business rule.
Now we can use a single try-catch block to catch the exceptions and transform them into a Symfony Form error.
This example features the @prooph service-bus. The actual Domain Exception can be accessed by getting the previous exception:
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
try {
$this->get('prooph_service_bus.acme_command_bus')->dispatch($command);
} catch (\Exception $busException) {
switch (get_class($busException->getPrevious()))
{
case InnerWidthIsOutOfRangeException::class:
$form->get('window')->addError(new FormError('...'));
break;
}
}
}
Is there a better way to get and handle the domain exceptions @prolic @codeliner?
from php-ddd.
The service bus will throw its own exceptions. If you don't like this behavior and want it to throw your custom exceptions directly instead, attach a listener to finalize event on the bus and replace the exception with the previous one.
from php-ddd.
Related Issues (20)
- Repositories inside or outside Domain Services HOT 1
- Event Enriching and external changes to read-model data
- When, where and how to create Summary Events HOT 3
- Passing read models (value objects representing state) / domain service to aggregate methods HOT 6
- Unit testing value objects with internal datetime calculation HOT 14
- How to test application service command handlers dealing with read models? HOT 12
- Process Manager example with Symfony Messenger Command / Event Bus and ProophOS HOT 5
- Batch / Bulk operations handling multiple event-sourced aggregate roots HOT 3
- How to use factory methods on aggregates in CQRS - WRITE vs. READ model HOT 1
- How to keep read-models up-to-date when a name property was externally changed?
- How to upcast events with Prooph HOT 1
- Are CQRS commands part of the domain model? HOT 13
- Populate Projection with multiple tables HOT 2
- Where to call or pass a domain service? HOT 16
- How to implement the Equatable interface / Equals or SameValueAs method in value objects
- Domain Event Publisher for Doctrine Entities HOT 1
- Event Sourcing vs. Event-Driven Architecture (EDA)
- The repository pattern HOT 4
- Properties on Domain Events HOT 3
- PHP Command DTO with Symfony Constraints equivalent in Angular Forms HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from php-ddd.