Ответы пользователя по тегу ООП
  • MVC | Где получать имя категории, пользователей?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Для начала если хотите использовать ООП перестаньте использовать ассоциативные массивы.
    У вас данные из базы забирает маппер/ar/запрос соответственно он и должен заботиться об остальных данных.
    Пример (псевдокод):
    Вариант 1

    $postList = Post::getPostList([
        'join' => [
            'category',
            'author',
        ],
    ]);
    foreach($postList as $post) {
        // то есть маппер у вас уже эти данные получил и перед отдачей объектов инициализировал их
        $post->getCategoryName();
        $post->getAuthorName();
    }
    $view->render($postList);

    Или так:
    Вариант 2

    $postList = Post::getPostList();
    
    $postIds = array_column($postList, 'id');
    $categoryNames = Category::getNamesWherePostId($postIds);
    $authorNames = User::getNamesWherePostId($postIds);
    
    foreach($postList as $post) {
        $post['category_name'] = $categoryNames[$post->categoryId] ?? null;
        $post['author_name'] = $authorNames[$post->authorId] ?? null;
    }
    $view->render($postList);
    Ответ написан
    Комментировать
  • Зачем писать в ООП стиле в JS?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Чтобы реализовать сложную, хотя на самом деле любую, бизнес-логику.
    А не поняли вы преимущества ООП, только потому, как мне кажется, что создали класс, накопипастили туда функций которые писали до этого, и довольные остались.
    Если подходить к разработке со стороны предметной области и сущностей (объектов), то ООП сам собой образовывается.
    Что нибудь про SOLID почитайте, что ли.

    В чем же преимущество ООП? На конкретном примере

    По поводу примера, попробуйте реализовать подобный органайзер: https://www.wed-expert.com/organizer.
    Как по мне, тут сразу же видно сущности: категория и элемент (от него наследуются: задача, гость, затрата).
    После того как вы опишите данные сущности, весь код будет представлять из себя оперирования этими объектами (добавить, удалить, редактировать).
    Если говорить про какой-нибудь React, то с его компонентной "идеологией", используя сущности очень реализовать.
    Ответ написан
    Комментировать
  • Как нужно сохранять состояние объекта?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    getInstance - это экземпляр объекта (он тоже нужен), и он как раз таки должен быть статическим:
    $a = MyClass::getInstance();
    $b = MyClass::getInstance();

    'a' и 'b' - будут иметь один и тот же объект.
    ---
    Чтобы сохранялось свойство надо примерно такой код:
    class C
    {
    	private $p;
    
    	public function getProperty() {
    		if (is_null($this->p)) {
    			$this->p = ...
    		}
    		return $this->p;
    	}
    }

    ---
    Реализация синглтона в простеньком виде:
    class C
    {
    	private static $instance;
    
    	private function __constructor() {
    		// init
    	}
    
    	public static function getInstace() {
    		if (is_null($this->instance)) {
    			$this->instance = new self();
    		}
    		return $this->instance;
    	}
    }
    Ответ написан
  • Порекомендуйте материалы по ООП для веб?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    Как по мне здесь MVC (да и не только) хорошо расписано: design-pattern.ru/patterns/mvc.html. Тут же есть ссылка на книжку Фуллера.

    ООП - везде один, точнее суть его, а вот реализация может отличатся (хотя мне так кажется по фиг).

    Для веба изучать MVC лучше на основе фреймворка, т.к. вы сразу же ознакомитесь с паттерном, фреймворком и его конкретной реализацией. Например, YII (www.yiiframework.ru/doc/guide/ru/basics.mvc) и каждый компонент для новой версии расписан здесь

    При чем тут MVC? Это пример реализации ООП в вебе. Модели - это объекты
    Ответ написан
    3 комментария