2010-07-07 4 views
7

Diciamo che abbiamo classi di modelli "Utente" e "Hotel". Userò un User_Mapper e Hotel_Mapper per caricare/salvare/eliminare ecc. Voglio quindi che l'utente sia in grado di contrassegnare i propri hotel "preferiti". Nel database ho la mia tabella user_favourite_hotels che è una semplice tabella di link insieme a dire un campo per iscriversi agli aggiornamenti dell'hotel.Data Mapper - incerti sull'organizzazione

Quando si elencano gli hotel preferiti dell'utente, in che modo si si aspetta che funzioni da un punto di vista API? Una parte di me pensa che questo dovrebbe essere un metodo "findFavouritesByUserId" su Hotel_Mapper, ma oltre a dire che "sembra" giusto - tuttavia un collega suggerisce che i "preferiti" sono di proprietà dell'utente e dovrebbero quindi essere su User_Mapper.

Forse dovrei avere un User_Hotel_Favourites_Mapper? Stavo pensando di incorporare i dati "preferiti" nell'oggetto Utente in modo che vengano salvati e caricati ogni volta che l'oggetto Utente è. Non sono sicuro se sarebbe meglio suddividerlo nel proprio oggetto e mappatore.

Apprezzerei qualsiasi consiglio su come impostare al meglio l'API per quanto sopra e qualsiasi pro/contro/esperienza.

Grazie mille,

James.

risposta

2

Questo (presumibilmente ritirato) patterns&practices guide to designing data tier components suggerisce di inserire il metodo nel mapper del tipo di oggetto che si sta recuperando dalla chiamata.

Se si dispone di metodi che restituiscono un particolare tipo di entità aziendale, inserire questi metodi nel componente di accesso ai dati logici per quel tipo. Ad esempio, se si stanno recuperando tutti gli ordini per un cliente, implementare tale funzione nella Componente logica di accesso ai dati dell'ordine poiché il valore restituito è del tipo Ordine. Al contrario, se si recuperano tutti i clienti che hanno ordinato un prodotto specifico, implementare tale funzione nel componente Logica di accesso ai dati cliente.

Quindi, nel tuo esempio, andrebbe nell'Hotel Mapper come sta tornando Hotel.

1

Se si desidera memorizzare alberghi preferiti per l'utente, si utilizza il UserMapper, che si accorge che oggetto del dominio a User contiene modifiche preferiti, e aggiorna entrambe le tabelle per gli utenti e per user_favorite_hotels (basta il ID hotel).

quando si stanno recuperando alberghi preferiti di qualche utente, si utilizza HotelMapper e filtro impostato per essere basata su User, perché si dovrà lavorare con le istanze di Hotel.

0

Considerando che questo è stato chiesto più di 2 anni fa, non sono sicuro se una risposta ti riguarda ora. Ma ecco cosa penso comunque.

Se User potrebbe avere più tipi favoriti (compresi Hotel s), può essere utile avere un'astrazione UserFavourites per coprire tutti i possibili tipi di preferiti. UserFavourites potrebbe esporre un metodo getItems() per ottenere i Preferiti sottostanti.

Questo può essere gestito con l'aiuto di una classe manager per restituire l'oggetto Preferiti appropriato (FavouriteHotels per esempio) su cui è possibile chiamare il metodo getItems().