Mi scuso per il titolo potenzialmente fuorviante e ambiguo; Ho cercato di generalizzarlo nel miglior modo possibile.
Attualmente sto lavorando a un progetto OpenGL in C ++. Volevo avvolgere un paio di funzioni OpenGL in oggetti di livello superiore. Mi sono imbattuto in (quello che pensavo fosse un unico) problema. Non potevo decidere se avere un oggetto Renderer
essere responsabile del disegno di un oggetto Drawable
, o che un oggetto Drawable
si occupasse di disegnare se stesso con Renderer
come target.
renderer.render(Drawable) vs Drawable.draw(Renderer)
Più ho pensato a questo problema più ho trovato gli scenari in cui questo problema si pone.
Altri esempi:
writer.write(File) vs file.write(Writer)
video.play(Screen) vs screen.play(Video)
object.toString() vs toString(Object)
Ovviamente, per l'ultimo, Java usa object.toString()
Mi ha fatto pensare però. Non tutti gli oggetti sostituiscono il metodo toString
, quindi non violare il principio di segregazione dell'interfaccia?
Ho capito che questo è un problema onnipresente. Ho provato a fare qualche ricerca, ma non ho trovato le parole giuste per fare effettivamente search per questo problema. Ecco perché lo sto chiedendo qui.
La soluzione è puramente soggettiva, in base alle preferenze di progettazione? La soluzione è diversa a seconda del contesto come i problemi file
e video
? Per favore aiutami a capire di più.