Код, реализующий сохранение связей, должен быть в методах сущности, которая «владеет» этими связями (не в подчинённых объектах).
подумав )), всё таки не могу согласиться с вами до конца. Вариант, когда код привязки располагается в той модели которую привязывают ( и не только модель, но соответствующие шаблоны и контроллеры) имеет очевидные преимущества:
1. Одна и та же модель, как правило привязывается ко всем другим одинаково (по моей статистике), т.е. картинки привязываются одним способом ко всем моделям, теги могут привязываться вторым способом, но всё равно одинаковым для всех моделей.
2. Дисциплинированность разработчиков: описав один раз привязку тегов — можно быть уверенным, что они будут привязываться единообразно ко всем моделям, и таблицы связей с полями будут единообразные.
3. Некоторые модели могут привязываться к десятку других моделей абсолютно одинаково, и в этом случае единственность кода, где это делается, имеет первостепенное значение с точки зрения вероятности ошибок и быстроты внесения правок.
4. Гибкость подключения / отключения новых связей, например, не было сначала тегов, потом появилась в них необходимость — добавили модель и контроллер с кодом привязки и всё — можно привязывать теги к любой модели просто указав у неё наличие связи с тегами ( ну и создав таблицу связей)
Интересно почему во многих примерах про Data Mapper используют явные методы getName(), setName(), а не __get() и __set()?
Еще вопрос, если использовать DM, то где должен располагаться код, реализующий сохранение связей? Вопрос с подковыркой ), к примеру, есть модельTag, теги могут одинаковым способом (меняется только название таблицы связей или fk) привязываться к другим моделям Post, QA, Book. С точки зрения понятности кода, привычнее
$post = new Post;
$post->addTags( [1,2,3] );
$qa = new QA;
$qa->addTags( [1,2,3] );
но с точки зрения дублирования кода, лучше
$post = new Post;
$qa = new QA;
Tag::addTo( $post , [1,2,3]);
Tag::addTo( $qa , [1,2,3]);
Не бейте сильно, хочется разобраться раз и навсегда )).
наверно мы не поняли друг друга, find() — загрузить просто пост без связей, findWithComments — значит загрузить пост с его комментариями
а как ваш пример с этим связан?
Ну да, это вечная дилемма разработчика — скорость разработки или скорость работы скрипта, но хочется найти какую-нибудь серебряную пулю, которая бы подходила большинству проектов. А нет куска кода на PHP с реальным и удачным DataMapper-ом?
с одной стороны палки, законы, которых большинство населения не просило, с другой стороны — гражданская активность, для которой даже делать ничего не надо, просто не купить — нормальный баланс сил.
Расстраивает, что люди пассивно воспринимают последние акты копирастии, что налоги с болванок, что торренты.
А тем временем каждый, может на это ответить, просто объявив всеобщий бойкот, очередной премьере в кино или новому альбому.
Пусть защитники копи-чести после этого посчитают убытки.
Почему всегда, когда в стране появляется какая то проблема, и государство не предлагает, а сразу воплощает решение этой проблемы, начинаешь думать, что лучше бы осталась старая проблема.
Перефразируя известное: «если государство взялось за решение вашей проблемы — то теперь у вас две проблемы» ))
Идиотизм как и во всей российской судебно-юридической системе. По логике судов теперь нельзя регать домен, открывать оффлайн газету/справочник, где есть слова ufa + rabota или «тракторные заводы». По ходу мы наблюдаем обратную волну — теперь владельцы ТЗ занимаются киберсквоттингом
подумав )), всё таки не могу согласиться с вами до конца. Вариант, когда код привязки располагается в той модели которую привязывают ( и не только модель, но соответствующие шаблоны и контроллеры) имеет очевидные преимущества:
1. Одна и та же модель, как правило привязывается ко всем другим одинаково (по моей статистике), т.е. картинки привязываются одним способом ко всем моделям, теги могут привязываться вторым способом, но всё равно одинаковым для всех моделей.
2. Дисциплинированность разработчиков: описав один раз привязку тегов — можно быть уверенным, что они будут привязываться единообразно ко всем моделям, и таблицы связей с полями будут единообразные.
3. Некоторые модели могут привязываться к десятку других моделей абсолютно одинаково, и в этом случае единственность кода, где это делается, имеет первостепенное значение с точки зрения вероятности ошибок и быстроты внесения правок.
4. Гибкость подключения / отключения новых связей, например, не было сначала тегов, потом появилась в них необходимость — добавили модель и контроллер с кодом привязки и всё — можно привязывать теги к любой модели просто указав у неё наличие связи с тегами ( ну и создав таблицу связей)
Еще вопрос, если использовать DM, то где должен располагаться код, реализующий сохранение связей? Вопрос с подковыркой ), к примеру, есть модельTag, теги могут одинаковым способом (меняется только название таблицы связей или fk) привязываться к другим моделям Post, QA, Book. С точки зрения понятности кода, привычнее
но с точки зрения дублирования кода, лучше
Не бейте сильно, хочется разобраться раз и навсегда )).
а как ваш пример с этим связан?
в Америке, на языке оригинала ))
А тем временем каждый, может на это ответить, просто объявив всеобщий бойкот, очередной премьере в кино или новому альбому.
Пусть защитники копи-чести после этого посчитают убытки.
Перефразируя известное: «если государство взялось за решение вашей проблемы — то теперь у вас две проблемы» ))