Mixing business logic and presentation layer in enum type Let's assume I have an enum type with currency:

public enum CurrencyType {

    USD("American Dollar", "USD"),
    EUR("Euro", "EUR"),
    JPY("Japan Yen", "JPY");

    private final String fullName;
    private final String shortName; // enum valirables can change in the future, so I do not use Currency.name()

    private CurrencyType(String fullName, String shortName) {
        this.fullName = fullName;
        this.shortName = shortName;
    }

    public String getFullName() {
        return this.fullName;
    }

    public String getFullNameLocalized(ResourceBundle bundle) {
        // returns the currency name using some ResourceBundle with localized strings
    }

    public String getShortName() {
        return this.shortName;
    }
}


Now, somewhere in the presentation layer I say:

CurrencyType curr = CurrencyType.EUR;
// ...
labelCurrencyTypeName.setText(curr.getFullNameLocalized(bundle));
labelCurrencyTypeSymbol.setText(curr.getShortName());


in order to see the "EUR" string in an appropriate place. 

Everything is perfect, but such approach mixes the Model and View together, doesn't it? CurrencyType is widely used in business logic and this is it's main goal. 

What other approach would you suggest? Or maybe my code is not so wrong as I expect?
If you want to decouple Enum and presentation logic, consider using EnumMap . This type of collection is fast and key-safe. 

IMO, there is nothing wrong to store short and full currency names in CurrencyType. But localized name (as well as country's flag and other visual aspects) better be decoupled and put into presentation layer. You can use short names as keys for resource bundles. 

Furthermore, if all CurrencyType values reproduce currency short names, you can eliminate using dedicated private field for them and use Enum.name() instead.