Qui non c'è una risposta "corretta". Si tratta davvero di trovare i compromessi di cui sei soddisfatto.
La condivisione di un modello su più livelli consente l'accoppiamento per la velocità di sviluppo. Ti permetterà di far funzionare il tuo codice più velocemente, ma abbinerà intrinsecamente tutti i tuoi strati. Una modifica al modello nel livello Servizio influirà sui modelli che l'utente API vede.
D'altro canto, avere modelli dedicati per ogni livello aumenta i tempi di sviluppo, ma disaccoppia i tuoi livelli. Se apporti una modifica a un modello nel livello di servizio, non ricade automaticamente sugli altri livelli. Ciò riduce il rischio di rompere inavvertitamente le cose in altri livelli o di divulgare inavvertitamente informazioni non necessarie ai consumatori dell'API o al database.
Il rovescio della medaglia qui è, come detto prima, il costo aggiuntivo di sviluppo anticipato, così come il costo aggiuntivo richiesto quando il modello cambia effettivamente do deve applicarsi ad altri livelli.
Quindi stai scambiando tra accoppiamento lento e velocità di sviluppo.
Does every layer need to have it's own business object representation?
No, non richiede a
Se consideri la velocità di sviluppo rispetto ai costi di manutenzione, la condivisione di un modello su più livelli è una buona scelta.
D'altro canto, la maggior parte dei costi del progetto software sono in fase di manutenzione. Quindi organizzare il tuo codice per semplificare la manutenzione potrebbe farti risparmiare tempo e denaro a lungo termine.
Dovrebbe ogni livello ha la propria rappresentazione dell'oggetto business?
La risposta dipende davvero da cosa si sta ottimizzando.