2010-10-04 20 views
42

Jaka jest różnica między obiektem modelu MVC, obiektem domeny i DTO?Jaka jest różnica między obiektem modelu MVC, obiektem domeny a DTO

Moje rozumienie jest:

MVC model obiektowy:

modeluje dane mają być wyświetlane przez odpowiedniego widoku. Jako taki może nie mapować bezpośrednio do obiektu domeny, tj. Może zawierać dane z jednego lub większej liczby obiektów domeny.

  1. po stronie klienta
  2. Może zawierać logiki biznesowej, na przykład walidacji, obliczone właściwości itp
  3. Brak Trwałość podobne metody

obiekt domeny:

Object że modele prawdziwy obiekt świat w domenie problem jak Reservation, klienta, zlecenia, itp Służy do ustąpi dane .

  1. stronie serwera
  2. nr logiczny obiekt

DTO (obiektem przekazywania danych)

obiektu wykorzystywany do przesyłania danych pomiędzy warstwami, gdy warstwy są w oddzielnych procesach, np od DB do aplikacji klienckiej. Umożliwia pojedynczą transakcję przez cały przewód, a nie wiele połączeń. DTO zawiera tylko dane i metody dostępu, bez logiki. Dane dotyczą konkretnej transakcji bazy danych, więc nie mogą bezpośrednio przejść do obiektu domeny, tj. Mogą zawierać dane z jednego lub większej liczby obiektów domeny.

  1. Używane po obu stronach, jak przeszedł między warstwami
  2. Brak logiki biznesowej
  3. Nie związane Trwałość Metody

więc do pytania:

(1) Czy moje rozumienie jest poprawne? Czy brakuje mi kluczowych punktów?

(2) Czy istnieją jakieś powody, dla których nie należy używać obiektów domen jako modelu MVC, zakładając, że obiekty modelu nie wymagają dodatkowej logiki biznesowej?

(3) Czy istnieją jakieś powody, aby nie używać DTO jako Modelu MVC zakładając, że obiekty Modelu nie wymagają dodatkowej logiki biznesowej?

Dzięki.

Tim

+5

Dobre pytanie .. +1 – nawfal

Odpowiedz

7

domeny i DTO może być również obiektami „model” - można mieć widok do renderowania szczegóły „Klient” obiektu domeny.

Obiekt domeny może mieć logikę biznesową w celu wymuszenia właściwości encji domeny. walidacja jest jednym z takich przypadków.Obiekt domeny sam w sobie nie zawiera metod związanych z trwałością, ale może zawierać metadane (np. Adnotacje) w celu obsługi trwałości. Model programowania POJO umożliwia użycie tego samego obiektu, co domena, obiekt DTO i obiekty modelu. - zasadniczo nie zostaną wdrożone żadne zewnętrzne interfejsy, które będą miały zastosowanie tylko do jednej warstwy, ale nie będą miały zastosowania do innych.

+1

Tak, właśnie to robię. Rzeczywiście prawie w każdym przypadku nigdy nie miałem potrzeby używać niczego innego niż obiekt Domain. DTO byłoby dla złożonego zapytania z wieloma elementami danych obejmującymi obiekty domeny. –

+1

A oddzielna klasa modelu MVC jest naprawdę potrzebna tylko wtedy, gdy istnieje znacząca logika biznesowa/przetwarzanie powiązane z danymi modelu, które mają być wyświetlane? –

+1

tak, to będzie jeden z powodów posiadania odpowiedniego dedykowanego modelu w przeciwieństwie do używania obiektu domeny. Twój obiekt domeny może przechowywać datę tylko UTC i to wystarczy dla całej logiki biz. Ale w interfejsie użytkownika, powiedzmy, będziesz musiał wyświetlić go w strefie czasowej konta użytkownika. Model będzie przydatny do wykonywania tych specyficznych obliczeń interfejsu użytkownika. – kartheek

11

Obiekty domeny i modelu są zasadniczo takie same i mogą zawierać logikę biznesową. W zależności od implementacji obiekty domeny i DTO mogą być równoważne, jeśli usunie się logikę biznesową z modelu do klasy usług.

Często kluczowym wariantem DTO jest model widoku, który jest używany wyłącznie do przesyłania danych między modelem domeny a widokiem, chociaż często model widoku może zawierać logikę, chociaż powinna to być wyłącznie logika interfejsu użytkownika.

+0

Dziękuję obu respondentom. Teraz wydaje mi się to bardziej jasne. Obiekty domeny mogą mieć logikę biznesową, taką jak walidacja, logika powiązana bezpośrednio z danymi. –

+2

Oddzielny obiekt modelu MVC jest potrzebny tylko do enkapsulacji logiki związanej z wyświetlaniem danych w widoku. Jeśli go nie ma, łatwiej jest użyć obiektu domeny jako obiektu modelu MVC. –

1
A DTO = is an object that carries data between processes. 

Ale najciekawsze jest to, że nie ma żadnego zachowania poza przechowywaniem i odzyskiwaniem własnych danych !!!

Kłucie z metodologią MVC ...

Domain = subject of your entire application. 

Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application. 

Mogą obvioussly mieć zachowanie i właściwości (zobacz różnicę DTO).

Często aplikacja (lekka) może mieć jeden model - przypadek, w którym model jest dokładnie Twoją domeną. Kolejnym modelem może być zupełnie inny typ obiektu, który przetwarza inny. Oba w tym przypadku są częścią Twojej domeny i są nazywane "modelami domen - obiektami".

Mamy nadzieję, że ta odpowiedź jest wyczerpująca i wyjaśnia wszystko!

0

1) Nie, jest to definicja ViewModel. Obiekty modelu MVC i obiekt domeny są takie same.
2) Modele domenowe (obiekty) są zawsze obecne, logika biznesowa jest opcjonalna
3) Jeśli w obiekcie domeny nie ma logiki biznesowej, automatycznie staje się ona DTO.

0

Każda definicja dla większości obiektów jest oparte na różnych zamiast korzystania z obiektów:

Model: jest ogóle definicja za korzystanie obiekt w klienta lub serwerze.

  1. Model View: jest obiekt używając w client większość czasu.
  2. Domain Object: jest obiektem obiektu przy użyciu w server i transfering data to the database.
  3. Data Transfer Object(DTO): jest to obiekt, który transferu danych z jednego obiektu do innego obiektu, specjalnie w uzyskaniu danych w API Call (na przykład: API GET Metoda wezwanie do pobierania danych nie musi dać modele baz danych do klienta, w tym celu użyjesz dto).

Uwaga: the definitions are true most of the time, ale w niektórych sytuacjach nie są one praktyczne.

Powiązane problemy