вопросы по паттернам

меня бесит бессмысленный повторяемый код.
Я не вижу ни чего бессмысленного и повторяющегося в $this->get_database(). Напротив - мы ограничиваем себя от глобальных переменных. И мы, в тоже время, можем просто переопределить этот метод не затрагивая реализацию выше.
 
но вот как пойдут mixin и dependancy injection? - не уверен, что хорошо
Если это класс для работы с БД, то куда его примешивать? Это совершенно отдельная сущность.
получил свои данные,
PHP:
$data = db::getAll("SELECT * FROM news WHERE type=?",$type);
и дальше примешивай их куда угодно.
Это статический класс, работает сразу по вызову. Он по определению injection independent.
или я чего-то глобально не понимаю.

Кстати, Redjik тебе нотификация на форуме просигналила, что я сейчас твой пост процитировал? Мне жутко интересно, работает ли она при редактировании поста, или только при создании.
 
не понял. почему один и тот же?
Тебе придётся заводить под каждый инстанс свою static-переменную внутри каждого класса, наследуемого от db, не суть.

Из каких это таких труднодоступных мест ты запрашиваешь каждый раз db, что нельзя один раз дописать
PHP:
$this->db = ...;
и пользоваться этим инстансом?
 
Вурдалак
Вот, да. Синглтоны и прочие реестры тем и нехороши, что позволяют дернуть что угодно где угодно.
 
Singleton
я как разработчик хочу быть уверен или даже гарантирую что существует всего одна инстанция класса.
про базы данных это неправда, раньше можно было иметь доступ только к одной базе данных но сейчас никто не мешает иметь две инстанции
на две различные базы..
красивый пример синглетона это актуальный пользователь, он действительно может быть только 1!
 
вообще наверно фанат прав, вы както поверхносно смотрите на патерны, важно не как их делать а где это применяется, важно описать не фабричный метод, а программу которая работает с фабричными методами в смысле, если я знаю что это инстанция класса фабрики, то я уверен что там есть функция дай обьект!.. и только синглтон исключение из этого правила
 
есть такая игра шахматы,
есть некий класс фигура, обьект которой является прототипом всех фигур и имеет абстрактную фабрику порождающую нужную мне фигуру.
доска шахмат реализована композицией из полей и фигур, каждый ход в этой игре это стратегия, непонятно будет ли передвинута фигура, убита другая, рокировка или переход через рубленное поле, в игру играют 2 пользователя которые являются наблюдателями, каждый должен узнать как сходил другой. ну и все это запускается через единственный метод типа фасад
 
А разве не проще использовать просто $this->db?
Ведь весь код относительно БД лежит в моделях. Следовательно нам не нужно пропихивать db в кучу мест или делать ее синглтоном для дальнейшего получения. Достаточно 1 раз пропихнуть ее в базовый класс модели.
 
а почему ты считаешь что модель только для одной базы данных? почему я не могу использывать туже самую модель для 2 различных баз с одинаковой таблицей? и походу выполнения порою переключаться с одной базы на другую... вот тут и $this->db вспомниться
 
а ну а тогда какое сокращение от $this->db ? не проще ли сразу писать $this->getConnection() ?
или имеется в виду__get() ?
 
а почему ты считаешь что модель только для одной базы данных?
Это мне говоришь? Ну как правило так есть. Но это не важно.
В любом случае модель сама знает, с каким соединением она работает

почему я не могу использывать туже самую модель для 2 различных баз с одинаковой таблицей?
Я не могу представить задачу, где нужно работать с 2 одинаковыми таблицами в разных базах, чтобы основной сущностью была запись.
 
но тебе придеться и $model->db переписать из контроллера, а если это 20 моделей то 20 раз... и конечно она будет знать с каким соеденением...
а можно и проще всего один раз в данном случае setConnection( new Connection(xyz))
 
но тебе придеться и $model->db переписать из контроллера, а если это 20 моделей то 20 раз... и конечно она будет знать с каким соеденением...
Давай не будем фантазировать, развивая эту идею. Все зависит от реализации, и я не вижу проблем сделать эту реализацию нормальной.
 
просто спрятав $this->db за методом мы решим и то что модель знает какое соеденение, и то что оно от обьекта к обьекту отличное, а вот с $this->db несколько сложнее... но в пхп всегда есть магический метод __get и он сделает как дклаешь ты то о чем говорю я... действительно спор бессмысленный
 
WMix
у меня примерно так
Код:
Model {
   getDb() {
       if (null === $this->Db) {
           $this->Db = $this->getDefaultConnection()
       }
       return $this->Db
   }
   setConnection($Db)
}
 
а я зенд узаю, там так

PHP:
$this->getAdapter()->fetchAll(
  $this->getAdapter->select()->from($table,$fields_arr)->where('xyz=?', $xyz)->...
);

Absinthe
Я не могу представить задачу, где нужно работать с 2 одинаковыми таблицами в разных базах, чтобы основной сущностью была запись.
на скидку, бакапы, разделенные социальные сети... и чисто из опыта, у нас был оракл с огромной базой продуктов, предложений, магазинов 5 мио продуктов 50 мио предложений,... нужно было разделить на 3 базы, картинки и все что с ними связанное уходили в базу для тула с картинками для графикеров(теже продукты, но пофиг какие предложения), предложения уходили в статистику, теже предложения но так пофиг какие картинки или товары с точки зрения описания.. а контент собирали в монго... там пофиг до предложений картинок, чисто аттрибуты продуктов и описания...

таблицы совершенно одинаковые, кроме что гдет нужно было инфу терминировать какойто логикой
 
Сверху