ФорумПрограммированиеPHP для идиотовPHP и ООП → Репозиторий, Модель, Инкапусуляция

Репозиторий, Модель, Инкапусуляция

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 13:08, спустя 15 минут 49 секунд

    Если тебе интересно, в какой-нибудь жанге это вот так выглядит:

    obj = Page.objects.get(pk=562)
    obj.name = 'something'
    obj.save()
    

    или лучше

    Page.objects.filter(pk=562).update(name='something')
    

    @adw0rd, не лучше, это две абсолютно разные вещи.

    Спустя 72 сек.

    @artoodetoo, не вхолостую, просто очередной oop паттерн, который да, отссывает перед data mapper'ом, но все же имеет право на жизнь в силу повышения readability твоего кода.

    Спустя 29 сек.

    тут какбы ступеньки: raw sql => ar => dm

    Спустя 23 сек.

    без ar не было бы и dm иначе говоря. dm просто расширение методологии ar, которое добавило уйму интересных и полезных фишечек в управляемость кода

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 13:28, спустя 19 минут 35 секунд

    А без него мы бы написали _буквально_ то, то хотим сделать: "UPDATE page SET name='ololo' WHERE id=536".

    мой второй пример

    Page.objects.filter(pk=562).update(name='something')
    

    сделает точно такой же запрос и да, это нагляднее и экономичнее чем собирать из БД все поля, а потом сохранить что-то

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 13:30, спустя 1 минуту 44 секунды

    @adw0rd, а, если ты про sql query выше, то принято, отмазался )) а про разницу этих двух вещей помню отлично еще с бага на пыхе )

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 13:32, спустя 2 минуты 6 секунд

    Если тебе интересно, в какой-нибудь жанге это вот так выглядит:

    obj = Page.objects.get(pk=562)
    obj.name = 'something'
    obj.save()
    

    или лучше

    Page.objects.filter(pk=562).update(name='something')
    

    @adw0rd, не лучше, это две абсолютно разные вещи.

    Да, это разные вещи в плане исполнения, но не достигнутой цели. По факту будет изменено поле name, второй вариант, как я сказал выше, сделае это быстрее и экономичнее, но не запустит например сигналы.

    Первый вариант с получение всех данных по объекту и последующим .save() удобен тем что можно получить в начале функции объект, потом с ним производить кучу разной логики, после чего сохранить все изменения за один раз.

    Спустя 84 сек.

    @adw0rd, а, если ты про sql query выше, то принято, отмазался )) а про разницу этих двух вещей помню отлично еще с бага на пыхе )

    @phpdude, помню что-то было такое, но про что именно речь не вспомню... Есть ссылка на пост об этом?

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 13:34, спустя 2 минуты 5 секунд

    @adw0rd, не, нету. можешь поискать если интересно, так же, сигналы проепали ))

    Спустя 44 сек.

    @adw0rd, к слову как раз в 2 этих вариантах и прослеживаются AR и DM :-)))

    Сапожник без сапог
  • lekafe

    Сообщения: 149 Репутация: N Группа: Адекваты

    Spritz 27 ноября 2014 г. 14:57, спустя 1 час 23 минуты 25 секунд

    если посмотреть http://design-pattern.ru/patterns/data-mapper.html, то это мой репозиторий, но там внизу четко написана, модель не должна знать о маппере вообще ничего.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 27 ноября 2014 г. 15:14, спустя 17 минут 4 секунды

    Там не так написано. Там написано что объекты (в твоей формлировке модель) не должна знать о БД, SQL и структуре в БД. Объекты пользуются маппером, а маппер работает с БД

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи
  • lekafe

    Сообщения: 149 Репутация: N Группа: Адекваты

    Spritz 27 ноября 2014 г. 21:16, спустя 44 минуты 25 секунд

    Ок, понял, то есть я могу поместить DM в AR. Но у меня возникает проблема, у меня может не существовать реального класса модели.
    а имеенно этот код

    $manager = $this->repositoryManager;
    $repository = $manager->getByModule('pages');
    $model = $repository->read(562);

    в $model может поместить инстанс класса Model, а может и Page, то есть если я опредлел класс Page и указал в метаданных что для данного модуля есть кастомная модель, то он вернет ее, а если нет, то вернет базовую.

    В AR за пораждение новых моделей отвечает статический класс, а у меня нет класс, все плохо ((((
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 28 ноября 2014 г. 0:46, спустя 3 часа 29 минут 37 секунд

    @lekafe, пустые страдания. Делай как я говорю - и станешь богатым и знаменитым.
    не всё полезно, что в swap полезло
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 28 ноября 2014 г. 1:41, спустя 54 минуты 42 секунды

    Page(id=562).update(name='something') так делать нельзя в жанге? я не пробовал, но почему-то представлял это себе как-то так
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 28 ноября 2014 г. 6:06, спустя 4 часа 25 минут 6 секунд

    Печенька в том, что SQL не нужен. В вебе по крайней мере. Нужно отображение таблиц БД в структуры ЯП (массивы/хеши, ещё бы в деревья было неплохо), ACID, индексы, ограничения (constraints). А это всё доступно без SQL. Поэтому AR-подобная семантика так любима у веб-программистов.
    не всё полезно, что в swap полезло
  • lekafe

    Сообщения: 149 Репутация: N Группа: Адекваты

    Spritz 28 ноября 2014 г. 10:51, спустя 4 часа 45 минут 12 секунд

    @master, а ты стал богатым и знаменитым?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 ноября 2014 г. 11:22, спустя 31 минуту 19 секунд

    @master, а ты стал богатым и знаменитым?

    @lekafe, нет, он только курсы преподает "как стать миллионером" :-D

    Сапожник без сапог
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 28 ноября 2014 г. 12:29, спустя 1 час 7 минут 5 секунд

    @lekafe, нет, мне же никто подобных советов не давал, всё сам узнавал.
    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!