BG Development


Страници: (2) 1 [2]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Repository pattern
RoYaL
Публикувано на: 11-02-2018, 17:42
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 858
Регистриран на: 21.08.05



На една идея по-абстрактно ниво (без да се съобразявам с фреймуърци и т.н.) го виждам като

CODE

class Message
{
   private $read;

   public function isRead(): bool { return $this->read; }
   public function setRead(bool $read) { $this->read = $read; }
}


CODE

class MessageRepository implements RepositoryInterface
{
   private $db;

   public function save(Message $message)
   {
        if (null != $message->getId()) {
            $this->db->query("UPDATE messages .... ");
        } else {
            $this->db->query("INSERT INTO messages .... ");
        }
   }
}


CODE

class MessageService implements MessageServiceInterface
{
   /** @var RepositoryInterface **/
   private $messageRepository;

   public function read(int $id)
   {
          $message = $this->messageRepository->find($id);
          $message->setRead(true);
          $this->messageRepository->save($message);
   }
}


Нещо такова си го представям, обсъждахме наскоро в някоя от темите по-долу, може би на yoyovec подобна архитектура. После онзи провайдър, за който говориш (да не би да иде реч за MessageController?), би трябвало да ползва MessageService-a и да го кара да прочита съобщенията при определено събитие.

По-горе thrawn е писал, че флаговете може наведнъж да се ъпдейтват - според мен трябва да може и двете. Когато искаш само да го прочетеш - да го прочиташ. Когато трябват две-три операции наведнъж, просто да се стакнат. За целта може би просто трябва да не се създава query или да се commit-ва транзакция, докато не зададеш на програмата да го прави.

Това мнение е било редактирано от RoYaL на 11-02-2018, 17:44
PMEmail Poster
Top
relax4o
Публикувано на: 11-02-2018, 18:21
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1979
Регистриран на: 04.04.07



QUOTE (RoYaL @ 11-02-2018, 17:42)
На една идея по-абстрактно ниво (без да се съобразявам с фреймуърци и т.н.) го виждам като

CODE

class Message
{
   private $read;

   public function isRead(): bool { return $this->read; }
   public function setRead(bool $read) { $this->read = $read; }
}


CODE

class MessageRepository implements RepositoryInterface
{
   private $db;

   public function save(Message $message)
   {
        if (null != $message->getId()) {
            $this->db->query("UPDATE messages .... ");
        } else {
            $this->db->query("INSERT INTO messages .... ");
        }
   }
}


CODE

class MessageService implements MessageServiceInterface
{
   /** @var RepositoryInterface **/
   private $messageRepository;

   public function read(int $id)
   {
          $message = $this->messageRepository->find($id);
          $message->setRead(true);
          $this->messageRepository->save($message);
   }
}


Нещо такова си го представям, обсъждахме наскоро в някоя от темите по-долу, може би на yoyovec подобна архитектура. После онзи провайдър, за който говориш (да не би да иде реч за MessageController?), би трябвало да ползва MessageService-a и да го кара да прочита съобщенията при определено събитие.

По-горе thrawn е писал, че флаговете може наведнъж да се ъпдейтват - според мен трябва да може и двете. Когато искаш само да го прочетеш - да го прочиташ. Когато трябват две-три операции наведнъж, просто да се стакнат. За целта може би просто трябва да не се създава query или да се commit-ва транзакция, докато не зададеш на програмата да го прави.

Не, идеята на провайдъра е друга. Той се занимава само да предостави нужни данни на определени view-та. В моя случай главната навигация и навигацията за mailbox-а са си в отделни view-та и понеже view-тата се компилират в определен ред, който аз не мога да контролирам, в някои случаи просто главната навигация не получава нужните данни, за това ларавел предоставя view composers, при определени вюта да се извиква определен метод.

Иначе в смисъла на ларавел и аз така го направих, но елиминирах репозиторито, понеже ORM-а си extend-ва Model обект, който си съдържа разни save(), update(), create() и много други методи. И просто там си добавих методи, за маркиране на съобщенията като прочетени и т.н.


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) 1 [2]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0