Domains aim at making generic definitions possible.
It is common to have attributes sharing the same definition, though no direct relationship can be established between them. For example, different prices or amounts attributes may share the same data type (i.e.: ProductPrice, ServicePrice, InvoiceAmount, etc.). So, you can define a domain named Price as being a numeric type with a maximum length of 9 and several attributes and variables may be defined based on that domain.
One of the advantages the domains provide is that, if later on, you need prices to be Numeric of a different length, changing the domain definition will be enough to update all the attributes and variables based on that domain in a single step.
Because the use of Domains leads to a higher level of abstract application definition, it is recommended that all attributes be associated with a Domain definition.