Skip to content

Instantly share code, notes, and snippets.

@kaelfeitosa
Created March 23, 2022 17:22
Show Gist options
  • Save kaelfeitosa/de01352bdb4d2c4e0432dda7cdb14dfe to your computer and use it in GitHub Desktop.
Save kaelfeitosa/de01352bdb4d2c4e0432dda7cdb14dfe to your computer and use it in GitHub Desktop.
@startuml
allow_mixing
skinparam componentStyle rectangle
component "BacklogItem Aggregate" {
component "BacklogItem" as BacklogItemC <<aggregate root>>
component "State" as StateC <<value object>>
component "Task" as TaskC <<entity>>
}
BacklogItemC -- StateC
BacklogItemC -- "many" TaskC
newpage
package Classes <<Rectangle>> {
package BacklogItemAggregate {
class BacklogItem <<aggregate root>> {
- String id
- State state
- List<Task> tasks
+ BacklogItem(...)
+ Task getTaskByID(String taskID)
+ int getTotalHoursRemaining()
+ setState(State state)
}
enum State <<value object>> {
IN_PROGRESS
DONE
}
class Task <<entity>> {
- String id
- int hoursRemaining
+ Task(...)
+ void setHoursRemaining(int hours)
}
}
BacklogItem *-- State
BacklogItem *-- "many" Task
}
newpage
object backlogItem <<aggregate root>> {
id: "ADD_PRICE"
}
object state <<value object>> {
IN_PROGRESS
}
object task <<entity>> {
id: "CREATE_FIELD"
hoursRemaining: 12
}
backlogItem *-- state
backlogItem *-- task
note as N
<code>
String taskID = "CREATE_FIELD";
var task = new Task(taskID, 1);
var backlogItem = new BacklogItem("ADD_PRICE", Status.IN_PROGRESS, List.of(task));
backlogItemRepository.save(backlogItem)
</code>
end note
newpage
object backlogItem <<aggregate root>> {
id: "ADD_PRICE"
}
object state <<value object>> {
IN_PROGRESS
}
object task <<entity>> {
id: "CREATE_FIELD"
hoursRemaining: 0
}
backlogItem *-- state
backlogItem *-- task
note as N
<code>
var backlogItem = backlogItemRepository.findById('ADD_PRICE');
var task = backlogItem.getTaskByID('CREATE_FIELD');
task.setHoursRemaining(0);
backlogItemRepository.save(backlogItem);
</code>
end note
newpage
object backlogItem <<aggregate root>> {
id: "ADD_PRICE"
}
object state <<value object>> {
DONE
}
object task <<entity>> {
id: "CREATE_FIELD"
hoursRemaining: 0
}
backlogItem *-- state
backlogItem *-- task
note as N
<code>
var backlogItem = backlogItemRepository.findById('ADD_PRICE');
var task = backlogItem.getTaskByID('CREATE_FIELD');
task.setHoursRemaining(0);
if (backlogItem.getTotalHoursRemaining() == 0) {
backlogItem.setState(State.DONE)
}
backlogItemRepository.save(backlogItem);
</code>
end note
newpage
package Classes <<Rectangle>> {
package BacklogItemAggregate {
class BacklogItem <<aggregate root>> {
- String id
- State state
- List<Task> tasks
- int getTotalHoursRemaining()
+ BacklogItem(...)
+ setHoursRemainingForTask(String taskID, int hours)
}
enum State <<value object>> {
IN_PROGRESS
DONE
}
class Task <<entity>> {
- String id
- int hoursRemaining
+ Task(...)
~ void setHoursRemaining(int hours)
}
}
BacklogItem *-- State
BacklogItem *-- "many" Task
}
newpage
object backlogItem <<aggregate root>> {
id: "ADD_PRICE"
}
object state <<value object>> {
DONE
}
object task <<entity>> {
id: "CREATE_FIELD"
hoursRemaining: 0
}
backlogItem *-- state
backlogItem *-- task
note as N
<code>
BacklogItem {
void setHoursRemainingForTask(String taskID, int hours) {
task.setHoursRemaining(hours);
if (getTotalHoursRemaining() == 0) {
backlogItem.setState(State.DONE)
}
}
}
var backlogItem = backlogItemRepository.findById('ADD_PRICE');
var task = backlogItem.setHoursRemainingForTask('CREATE_FIELD', 0);
backlogItemRepository.save(backlogItem);
</code>
end note
newpage
@enduml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment