Mantenibilità durante l'aggiunta di metodi findByX personalizzati a DAO

1

Sono all'inizio di un progetto che voglio avere la migliore testabilità e manutenibilità possibile. Per ottenere questo, sto leggendo molto sui concetti nell'area DDD, principalmente.

Per farti contestualizzare, supponi le seguenti entità:

  • utente
    È fondamentalmente un contenitore per gli account (vedi sotto) e le configurazioni;
  • Account
    È un modo per un utente di accedere. Ogni Utente può avere diversi account, uno per ciascun fornitore OAuth (Facebook, Google, ecc.);
  • Sessione
    È un token che punta a una data di scadenza Utente +. Ogni accesso genera una nuova sessione.

Devo trovare un utente per account (quando eseguo l'accesso) o sessione (quando sono già connesso).

Tuttavia, temo che riempirò i miei DAO con metodi findByX - questi sembrano essere i più performanti e semplici da capire, ma uniscono la struttura del DB a qualche regola aziendale - o sono io non va?

Questo post dice che dovrei usare un Specification interfaccia, che le sue implementazioni dovrebbero restituire i giusti criteri di query.

C'è qualche problema che posso affrontare in anticipo, come ad esempio il gonfiare i miei DAO con i metodi find , o sono preoccupato per questa architettura?

    
posta gustavohenke 23.07.2015 - 16:28
fonte

1 risposta

0

I metodi findBy non ti abbinano alla struttura del database, ti accoppiano a requisiti aziendali . Personalmente, non mi dispiace repository che hanno più metodi findBy, a patto che siano puliti e ordinati. Ad esempio:

User findById(string id);
User findByEmail(string email);
User findByUserName(string userName);

Per me sembra un'interfaccia pulita. A lungo andare può diventare un po 'più grande, ma non ne sono troppo preoccupato perché i metodi sono piccoli e di facile lettura.

D'altra parte, confronta questo:

IList<User> findByEmailLikeAndNameLike(string email, string name);
IList<User> findByEmailWithStatusAndLastLoginAfter(string email, UserStatus status, DateTime lastLogin);
IList<User> findByEmailAndStatus(string email, UserStatus status);

Questi sono metodi molto specifici che sono ancora requisiti di business ma diventano MOLTO maneggevoli nel lungo periodo e duplicano molta logica. Sostituirei questi tre metodi con un findBy generico su cui posso passare una specifica.

    
risposta data 24.07.2015 - 10:05
fonte

Leggi altre domande sui tag