While implementing federation in forgejo we introduced some conncepts from DomainDrivenDesign:
1.**Aggregate**: Aggregates are clusters of objects (entities or values) which are handled atomic when it comes to persistence.
2.**Validation**: Every object should express it's own validity, whenever someone is interested in
1. we collect as many invalidity information as possible in one shoot - so we return a list of validation issues if there are some.
2. Objects entering the lifetime are checked for validity on the borders (after loaded from and before stored to DB, after being newly created (New* functions) or after loaded via web / REST).
Objects in forgefed package reflect Objects from ap or f3 lib but add some Forgejo specific enhancements like more specific validation.