2010-03-10 6 views

Odpowiedz

3

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ę.

0

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!

1

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.

1

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ś.