Too Long; Didn't Read
How To Design Domain Model in Kotlin is written in Valiktor by Pcc Luca Piccinelli. It is possible to turn the code into an unequivocal expression of the domain. A typical, persistence oriented, modeling could look like the following: A contact has a name, a surname, and an email. The name can have a middle initial. The email must be verified. You can send password recovery only to verified emails. Maintaining high cohesion also favors the reusability. Using primitive types in the domain model is a code smell.