Sto creando interfacce per un certo numero di classi esistenti per motivi di derisione. Molte di queste classi hanno anche metodi di scope del pacchetto come tentativo di fornire un certo livello di incapsulamento assicurando che solo il controller possa modificare parte del loro stato. Avevo pensato di poter usare questo cambiamento per cercare di ottenere un incapsulamento più pulito.
La mia domanda è due volte. Innanzitutto, è considerato fattibile utilizzare le interfacce per l'incapsulamento? Potrei fare certi metodi non nella mia interfaccia che sono disponibili nella classe. oppure potrei avere il mio metodo IBar con un metodo getFoo che restituisce un IFoo, ma la mia classe bar sostituisce getFoo per restituire una barra. Il problema è che chiunque potrebbe facilmente trasmettere il mio Ixxx alla classe reale, quindi è davvero considerato un incapsulamento utile?
La mia seconda domanda ha a che fare con il mio modello. Vorrei che il mio modello avesse alcuni metodi getAllFoo che restituiscono oggetti IFoo. tuttavia, voglio che il mio controller abbia un modo per recuperare l'implementazione di actuall Foo (cioè sapere che il mio IFoo è di tipo Foo) in modo che abbia accesso a metodi non nell'interfaccia. Qual è considerato il modo più pulito per garantire che il mio controllore abbia accesso alla classe completa, ma le altre classi vedono solo l'interfaccia? Prenderò solo il casting dell'interfaccia per la sua classe concreta sarebbe considerato piuttosto sciatto?