POCO oznacza "Zwykły stary obiekt C#" lub "Zwykły stary obiekt CLR", w zależności od tego, o kogo pytasz. Jeśli framework lub API stwierdza, że działa na POCO, oznacza to, że pozwala zdefiniować model obiektu idiomatically bez konieczności tworzenia obiektów z konkretnych klas bazowych. Ogólnie rzecz biorąc, struktury działające na POCO pozwalają na większą swobodę i kontrolę nad projektowaniem i wdrażaniem twoich zajęć, ponieważ mają mniej wymagań, aby działać poprawnie.
Niewiedza perswazji oznacza, że w jak największym stopniu wszystko w kodzie operującym na poziomie logiki biznesowej lub wyższym nie wie nic o rzeczywistym projekcie bazy danych, jakim silniku bazy danych pracujesz ani jak i kiedy obiekty otrzymują pobrane z bazy lub utrwalone do bazy danych. W przypadku MEF ignorancja utrwalania jest uzyskiwana przez pracę nad POCO i używanie LINQ do wykonywania zapytań (tj. Nie wymaganie od użytkownika tworzenia jakichkolwiek zapytań SQL w celu pobrania pożądanych obiektów).
To otwarte pytanie, ale ogólnie zgadzają się, że w większości przypadków obiekty domeny (lub obiekty biznesowe - tak czy owak, wspomniane powyżej POCO) powinny być nieświadome logiki trwałości. Oznacza to, że zamiast wywoływać MyBusinessObject.Save()
, masz klasę menedżera IO lub adaptera, a Ty wywołujesz Manager.Save(MyBusinessObject)
. W ten sposób unikasz ujawniania semantyki trwałości obiektów biznesowych - w ten sposób lepiej rozdzielasz obawy.
Ale z encji EntityFramework generujemy tę separację już z wygenerowanymi klasami, które dziedziczą z ObjectContext do trwałości i klasami reprezentującymi encję. Czytam artykuł o magazynie msdn na EF 4.0 i jest sekcja o POCO, w artykule pisarz tworzy obiekt od zera ... Czy nie możemy użyć wygenerowanych jednostek? Czy to nie POCO? – pdiddy
Czy możesz zamieścić link do artykułu? Jeśli twoja struktura wymaga, aby twoje klasy * encji * pochodziły z konkretnej klasy bazowej lub zawierały atrybuty specyficzne dla ramek lub implementowały interfejsy framework, to nie obsługuje POCO. Jeśli EF 4.0 nie umieszcza klasy bazowej lub wymagań dotyczących przypisania w swoich klasach encji, to obsługuje POCO. Zauważ, że to ograniczenie nie dotyczy klas, które są specjalnie przeznaczone do zarządzania semantyką trwałości - one * mają * być sprzężone z uporczywością, a mówienie o POCO tam brakuje punktu. – Dathan
EF domyślnie użyje 'EntityObject' jako swojej klasy bazowej dla wszystkich jej elementów -> zdecydowanie nie POCO. * BUT *: dzięki EF4 masz możliwość włączenia obsługi POCO, w którym to przypadku twoje klasy nie pochodzą z żadnej konkretnej klasy bazowej, nie potrzebują implementować żadnego konkretnego interfejsu i nie potrzebują żadnych atrybutów albo -> czysty POCO. –