php
Контакты

Достижения

Все достижения (6)

Наибольший вклад в теги

Все теги (29)

Лучшие ответы пользователя

Все ответы (18)
  • Что почитать по архитектуре приложения?

    Читай DDD от Эрика Эванса и паттерны корпоративные от Мартина Фаулера.

    Переходи с Yii на ZF2 или SF2 чтобы писать реально что-то сложное.
    Ответ написан
    Комментировать
  • Деградация производительности PostgreSQL 9.1 -> 9.5?

    Сколько новых фич было добавлено в 9.5? Например без upsert я уже не представляю как жил раньше, без ранее добаленного jsonb формата и прочее.
    Вы хотите новые фичи в приложении без деградации производительности? :)
    Ответ написан
    4 комментария
  • Что почитать по общей концепции программирования?

    Книги:

    PHP. Объекты, шаблоны и методики программирования 2-е издание — Мэтт Зандстра
    PHP. Объекты, шаблоны и методики программирования 3-е издание — Мэтт Зандстра
    Приемы объектно-ориентированного проектирования. Паттерны проектирования -
    Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
    Рефакторинг. Улучшение существующего кода — Мартин Фаулер
    Человеческий фактор: успешные проекты и команды — Том Демарко, Тимоти Листер
    Мифический человеко-месяц или Как создаются программные системы — Фредерик Брукс
    Факты и заблуждения профессионального программирования — Гласс Роберт
    Чистый код. Создание, анализ и рефакторинг — Роберт Мартин
    Zend Framework 2.0. Разработка веб-приложений — Кришна Шасанкар


    Читаю сейчас:
    Применение UML 2.0 и шаблонов проектирования. Введение в объектно-ориентированный анализ, проектирование и итеративную разработку — Крэг Ларман
    Совершенный код — Стив Макконнелл

    seyferseed.ru/life/projdennye-kursy-i-prochitannye...
    Ответ написан
    Комментировать
  • Где найти примеры хорошего кода, структуры, паттернов для нативного javascript?

    javascript.ru/tutorial/Object

    Я отсюда изучал. Отсюда же написал по примерам свои решения для наследования и полностью разобрался с прототипами.
    Ответ написан
    Комментировать
  • Что переместить в модель Kohana?

    Учитывая, что в приведенном выше коде не используется query builder ни от Database ни от ORM (что одно и то же с точки зрения query builder, практически), то в модель ORM, которая наследуется от ORM - перемещать нечего.

    Проблема глубже - она в вашем понимании.
    Модель в бизнес логике это не только ORM и прочие способы доступа к БД и харнилищам, это полное описание бизнес логики.
    По сути classes в Кохане можно использовать для хранения иерархии просто классов, а папку Model для простых и ORM моделей.
    Вам надо логику перемещать в простые классы, которые следует создавать по соображениям сущности, которую реализует класс. Тогда будет иерархия классов, взаимодействие объектов, а в контроллере просто их вызов.

    Еще раз, главный посыл - модель это не только доступ в БД. :)

    В модели БД можно выносить кастомные sql запросы или какую-то пред или пост обработку данных.

    Почитайте про ООП и Паттерны.

    UPD.

    Отрефакторил код. Написал бы как-то так. У вас запутно все. У меня проще.
    <?php
    
    defined('SYSPATH') or die('No direct script access.');
    
    class Controller_Products extends Controller_Base
    {
    
        public function action_index()
        {
            // пагинация
            $count      = ORM::factory('product')->count_all();
            $pagination = Pagination::factory(array('total_items' => $count));
            $products   = ORM::factory('product')
                    ->limit($pagination->items_per_page)
                    ->offset($pagination->offset)
                    ->find_all();
    
            $content = View::factory('prodAll')
                    ->set('products', $products);
    
            //используется в шаблоне?
            $content->pagination = $pagination;
    
            $this->template->title       = 'Все товары';
            $this->template->description = 'Список всех товаров';
            $this->template->content     = $content;
        }
    
        public function action_cart()
        {
    
            $content = View::factory('cartView');
    
            $content->inCart = FALSE;
            $content->inCart = $this->session->get('product2');
    
            $this->template->title       = 'Корзина покупок';
            $this->template->description = 'Список ваших товаров';
            $this->template->content     = $content;
        }
    
        public function action_product()
        {
            //узнаем id материала
            $id   = $this->request->param('id');
            $post = $this->request->post();
    
            // получаем данные из таблицы "products"
            $product = ORM::factory('product', $id);
            $content = View::factory('prodView')
                    ->set('product', $product);
    
            $this->template->title   = $product->title;
            $this->template->content = $content;
            $content->inCart         = FALSE;
    
            if (isset($post['Submit'])) {
                $this->processOrder($post, $product);
    
                Controller::redirect('main/ordered');
            }
    
            if (isset($post['InCart'])) {
                $this->session->set('product2', $product->name);
            }
        }
    
        /**
         * 
         * @param array $post
         * @param Model_Product $product
         */
        protected function processOrder($post, $product)
        {
            $clientName   = Arr::get($post, 'Name', '');
            $clientPhone  = Arr::get($post, 'Phone', '');
            $clientAdress = Arr::get($post, 'Adress', '');
            $orderNumber  = Arr::get($post, 'Number', '');
    
            $post = array(
                'name'          => $product->name,
                'number'        => $orderNumber,
                'url'           => $product->url,
                'client_name'   => $clientName,
                'client_phone'  => $clientPhone,
                'client_adress' => $clientAdress
            );
    
            ORM::factory('order')
                    ->values($post)
                    ->save();
        }
    
    }
    Ответ написан
    7 комментариев

Лучшие вопросы пользователя

Все вопросы (6)