Esistono due tipi di software completamente diversi: librerie che richiedono un'interfaccia binaria stabile su più versioni e applicazioni o software interni in cui è possibile effettuare il refactoring.
Per software o applicazioni interni, hai ragione: puoi aspettare fino a quando qualcosa è necessario, quindi refactoring e ricompilare il codice. Quindi usare i campi pubblici è jucky ma va bene.
Una libreria pubblica [1] non ha questa libertà. Se si modifica un campo in una proprietà che è una modifica di rottura, una proprietà è fondamentalmente un metodo con sintassi più carina. Questa modifica è compatibile con la sorgente (API stabile) ma non è compatibile con i binari (ABI instabile). Qualsiasi codice dipendente che accede a questo campo / proprietà deve essere ricompilato.
[1]: qui "pubblico" significa "consumato da sviluppatori esterni alla tua squadra".
Un sacco di consigli sul design che vedi (SOLID, design pattern, ...) si concentrano sul mantenimento del software in grado di evolvere mantenendo la compatibilità con l'ABI. Questo non è un cattivo consiglio, non è sempre applicabile. YAGNI è l'esatto opposto perché presuppone che il progetto possa essere riparato mediante il refactoring. Anche in questo caso non consiglio male, solo non sempre applicabile.
Questo non è un pass gratuito per ignorare qualsiasi consiglio sul design, solo un puntatore che il consiglio di design tende ad assumere un contesto particolare.
Ma anche ignorando la necessità di usare le proprietà, dovresti sempre usarle:
- Le proprietà sono codice C # idiomatico. Non usarli rende più complicato leggere il tuo codice.
- Non sono più quel codice da digitare. Affrontalo.
- I campi pubblici di per sé sono un odore di progettazione e il puzzo di modellazione di oggetti insufficiente per qualcosa di più complicato di un DTO. Le proprietà possono essere rese pubbliche e impostabili in privato, che spesso è la scelta migliore.
- Tutte le tecnologie di databinding (ASP.Net MVC Model Binding, WinForms, WFP, Xamarin, Asp.Net WebAPI, ...) si collegheranno solo alle proprietà.
- Alcuni casi hanno bisogno di proprietà, quindi potresti anche usarli ovunque. I lati negativi - un po 'più di battitura, in rari casi un piccolo calo di prestazioni - di solito non superano la maggiore coerenza.