Jaka jest różnica między doktryną (aktywny rekord) i Xyster (maperem danych)?Jaka jest znacząca różnica pomiędzy ORM opartymi na mapach aktywnych i opartych na odwzorowaniach danych?
Odpowiedz
Różnica polega na tym, jak oddzielne są twoje obiekty domeny od warstwy dostępu do danych. Z ActiveRecord, to wszystko jeden obiekt, co czyni go bardzo prostym. Zwłaszcza jeśli twoje zajęcia są mapowane jeden do jednego do twojej bazy danych. Program odwzorowujący dane jest bardziej elastyczny i pozwala łatwo przetestować domenę niezależnie od kodu infrastruktury dostępu do danych. Ale złożoność ma swoją cenę.
muszę przyznać, że nie wiem doktrynę lub Xyster ale mogę przynajmniej dać pewien wgląd w różnicy między aktywnymi Records jako realizowane w Ruby kontra ORMs takich jak poddźwiękowego LINQ to SQL, nHibernate i Telerik. Mam nadzieję, że przynajmniej da ci coś do dalszego zbadania. Active Record
Ruby jest jego natywna biblioteka dostęp dane - nie jest odwzorowaniem z istniejącej biblioteki interfejsu SQL (np NET SqlDataTables) do konstrukcji języka - to jest biblioteka interfejsu. Dało to projektantom większą swobodę w budowaniu biblioteki w bardziej zintegrowany sposób, ale wymagało również wdrożenia szerokiego zakresu narzędzi SQL, których zwykle nie można znaleźć w ORM (np. Polecenia DDL są częścią interfejsu Active Record Rubiego).
ORMy są zmapowane do podstawowej struktury bazy danych za pomocą ręcznego kroku, w którym generator kodu otworzy bazę danych i przeskanuje ją - budując obiekty odpowiadające znalezionym tabelom (i procedurom przechowywanym). Obiekty te są konstruowane przy użyciu niskopoziomowych konstrukcji programowania SQL oferowanych jako część języka (np. Biblioteki .NET System.Data.Sql i SqlClient). Celem jest zapewnienie zorientowanym na nagrywanie, relacyjnym bazom danych płynniejszego, bardziej płynnego interfejsu podczas programowania: w celu zmniejszenia "niedopasowania impedancji" między modelem relacyjnym a programowaniem obiektowym.
Na marginesie, MS podjęło bardzo "aktywny zapis" krok w budowaniu natywnych konstruktów językowych w języku C# przez Linq do SQL i Linq na encje.
Mam nadzieję, że to pomoże!
Główną różnicą jest to, że w DataMapper model jest zdefiniowane w samej klasy ruby:
class Post
include DataMapper::Resource
property :id, Serial
property :title, String
property :body, Text
property :created_at, DateTime
end
Choć w ActiveRecord klasa jest w większości pusta klasa i można zorganizować przeszukuje bazę danych. Oznacza to, że do wygenerowania schematu potrzebujesz predefiniowanej bazy danych lub migracji w celu przeniesienia modelu danych z ORM.
DataMapper.auto_migrate!
wygeneruje dla ciebie schemat.
ActiveRecord różni się w tym względzie:
class Post < ActiveRecord::Base
end
W DataMapper nie ma potrzeby migracji, jak automigrations może wygenerować schemat lub szukać różnic między modelem a bazą danych i migracji dla Ciebie. Istnieje również możliwość ręcznej migracji, która może być używana w nietrywialnych przypadkach.
Również DataMapper ma dużo więcej składni "ruby", a funkcje takie jak leniwy ładunek, gdy robią ruchome warunki (jak ActiveRecord w Rails 3) są tam od początku.
Datamapper ma również funkcję, która każdy rekord w bazie danych mapuje do jednego obiektu ruby, co nie jest prawdą w przypadku ActiveRecord. Więc jeśli wiesz, że rekordy bazy danych są takie same, wiesz, że dwa odniesienia do obiektu ruby będzie wskazywać na ten sam obiekt zbyt.
Po stronie licznika, podczas gdy Rails 3 może obiecać wymienne ramy, Railtie Datamperper (dm-rails) nie jest gotowe do produkcji i wiele funkcji może nie działać.
Zobacz ten page aby uzyskać więcej informacji.
jak bałwan powiedział, różnica tkwi w tym, jak zdecydujesz się oddzielną domenę obiektów z warstwy dostępu do danych.
W skrócie, Aktywny "rekord" odwzorowuje obiekt na rekord w bazie danych.
Tutaj jeden obiekt = jeden rekord.
Z tego, co wiem, Dane "mapper" mapuje obiekt z danymi, ale nie musi to być rekord - może to być także plik.
Tutaj jeden obiekt nie musi być jeden rekord
To w ten sposób, ponieważ celem tego wzoru: do utrzymania w reprezentacji pamięci i trwałego magazynu danych, niezależnie od siebie, a sama odwzorowującym danych ,
Nie umieszczając tego 1 obiektu = 1 ograniczenia zapisu, program Data Mapper uniezależnia te dwie warstwy od siebie.
Wszelkie sugestie/poprawki do mojej odpowiedzi są mile widziane, w przypadku myliłem gdzieś.