278
CHAPTER 6 | Tackle Business Complexity in a Microservice with DDD and CQRS Patterns
IIdentityService identityService,
ILogger
logger)
{
_orderRepository = orderRepository ??
throw
new
ArgumentNullException
(
nameof
(orderRepository));
_identityService = identityService ??
throw
new
ArgumentNullException
(
nameof
(identityService));
_mediator = mediator ??
throw
new
ArgumentNullException
(
nameof
(mediator));
_orderingIntegrationEventService = orderingIntegrationEventService ??
throw
new
ArgumentNullException
(
nameof
(orderingIntegrationEventService));
_logger = logger ??
throw
new
ArgumentNullException
(
nameof
(logger));
}
public
async Task<
bool
>
Handle
(CreateOrderCommand message, CancellationToken
cancellationToken)
{
// Add Integration event to clean the basket
var
orderStartedIntegrationEvent =
new
OrderStartedIntegrationEvent
(message.
UserId
);
await
_orderingIntegrationEventService.
AddAndSaveEventAsync
(orderStartedIntegrationEvent);
// Add/Update the Buyer AggregateRoot
// DDD patterns comment: Add child entities and value-objects through the Order
Aggregate-Root
// methods and constructor so validations, invariants and business logic
// make sure that consistency is preserved across the whole aggregate
var
address =
new
Address
(message.
Street
, message.
City
, message.
State
,
message.
Country
, message.
ZipCode
);
var
order =
new
Order
(message.
UserId
, message.
UserName
, address,
message.
CardTypeId
, message.
CardNumber
, message.
CardSecurityNumber
, message.
CardHolderName
,
message.
CardExpiration
);
Dostları ilə paylaş: