6. Step 1: CQS
public class SubmitAction : Interactor
{
public ShowLeadViewModel Execute(LeadActionDTO action)
{
var lead = ExecuteLeadAction(action);
var viewModel = BuildViewModel(lead);
return viewModel;
}
}
7. Step 1: CQS
public class SubmitAction : Interactor
{
public void Execute(LeadActionDTO action)
{
ExecuteLeadAction(action);
}
public ShowLeadViewModel GetLeadInfo(long id)
{
var lead = GetLead(id);
var viewModel = BuildViewModel(lead);
return viewModel;
}
}
8. Step 1: CQS
public class SubmitAction : Interactor
{
public void Execute(LeadActionDTO action)
{
ExecuteLeadAction(action);
}
public ShowLeadViewModel GetLeadInfo(long id)
{
return GetLeadViewModel(id);
}
}
9. Step 1: CQS
Separated Query/Command logic
Commands are executed asynchronously
Queries are executed though a thin read layer
19. Step 3: Events History
Every data change is logged
Reliable source of truth
Read model can be regenerated anytime
Write model can be regenerated anytime
26. Step 4: Event Sourcing
Infinitely scalable reads
Infinitely scalable writes
Audit data
New business insights form past data
Replay events for debugging and analysis
Retroactive logic changes (=bug fixes)
Lightweight backups
NoSQL
No deadlocks
No DBA
CHEAP!!!!!