Questo mi sta facendo impazzire. EF ci offre un'esperienza di grande convenienza nello sviluppo.
Tuttavia, se abbiamo bisogno di usare il modello Entity nel livello superiore, inseriamo sempre un riferimento dal livello superiore a DAL o qualche livello in basso che detiene la classe Entity. Ho visualizzato la situazione.
+-------------------+
| |
| Presentation |
(This layer is directly referring to DAL, which break the 3-tier architecture rules)
+-------------------+
|
|
|
|
+---------v---------+
| |
| BLL |
(Function that returning Entity Model)
+-------------------+
|
|
|
|
+---------v---------+
| |
| DAL |
(Repo & Entity Model)
+-------------------+
Implementare qualcosa come DTO su BLL è piuttosto pesante e non può risolvere completamente questo problema. Quindi non posso provare ad implementare DTO su tale livello.
Nel frattempo, ho scoperto che alcuni progetti potrebbero eliminare quei Entity Model
come il seguente diagramma. È un buon modo per risolvere il problema?
+-------------------+
| |
+------------------+ Presentation |
| | |
| +---------+---------+
| |
| |
| |
| |
+-----v------+ +---------v---------+
| | | |
| Entities <-----------+ BLL |
| | (Function that returning Entity Model)
+-----^------+ +---------+---------+
| |
| |
| |
| |
| +---------v---------+
| | |
+------------------+ DAL |
| (Repositories) |
+-------------------+
Sebbene questo progetto possa risolvere parte del problema, gli sviluppatori possono tentare di aggiornare l'entità al DB da Presentation Layer
chiamando entity.SaveChanges()
. Che è così pericoloso Come posso impedire ad altri sviluppatori di chiamare SaveChanges()
al livello superiore?