0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 5
1

Symfony 2: как правильно организовать бизнес-логику?

21.09.2013, 14:08. Показов 2241. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Вот я недавно начал один проект на Symfony 2 и сразу же столкнулся одной проблемой - организацией бизнес-логики. Например, у меня есть сущности User, Scene и Game. Правильно ли будет такой подход:
PHP
1
2
3
4
5
6
7
8
//Controller
... indexAction {
 // User - сущность в /Sat/GameBundle/Entity/User.php
 $user = new User(); 
 // GameManager - класс в /Sat/GameBundle/Models/GameManager.php
  $gm = new GameManager($this->get('doctrine'));
  $gm->setUser($user);
}
То есть, правильно ли передать Doctrine в качестве аргумента, чтобы у GameManager была возможность использовать его? Такой подход не жрет много ресурсов?
Какая разница между таким подходом и передачей в качестве аргумента зарегистрировав класса в качестве сервиса:
PHP
1
2
3
4
5
services:
 game.ganager:
  class: SatGameBundle/Models/GameManager
  arguments:
   - @doctrine
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2013, 14:08
Ответы с готовыми решениями:

Как лучше организовать бизнес-логику и сильно связанные сущности
Доброго времени суток! Суть вот в чем. В модели Entity Framework (db first) имеется несколько...

Правильно организовать логику событий при взаимодействии набора данных и потоков
А как правильно организовать логику работы с потоками в следующих условиях: - есть список (или...

Как отделить бизнес логику от UI ?
У меня бизнес логика перемешена с UI. Как отделить бизнес логику в отдельный класс, экземпляр...

Как организовать логику приложения WebView
Здравствуйте, подскажите пожалуйста как организовать методы в коде (куда, какой) так, чтобы webview...

6
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
22.09.2013, 11:19 2
Если тебе нравится такой подход, то Doctrine не лучший вариант.
Используй AR: Propel либо надстройки над доктриной.

Какая разница между таким подходом и передачей в качестве аргумента зарегистрировав класса в качестве сервиса:
В первом случае ты используешь контейнер, во втором DI.
В Symfony принято использовать DI.
1
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 5
22.09.2013, 12:29  [ТС] 3
Цитата Сообщение от OnYourLips Посмотреть сообщение
В первом случае ты используешь контейнер, во втором DI.
В Symfony принято использовать DI.
За кулисами не происходит ли тоже самое, когда используем DI (единственное отличие - допускается создать только одного экземпляра)?

А вообще, какие еще есть варианты организации бизнес-логики?
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
22.09.2013, 13:36 4
satmurat,
Цитата Сообщение от satmurat Посмотреть сообщение
За кулисами не происходит ли тоже самое, когда используем DI?
DI использует контейнер. Ты и сам можешь положить что-то в контейнер и заставить DI это использовать.

(единственное отличие - допускается создать только одного экземпляра)
Не понял. EntityManager-ов может быть много. И они могут работать с одними и теми же сущностями.

Цитата Сообщение от satmurat Посмотреть сообщение
А вообще, какие еще есть варианты организации бизнес-логики?
Можно работать с пустыми сущностями в различных сервисах, в которых и будет логика. А можно положить логику в сущности.
Второй вариант менее гибок, но более удобен.
0
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 5
22.09.2013, 19:31  [ТС] 5
OnYourLips,
Не понял. EntityManager-ов может быть много. И они могут работать с одними и теми же сущностями.
Я имел ввиду $em1 === $em2 будет true, при
PHP
1
2
$em1 = $this->get('doctrine');
$em2 = $this->get('doctrine')
Можно работать с пустыми сущностями в различных сервисах, в которых и будет логика. А можно положить логику в сущности.
Второй вариант менее гибок, но более удобен.
Да, 2 вариант говорят менее гибок, но в каком смысле, интересно. Если не ошибаюсь, в Yii используется именно такой варниант.
В официальных туториалах рекомендуют связку с сущностями и БЛ через DI. То есть, таким образом
PHP
1
2
3
4
5
services:
 game.ganager:
  class: SatGameBundle/Models/GameManager
  arguments:
   - @doctrine
А народ больше всего каким образом организует БЛ на своих проектах?
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
22.09.2013, 19:37 6
Цитата Сообщение от satmurat Посмотреть сообщение
А народ больше всего каким образом организует БЛ на своих проектах?
При использовании Doctrine - DI.
Сущность ничего не должна знать о EM.

Я бы не стал использовать Symfony для проектов дешевле нескольких миллионов.
0
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 5
22.10.2013, 10:25  [ТС] 7
На данный момент сложилась такая ситуация, что почти все модели в качестве аргумента в конструктор принимают EntitiyManager. Без него никак. Можно было бы через DI, но в некоторых моделях создаются экземпляры таких классов по логике. Например,
PHP
1
2
3
4
5
6
7
8
9
10
11
class Game {
  private $em;
  public class function __construct($em) {
    $this->em = $em;
    // bla bla
  }
  private function runScene($scene) {
        $sc = new Scene($this->em, $scene);
        $sc->generate();
  }
}
То есть, у меня класс Game "запущен" через DI, а Scene нет. Так нормально вообще? Или Scene тоже можно "впихать" в DI?
0
22.10.2013, 10:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2013, 10:25
Помогаю со студенческими работами здесь

Как организовать логику работы двух CheckBox
Пишу программу, которая ищет музыку или видио(или и то и то ) по компьютеру. имеется два CheckBox'a...

Создать программу тестирования, как организовать логику
Уважаемые ФОРУМЧАНЕ! Нужна помощь. Работаю в ВУЗе. Надо сделать программу по тестированию...

Пишу шашки на C#, как организовать логику игры
Я пишу шашки, но пока что я начинающий сишарпер и мне нужно сформировать условие, а заключается оно...

Как организовать подобную логику страниц/рубрик
Коллеги, подскажите схему реализации такой логики расположения материалов, как на сайте вилгуд. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru