@startuml package com.iluwatar { class App { - DATE_OF_BIRTH : LocalDate {static} - NAME : String {static} - OCCUPATION : String {static} - App() + main(args : String[]) {static} } class DataTransferObject { # notification : Notification + DataTransferObject() + getNotification() : Notification } class Notification { - errors : List + Notification() + addError(error : NotificationError) + getErrors() : List + hasErrors() : boolean } class NotificationError { - errorId : int - errorMessage : String + NotificationError(errorId : int, errorMessage : String) + getErrorId() : int + getErrorMessage() : String + toString() : String } class RegisterWorker { - LOGGER : Logger {static} # RegisterWorker(worker : RegisterWorkerDto) # fail(condition : boolean, error : NotificationError) # failIfNullOrBlank(s : String, error : NotificationError) # isNullOrBlank(s : String) : boolean + run() - validate() } class RegisterWorkerDto { + DOB_TOO_SOON : NotificationError {static} + MISSING_DOB : NotificationError {static} + MISSING_NAME : NotificationError {static} + MISSING_OCCUPATION : NotificationError {static} - dateOfBirth : LocalDate - name : String - occupation : String # RegisterWorkerDto() + getDateOfBirth() : LocalDate + getName() : String + getOccupation() : String + setDateOfBirth(dateOfBirth : LocalDate) + setName(name : String) + setOccupation(occupation : String) + setupWorkerDto(name : String, occupation : String, dateOfBirth : LocalDate) } class RegisterWorkerForm { - LOGGER : Logger {static} ~ dateOfBirth : LocalDate ~ name : String ~ occupation : String ~ service : RegisterWorkerService ~ worker : RegisterWorkerDto + RegisterWorkerForm(name : String, occupation : String, dateOfBirth : LocalDate) - checkError(error : NotificationError, info : String) - indicateErrors() - saveToWorker() ~ showError(info : String, message : String) + submit() } class RegisterWorkerService { + RegisterWorkerService() + registerWorker(registration : RegisterWorkerDto) } class ServerCommand { # data : DataTransferObject + ServerCommand(data : DataTransferObject) + getNotification() : Notification } } Notification --> "-errors" NotificationError DataTransferObject --> "-notification" Notification RegisterWorkerForm --> "-service" RegisterWorkerService RegisterWorkerForm --> "-worker" RegisterWorkerDto ServerCommand --> "-data" DataTransferObject RegisterWorkerDto --> "-MISSING_DOB" NotificationError RegisterWorkerDto --> "-MISSING_NAME" NotificationError RegisterWorker --|> ServerCommand RegisterWorkerDto --|> DataTransferObject @enduml