Sto per infrangere la regola di Onion Architecture?

1

Sulla base della struttura del progetto di seguito avrò alcune domande

  • Livello di dominio

1) MyApp.Domain.Entities (DLL)

Product.cs

PagedResult.cs

Referentes

Nessun riferimento

2) MyApp.Domain.Interfaces (DLL)

IUnitOfWork.cs

IProductRepository.cs

Referentes

MyApp.Domain.Entities

3) MyApp.Domain.Common.Interfaces (DLL)

IClock.cs

ICryptography.cs

ILogging.cs

Referentes

Nessun riferimento

  • Livello infrastruttura

1) MyApp.Infrastructure.Logging

Implementerà l'interfaccia ILogging

Referentes

MyApp.Domain.Common.Interfaces

2) MyApp.Infrastructure.Cryptography

Implementerà l'interfaccia ICriptografia

Referentes

MyApp.Domain.Common.Interfaces

4) MyApp.Infrastructure.Data

Implementerà l'interfaccia IUnitOfWork.cs e IProductRepository.cs

Referentes

MyApp.Domain.Entities

MyApp.Domain.Interfaces

------------------------------ Domande ---------------- -----------------

A) Nel mio livello di dominio ho MyApp.Domain.Common.Interfaces che manterrà le interfacce che può essere utilizzato per tutti i progetti, queste interfacce rappresenteranno elementi comuni che l'intero progetto può utilizzare e saranno implementati in Infrastructure Layer.

Sto violando alcune regole di Onion Architecture che lo hanno nel mio Domain Layer?

    
posta Harry Axl 18.12.2018 - 18:32
fonte

1 risposta

1

Ho avuto lo stesso problema con la mia app e dalle mie indagini, sembra che la maggior parte della gente pensi che questa sia una cattiva idea:

  1. Quando le Entità utilizzano i repository, ad esempio: qui
  2. Quando le Entità fanno uso di Servizi, ciò potrebbe essere evitato da semplici refactoring, ad esempio: qui

Nel tuo caso, sembra che IClock e ICryptography facciano parte del meccanismo di consegna, non di un dominio e quindi dovrebbero vivere nel livello dell'infrastruttura. Non è chiaro il motivo per cui le tue entità dovrebbero dipendere da queste. Se non dipendono da tale infrastruttura, non dovresti tenerlo nel livello Dominio anche se questo è un codice comune per tutti i progetti.

Come per ILogging puoi risolverlo registrando gli eventi di dominio prodotti dalle tue Entità. In questo modo la registrazione può essere parte di un repository che risiede nel livello infrastruttura. Vedi qui e qui

    
risposta data 04.01.2019 - 10:14
fonte