To zależy od Ciebie.
Większość ludzi powie ci, że nie jest to dobra praktyka, ale w niektórych przypadkach możesz jej uniknąć.
EF nigdy nie grał dobrze z DDD z wielu powodów, ale dwa wyróżniają się: nie można sparametryzować konstruktorów na swoich bytach i nie można enkapsulować kolekcji. DDD polega na tym, ponieważ model domeny powinien obejmować zarówno dane, jak i zachowanie.
W pewnym sensie EF zmusza cię do posiadania anemicznego modelu domeny, w tym przypadku możesz użyć encji jako DTO. Możesz napotkać pewne problemy, jeśli korzystasz z właściwości nawigacji, ale możesz szeregować te podmioty i wysyłać je przewodowo. Może to nie być praktyczne. Będziesz musiał kontrolować serializację dla każdego elementu, który ma właściwości, których nie musisz przesyłać. Łatwiejszym sposobem jest zaprojektowanie oddzielnych klas dostosowanych do przesyłania danych. W tym celu tworzone są biblioteki takie jak AutoMapper .
Na przykład: Załóżmy, że masz klasę wywoływaną Person
z następującą definicją:
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; get; }
// plus a bunch of other properties relevant about a person
}
Zakładając, że chcesz gdzieś wyświetlić listę pracowników, może być praktyczne wysłanie tylko Id
, FirstName
i LastName
. Ale musisz przesłać wszystkie inne nieistotne właściwości. To nie jest duży problem, jeśli nie zależy ci na wielkości odpowiedzi, ale ogólną ideą jest wysyłanie tylko odpowiednich danych. Z drugiej strony możesz zaprojektować interfejs API, który zwraca listę osób, w takim przypadku może być konieczne przesłanie wszystkich właściwości, co ma sens w przypadku serializacji i wysyłania jednostek. W takim przypadku utworzenie klasy DTO jest dyskusyjne. Niektórzy ludzie lubią mieszać byty i DTO, inni nie.
Aby odpowiedzieć na zaktualizowane pytanie, EF jest ORM. Jego zadaniem jest mapowanie rekordów bazy danych na obiekty i odwrotnie. To, co robisz z tymi obiektami przed i po przejściu przez EF, nie jest częścią jego obaw. Nie powinno tak być.