La tua domanda e' decisamente troppo troppo generica. E' impossibile dare consigli "a grandi linee" su un progetto che andrebbe studiato nello specifico e probabilmente richiederebbe un'analisi decisamente fuori dalla portata di un thread su un forum

Comunque non devi partire individuando cosa e' necessario fare (interfacce, classi astratte, etc.): nessuna cosa e' strettamente necessaria, dipende da come vuoi strutturare tu il tuo codice.

Inoltre le impostazioni di visibilita' di proprieta' e metodi "proteggono" solo da altro codice, non dagli utenti. Sono un modo di tenere organizzato il codice imponendo delle regole, non sono misure di sicurezza.

Ti consiglio di procedere e fare domande specifiche quando ti trovi ad avere dubbi precisi.