Opzione 4: Nessuna delle precedenti.
Il consiglio di "costruire in una lingua / struttura" è ortogonale alla DDD - dovresti fare entrambe le cose; questa non è una o / o situazione. Il software ben progettato dovrebbe essere modulare con una separazione netta tra gli strati; in questo modo puoi ottenere entrambi.
I moduli di interfaccia utente di primo livello non dovrebbero preoccuparsi di gestire la logica aziendale o la logica di dominio; dovrebbero concentrarsi sul fornire un flusso di lavoro e UX ottimali: il design deve essere informato dalle best practice del framework UI insieme ai pattern di progettazione dell'interfaccia utente comuni come MVC / MVVM / MVP / etc.
I moduli del livello di dominio non dovrebbero sapere nulla sull'interfaccia utente o sulla UX, ma si concentrano invece sulla logica aziendale: la sua progettazione dovrebbe essere guidata dai requisiti del dominio.
Pulisci la separazione tra il tuo livello di interfaccia utente / app e il tuo livello aziendale / dominio implica un'interfaccia (s) che separa i due; non c'è alcun motivo per cui la progettazione di un'interfaccia utente influisce sul modello di dominio o sulla logica aziendale e l'implementazione della logica aziendale non ha motivo di influenzare o limitare la progettazione o l'implementazione di un'interfaccia utente.
Inoltre, non vi è alcun motivo per cui l'interfaccia utente dovrebbe persino utilizzare lo stesso linguaggio di programmazione del livello di dominio, ad esempio un'interfaccia utente che utilizza HTML + ECMAScript e un livello aziendale utilizzando una tecnologia lato server come ASP.NET o Ruby su Rails; nel qual caso ci sarà una minima sovrapposizione tra i due oltre all'interfaccia REST.