Generally an enum would map to the picklist field type, and in that case I've seen a few implementations for dealing with this, some people just use string literals in their code - however that gets inflexible and hard to maintain very quickly.
Others use wrapper classes that have something like a .toSObject() method that marshalls the data into the SObject type, which would generally do this type of mapping.
I haven't seen it used to date, but you could use the Schema.PicklistEntry values for your field directly in your code, since they have a few advantages over enums:
- New picklist values get a corresponding PickListEntry instance automatically - no code needed
- They're a richer data type that can keep track of a few properties beyond what an enum can.
- The getLabel() method will handle any localized translations for you, if any.
- If somebody uses the API to set a picklist to an abitrary string (yes, you can do that) it shows up as an inactive picklist value, rather than failing to find a corresponding enum type.
However since you're limited to 100 getPicklistValues calls per transaction you'd be wise to build some sort of caching system if you use this pattern on a large scale app.