Ho le seguenti due catene di ereditarietà:
BaseQueryBuilder BaseApplication
| |
| |
AppQueryBuilder Application
BaseQueryBuilder è una classe astratta, che AppQueryBuilder estende aggiungendo metodi di builder di query aggiuntivi specifici dell'applicazione. BaseApplication è l'interfaccia che Application implementa. Sto usando la composizione per unire il to, quindi il costruttore per Application ha un aspetto simile al seguente:
class Application(AppQueryBuilder queryBuilder) {
_queryBuilder = queryBuilder;
}
Si noti che altre funzioni in Application dipendono dall'esistenza di metodi in AppQueryBuilder che sono non definiti in BaseQueryBuilder , ma piuttosto aggiunti nella definizione di AppQueryBuilder .
Domanda : questo stile è mediocre? Sono un po 'a disagio sul fatto che il costruttore di Application richieda un'implementazione concreta, chiamata AppQueryBuilder , piuttosto che accettare la sua interfaccia genitore (sebbene ciò non sia possibile, come ho descritto sopra). Esiste un modello di progettazione alternativa più pulito e ovvio che dovrei usare?