Adam Polak: Event sourcing to od kilku lat jeden z najpopularniejszych tematów, jednak często prezentowany w oparciu o gotowe frameworki/rozwiązania. Wspólnie przejdziemy przez wszystkie elementy systemu opartego o ten wzorzec. Żadnych wspomagaczy, żadnych frameworków! Czym jest event sourcing? Na co pozwala? A co z wydajnością? Na te i wiele innych pytań postaramy się uzyskać odpowiedzi podczas prezentacji.
7. EMPLOYEE
class Employee {
constructor(id, firstName, lastName, vacationRequests) {
this._id = id;
this._firstName = firstName;
this._lastName = lastName;
this._vacationRequests = vacationRequests;
}
issueVacationRequest(from, to, comment) { // do business logic and domain validation here then return vacation req or event}
}
EVENT SOURCE EVERYTHING!
8. ISSUE VACATION REQUEST
const vacationRequest = employee.issueValidationRequest(‘2018-10-01’, ‘2018-11-01’, ‘Japan, here I come!’);
vacationRequestsRepository.persist(vacationRequest); // map vacation request from domain model to db model
const employee = employeeRepository.findById(id); // map from db model to domain model
EVENT SOURCE EVERYTHING!
| id | employee_id | from | to | comment | create_date | update_date |
| 1 | some-uuid | 2018-10-01 | 2018-11-01 | Japan, here I come! | 2018-01-11 | 2018-01-11 |
41. ▸ HOW TO PAGINATE?
▸ HOW TO DISPLAY SINGLE EMPLOYEE?
▸ HOW TO DISPLAY FILTER EMPLOYEES?
▸ HOW TO DO BASIC UI OPERATIONS?
EVENT SOURCE EVERYTHING!
PROBLEMS
53. ▸ IT IS CQRS
▸ REBUILD AGGREGATE FROM PREVIOUS EVENTS
▸ EVERY OPERATION EMITS DOMAIN EVENTS
▸ STORE EVENTS IN EVENT STORE
▸ PUBLISH THEM THROUGH EVENT BUS
▸ BUILD PROJECTIONS FROM PUBLISHED EVENTS
▸ REBUILD PROJECTIONS IF NECESSARY
EVENT SOURCE EVERYTHING!
SUMMARY