Domanda

Ho letto alcuni articoli su POCO nel framework dell'entità ma ancora non capisco per cosa posso usarlo. In che modo POCO può beneficiare i miei progetti?

È stato utile?

Soluzione

Standard POCO per " Plain Old Clr Object " ;. Si riferisce a uno stile di architettura ORM in cui tutto il lavoro di persistenza e caricamento dei dati dall'archivio dati viene svolto dal sistema senza che l'oggetto stesso sappia cosa gli sta accadendo. Ciò significa che l'ORM può supportare oggetti totalmente semplici che non sono stati modificati in alcun modo tenendo presente l'ORM. Un ORM che supporta la persistenza di POCO non richiede che la tua classe erediti da una base specifica, implementi qualsiasi interfaccia o addirittura tag con metodi con qualsiasi attributo.

Il contrario completo di questo (a volte noto come Data Access Objects - o DAO) è quando tutto l'archiviazione è gestita dall'oggetto stesso, sa esattamente come serializzare e archiviare se stesso e come caricarsi quando richiesto. In questo caso gli oggetti devono essere utilizzati esclusivamente per trasferire i dati e non devono rappresentare nessuna delle logiche aziendali del sistema.

In realtà questo è più di uno spettro con queste due situazioni alle due estremità. Molti ORM siedono da qualche parte nel mezzo, richiedendo che la persistenza sia gestita esternamente alla classe, ma spesso richiedono anche che alcuni metadati o interfacce vengano implementati sulle classi che persistono per aiutare le cose.

EF (v1) non supporta i POCO. Gli oggetti devono implementare varie interfacce (per fornire notifica delle modifiche ai valori delle proprietà, ecc.) Per essere persistenti dal framework. Credo che ci siano framework addon che tentano di aggiungere il supporto POCO all'EF, ma non so quanto abbiano successo. Il EF in .net 4.0 avrà il supporto POCO.

Il POCO è spesso considerato buono perché consente una forte separazione delle preoccupazioni. Puoi definire i tuoi oggetti dati per avere una conoscenza assolutamente zero del meccanismo che verrà utilizzato per memorizzarli. (Quindi rende facile cambiare il meccanismo di archiviazione per qualcosa di diverso in futuro). Significa anche che non è necessario progettare gli oggetti dati con alcuna considerazione per il database / framework utilizzato per memorizzarli.

Altri suggerimenti

POCO è solo "Semplice oggetto CLR vecchio". È solo una classe standard, qualsiasi classe standard.

In termini di EF, le persone si riferiscono alla possibilità di configurare EF per memorizzare le proprie classi (non generate direttamente da EF) nel database.

POCO è solo una classe normale, senza interfacce o classi base aggiunte per farlo funzionare con il tuo livello di database (in questo contesto).

I vantaggi sono: 1) nessuna dipendenza da quel particolare livello di database, quindi è possibile sostituirlo con uno migliore (ad es. NHibernate) senza dover modificare altro che il livello di database.

2) semplifica il test unitario delle lezioni.

3) nessun codice di targa della caldaia per avvisare quando una proprietà è cambiata ecc. solo getter e setter semplici.

In teoria i tuoi oggetti di dominio vengono caricati dall'ORM, senza che l'oggetto debba avere voce in capitolo su come viene caricato, su come vengono monitorate le modifiche o su come viene salvato ecc.

NHibernate fa un ottimo lavoro in questo, l'unico requisito è che devi rendere virtuali tutte le proprietà / i metodi, questo è molto meglio di qualsiasi dipendenza forte.

I POCO sono classi progettate per trasferire i dati all'interno dell'applicazione (ovvero spostare i dati dal livello dati al livello dell'interfaccia utente). Disaccoppiano inoltre la struttura dell'applicazione dallo schema del database.

Su piccoli progetti questo non è un grosso problema, ma man mano che il progetto cresce, il modello a oggetti (come si progettano i POCO) tende a deviare dallo schema del database.

Altri metodi generalmente utilizzati in .Net sono DataTables e DataSet. In genere i dati vengono recuperati utilizzando il nome della colonna. In questo modo accoppi il nome della colonna nel tuo database. Se il nome della colonna cambia nel database, il codice si interrompe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top