Навіщо потрібний datamapper, PHPClub - клуб розробників PHP
Духовність™
Просунутий новачок
Навіщо потрібен datamapper?
В одній з тем прочитав таке:Мене відразу насторожив факт присутності звернення до БД у класах, які по-моєму є просто контейнерами даних.
Я так зрозумів, що саме для поділу даних об'єкта (моделі) та методів для роботи з ними, і вигадали DataMapper:
Тобто. Власне клас моделі необхідно оформити як набір якостей і очевидних операцій типу set/get, а mapper вже повинен усе це у базу писати.
Так ось, мені не зрозуміло, а в чому западло зберігати в одному класі методи для роботи з цими даними та їх властивості, не роблячи цього поділу?
Мінус у цьому бачу один - це розростання коду класу моделі , коли дані класу потрібно буде писати у безліч таблиць, у різних варіаціях. Але чи є велика різниця, робити купу mapper-ів або створити один великий клас-модель з купою цих методів?
Тобто наскільки я розумію при використанні mapper-s:
а можна було зробити і так:
Духовність™
Просунутий новачок
Wickedдобре. а чи можна в класі моделі оголосити імена полів таблиць (для того, щоб контролювати атрибути, які заносяться в модель)? чи це вже відступ від ідеології?
Духовність™
Просунутий новачок
Black Raven
Patterns of Enterprise Application Architecture.zip (2.03 MB)
взагалі мені здається основний сенс зводиться до того, що active record цілком самостійний об'єкт і знає про бд, а data mapper прибирає з об'єкта знання про бд. якщо я не прав - виправте, я сам нуб у цьому питанні
взагалі напевно варто перенести тему в теорію
Духовність™
Просунутий новачок
типу того. ми фактично розділили ActiveRecord на два класи. єдина вигода і сфера застосування мепера в порівнянні з ActiveRecord, це, як мені здається, можливість працювати з декількома таблицями, не штовхаючи цю логіку в об'єкт моделі .
так мабуть
Black Raven
triumviratя ж не просто так дав посилання на класику
ось що написано про активний рекорд:An object carries both data and behavior.Дуже ця data є persistent і потреби бути stored in a database. Active Record використовує найбільш широку програму, putting data access logic в домашній об'єкт.Цей спосіб всі люди знають, як читати і отримувати свої дані і з database.
а ось про data mapper:Objects і relative databases мають різні mechanisms for structuring data. Багато частин з предмета, такі як колекції і узгодження, не є представницьким в relative databases.Коли ви будуватимете об'єкт моделі з безліччю бізнес-логічності, вона є здатною до використання цих механізмів для більшої організації вашого часу і того, що рухається. goes with it. Doing so leads to variant schemas; що це, object schema and relational schema не match up.
Ви хочете, щоб перенести дані між двома schemas, і це переведення даних стає складністю в його правому праві.Якщо в пам'яті об'єкти знають про relative database structure, зміни в одному tend to ripple to thether.
Data Mapper є частиною програмного забезпечення, яке separat the in-memory objects від database. Це відповідність є переведення даних між двома і навіть ізолювати їх від всіх інших. З Data Mapper the in-memory об'єкти необхідне, щоб дізнатися, що вони є database present; вони потребують не SQL Interface code, і певно не знають, щоdatabase schema. (The database schema is always ignorant of objects that use it.) Since it's form of Mapper (473), Data Mapper itself is even unknown to the domain layer.