Страница 1 из 1

Архитектура приложения

Добавлено: 2017.08.07, 11:24
HaligaliCopter
Здравствуйте. У меня проблемы с архитектурой приложения на Yii2. Я как бы прочитал уже уйму статей на хабре, отдельные мануалы по темам, какая часть как используется я понимаю, но не могу собрать всё воедино и заставить работать! По сравнению с симфони мне не ясно где и что реализовывать.

Есть у меня юзер, в виде модели по пути models\User.php

Мне нужно осуществлять вход по openid и если юзер новый то добавлять данные в БД, как бы регистрировать его. Где должно происходить это добавление? В это модели models\User.php?

Далее. Мне нужно работать с юзером, оперировать его данными анкетными данными. То есть вообще всё будет вертеться вокруг сущности User. Опять же это та же модель models\User.php? Мне в неё добавлять свойства, методы, хелперы и т.д.?

Третье. Куда писать маршруты и правила доступа для них?

И еще есть уйма вопросов. Я понимаю что пойдут ответы "дело твоё" и "делай как ты хочешь". Но я не знаю как хочу! Есть какой-то пример архитектуры который можно взять за основу? Чтобы уже было понятно где модели, где маршруты, где сервисы?

Re: Архитектура приложения

Добавлено: 2017.08.07, 12:38
chesar
Можете подсмотреть тут https://github.com/2amigos/yii2-usuario

Re: Архитектура приложения

Добавлено: 2017.08.07, 13:51
ElisDN
Как раз для сбора всего этого воедино в Yii2 посмотрите http://www.elisdn.ru/yii2-shop. Все вопросы отпадут.

Re: Архитектура приложения

Добавлено: 2017.08.08, 22:10
HaligaliCopter
Это что-то очень круто. Воедино собрано слишком много... но спасибо, я открываю и смотрю.

Вопрос более конкретный.

Юзер авторизуется через социальную сеть и ТОЛЬКО! Я поставил компонент eauth (https://github.com/Nodge/yii2-eauth-demo)

Мне нужно при первом входе запомнить его ID в БД, где-то сохранить что он авторизовался (наверное в сессии) и в дальнейшем использовать его учетные данные из БД.

Создал модель User extends ActiveRecord implements IdentityInterface и застопорился.

Где я должен делать инсерт в БД когда юзер еще новый? В этой модели в методе findByEAuth? Или в другом месте?

Где я должен сохранять его в сессию?

В какую модель мне добавлять остальной функционал касающийся работы с Юзером, например метод смены аватарки юзера, установка даты рождения? Всё в этой же модели User?

Re: Архитектура приложения

Добавлено: 2017.08.09, 18:54
samdark
Для авторизации через социалки лучше официальный yii2-authclient.

Вот так хранится всё: https://github.com/samdark/yiipowered/b ... andler.php

Re: Архитектура приложения

Добавлено: 2017.11.07, 12:23
mkramer
Ну когда используется ActiveRecord, есть несколько подходов
  1. Работать с ним прямо в контроллере (не рекомендуется, но в простых случаях вполне себе работает)
  2. Вынести это в отдельный, так называемый сервисный слой
  3. Реализовать паттерн репозиторий поверх паттерна ActiveRecord. Наиболее гибко, даёт возможность потом уйти от ActiveRecord
  4. Комбинация трёх выше перечисленных методов. Ну, собственно, что я обычно делаю.

Re: Архитектура приложения

Добавлено: 2017.11.07, 16:59
maleks
mkramer писал(а): 2017.11.07, 12:23 Ну когда используется ActiveRecord, есть несколько подходов
  1. Работать с ним прямо в контроллере (не рекомендуется, но в простых случаях вполне себе работает)
  2. Вынести это в отдельный, так называемый сервисный слой
  3. Реализовать паттерн репозиторий поверх паттерна ActiveRecord. Наиболее гибко, даёт возможность потом уйти от ActiveRecord
А из репозитория что будет возвращаться? Не AR объекты?

Re: Архитектура приложения

Добавлено: 2017.11.08, 00:16
mkramer
maleks писал(а): 2017.11.07, 16:59 А из репозитория что будет возвращаться? Не AR объекты?
Ну я читал рекомендацию мэпить AR-объекты на объекты бизнес-логики, чтоб потом можно было, при необходимости/желании подменить AR на прямой SQL или что-то ещё

Re: Архитектура приложения

Добавлено: 2017.11.08, 09:38
maleks
mkramer писал(а): 2017.11.08, 00:16
maleks писал(а): 2017.11.07, 16:59 А из репозитория что будет возвращаться? Не AR объекты?
Ну я читал рекомендацию мэпить AR-объекты на объекты бизнес-логики,
Т.е. это понимать как утвердительный ответ на вопрос выше?:
Не AR объекты?

Re: Архитектура приложения

Добавлено: 2017.11.09, 10:41
mkramer
maleks, да. Не скажу, что сам всегда так делаю, но здравая мысль в этом есть