,.-^^-._ ┌─┐ |-.____.-| ║"│ | | └┬┘ | | ┌┼┐ | | │ ┌─────┐ '-.____.-' ┌┴┐ │:Main│ H2 User └──┬──┘ │ Database │ │ «construct» ┌────────────────┐ │ │ │───────────────────────────────────────────────────────────────────────│<>│ │ │ │ │dao │ │ │ │ │:ProductJdbiDAO │ │ │ │ │ └───────┬────────┘ │ │ │ «construct(d┌───────────┐ │ │ │ │─────────────────│<< frame >>│ │ │ │ │ │:MainMenu │ │ │ │ │ └─────┬─────┘ │ │ │ clicks 'Add New Product' ┌┴┐ │ │ │ ─────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ « construct (d┌──────────────┐ │ │ │ │ │ │ ───────────────────│<< dialog >> │ │ │ │ │ │ │ │:ProductEditor│ │ │ │ │ │ │ └──────┬───────┘ │ │ │ │ │ │ │ getCategories() ┌┴┐ │ │ │ │ │ │ ───────────────────────> │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ select distinct category from product ┌┴┐ │ │ │ │ │ │ │ ───────────────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ └┬┘ │ │ │ │ ┌┴┐ │ │ query result │ │ │ │ │ │ │ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ └┬┘ │ │ │ │ │ │ │ categories │ │ │ │ │ │ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ « construct » ┌────────────────┐ │ │ │ │ │ │ │ ───────────────────────────────────────────│categoryModel │ │ │ │ │ │ │ │ │ │:SimpleListModel│ │ │ │ │ │ │ │ │ └───────┬────────┘ │ │ │ │ │ │ │ updateItems(categories) ┌┴┐ │ │ │ │ │ │ │ ──────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └┬┘ │ └┬┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ enters product details into input components │ │ │ │ │ ────────────────────────────────────────────────────────────────────> │ │ │ │ │ │ │ │ │ │ │ │ │ clicks 'Save'│ ┌┴┐ │ │ │ │ ───────────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ « construct  from user input » ┌────────────┐ │ │ │ │ │ │ │ ───────────────────────────────────────────────────────────────────────│<< domain >>│ │ │ │ │ │ │ │ │ │ │product │ │ │ │ │ │ │ │ │ │ │:Product │ │ │ │ │ │ │ │ │ │ └─────┬──────┘ │ │ │ │ │ │ │ saveProduct(product) ┌┴┐ │ │ │ │ │ │ │ │ │ ──────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ insert into product (...) values (...) ┌┴┐ │ │ │ │ │ │ │ │ ───────────────────────────────────────────────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ \ / │ │ │ │ │ │ │ │ │ │ │X│ │ │ │ │ │ │ │ │ │ │ /┬\ └┬┘ │ │ └┬┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └┬┘ │ │ │ │ │