Miałem wrażenie, że wszystkie są w zasadzie takie same. Czy obiekty modelu też są takie same?
W tej chwili w mojej architekturze mam:
class Person
{
public string PersonId;
public string Name;
public string Email;
public static bool IsValidName() { /* logic here */ }
public static bool IsValidEmail() { /* logic here */ }
}
class PersonService
{
private PersonRepository pRepository;
PersonService()
{
pRepository = new PersonRepository();
}
public bool IsExistingEmail(string email)
{
//calls repo method to see if email is in db
}
public Person GetPerson(email)
{
return pRepository.Get(email);
}
public void SavePerson(Person p)
{
if (Person.IsValidEmail(p.Email) && !IsExistingEmail(p.Email)
{
pRepository.Save(p);
}
}
}
class PersonRepository
{
public void Save(Person p)
{
//save to db
}
public Person Get(string email)
{
//get from db
}
public bool IsExistingEmail(string email)
{
//see if email in db
}
}
Więc który z tych klas są POCO
, Domain Object
, Model object
, entity
?
źródło
w zasadzie sprowadza się do wewnętrznej logiki
Wszystkie są zasadniczo używane do tego samego, po prostu tak inteligentne chcesz, aby były
zgodnie z przykładowym kodem Klasa Person byłaby obiektem domeny lub modelem, pozostałe 2 to usługa i repozytorium. Obiekty domeny, Pocos, modele, dtos itp. Są używane jak wiadomości, przekazywane z jednej warstwy do drugiej, klasa usług, taka jak PersonService, jest warstwą w aplikacji i to samo z klasą Repository, taką jak PersonRepository. aby uzyskać dobry przegląd, spójrz na http://bob-the-janitor.blogspot.com/2009/07/n-tier-design-revisit-part-1-over-view.html w tym przypadku chodzi o używanie jednostka danych, która jest w zasadzie dto
źródło
To bardziej konotacja funkcji; obiekt domeny to coś, co jest specyficzne dla twojej implementacji logiki i może być bardziej złożone niż proste POCO; byt ma konotację do reprezentowania czegoś (zwykle w odniesieniu do medium trwałego), a POCO jest tylko szybkim identyfikatorem klasy. Model to po prostu termin używany do reprezentowania obiektu (zwykle zawiera stan i zwykle dotyczy interfejsu użytkownika lub bazy danych).
Nie chodzi o to, że istnieje jakaś różnica funkcjonalna, są to po prostu różne terminy, które dokładniej coś opisują. Jak różnica między samochodem wyścigowym, ciężarówką i rodzinnym sedanem. Wszystkie są samochodami, ale każdy termin jest bardziej opisowy.
źródło
W powyższych odpowiedziach są już dobre wyjaśnienia dziedziny i modelu.
W przypadku encji kontekstu bazy danych oznacza pozycję w modelu relacji encji ERD . (tj. wiersz w tabeli)
W Microsoft-Dotnet-EntityFramework-World Entity oznacza obiekt, który można załadować z bazy danych i zapisać w niej przy użyciu kontekstu danych (bazowego). Zwykle jednostka nie może istnieć bez kontekstu danych (podstawowego). (Jednostka-) Testowanie funkcjonalności biznesowej tych klas jest trudne.
Pocos (zwykłe, stare, pospolite obiekty Runtime) mogą istnieć bez PersistenceFramework (EntityFramework lub NHibernate), dzięki czemu są znacznie łatwiejsze do przetestowania.
Słowo poco jest adaptacją pojo (zwykły stary obiekt Java), które zostały utworzone w świecie Java z tego samego powodu.
źródło
Obiekt domeny to jednostka w warstwie domeny Twojej aplikacji, np. klasa adresu. „Model” oznacza to samo - podmiot w „Modelu Domeny”.
POCO (zwykły stary obiekt CLR) to obiekt, który nie ma zdefiniowanego zachowania (metod) i zawiera tylko dane (właściwości). POCO są zwykle używane jako DTO (obiekty transportu danych) do przenoszenia danych między warstwami, a dane są następnie powszechnie używane do zapełniania obiektu / jednostki domeny.
źródło