An enum implementing both a presentation interface and a domain one, which is two responsibilities agreeing to share a file.
enum OrderStatus: string implements HasLabel, IsTerminal
{
case Pending = 'pending';
case Shipped = 'shipped';
public function label(): string { /* presentation */ }
public function isTerminal(): bool { /* domain */ }
}
// the label moved to a presenter keyed on the enum.
// isTerminal stayed, because it is a fact about the
// status rather than about how it is shown.
The test that settled it was asking which method would need to change if the application grew a second language, and which would need to change if the business added a status. Only one answer was the enum. Splitting them left the enum smaller and added a presenter class, which felt like more code and is the correct amount.