In generale, dovresti avere costruttori per le classi che prendono abbastanza parametri per inizializzare correttamente l'oggetto che si sta creando in uno stato valido. Se la tua classe è in grado di fornire impostazioni predefinite sane per tutti i campi che comprendono uno stato valido per gli oggetti di quella classe, è probabile che un costruttore predefinito sia una buona idea.
Inoltre, alcune librerie richiedono l'esistenza di un costruttore predefinito per determinate operazioni. Ad esempio, le librerie in Java utilizzate per la deserializzazione di json / xml richiedono spesso un costruttore predefinito da richiamare tramite riflessione poiché quelle librerie tenteranno di valutare tutto in fase di esecuzione e non potranno sapere in anticipo quali sono i costruttori disponibili da utilizzare, quindi si aspettano un costruttore predefinito. In casi come questi se un tool di costruzione predefinito è richiesto da tooling, ma non dovrebbe essere chiamato da qualsiasi cosa tu controlli o utenti della tua API, è meglio usare l'idioma comune della tua lingua per contrassegnare il costruttore come privato (es. Accesso privato nelle tipiche lingue tipizzate staticamente).