SmartEnum for better domain modelling

An enum is a simple value that has no logic on it’s own. It is usually used to note a type of something. However, because they can not contain any logic, we end up poluting our domain with many if-else…