Ho un paio di classi derivate che sono generalmente simili, ma non hanno una classe base direttamente condivisa. Tutte queste classi implementano un'interfaccia comune. Ho notato quando ho aggiunto un'altra (nuova) classe derivata, che copio un paio di metodi privati dalle altre classi che hanno contenuti simili, ma l'implementazione effettiva differisce un po '. Hanno principalmente a che fare con il funzionamento interno della classe e non devono essere pubblici o interni.
Esempio:
public class MyButton : Button, ICoolFoo
{
private void InitializeFoo()
{
// Only used from class
}
private void UpdateFoo()
{
// Only used from class
}
public Foo SomeFoo()
{
// From ICoolFoo.
}
}
public class MyLabel : Label, ICoolFoo
{
private void InitializeFoo()
{
// Only used from class
}
private void UpdateFoo()
{
// Only used from class
}
public Foo SomeFoo()
{
// From ICoolFoo.
}
}
I metodi di inizializzazione e aggiornamento vengono utilizzati solo dall'interno della classe e non richiedono l'accesso dall'esterno. Il consumatore di queste classi non si preoccupa di loro quindi inserirle in un'interfaccia lo farebbe gonfiare inutilmente.
Ora, dal punto di vista dello sviluppatore, devo documentare che gli implementatori di ICoolFoo dovrebbero avere una struttura simile per mantenere i dettagli simili e facili da seguire, ma sono irrilevanti all'esterno. Idealmente aggiungerei qualcosa come una classe base con membri virtuali privati che posso aggiungere a qualsiasi nuova classe con poche sequenze di tasti, ma ovviamente non funziona.
Esistono modelli o un'architettura intelligente per migliorare questo design?