• Сервисный слой в yii, как правильно?

    mitaichik
    @mitaichik
    Нет, в не правильном.

    Сервисный слой, это слой который стоит над бизнес-логикой какой-либо отдельной части приложения (или всего приложения). Служба предоставляет вовне (другим частям приложения\сторонним приложениям) интерфейс доступа к этой части приложения.

    Ни про какой отказ от ActiveRecord тут и речи не идет - это совсем про другое. Служба вполне спокойно может оперировать моделями ActiveRecord, почему нет?

    То что вы все заменили геттерами.сеттерами тоже к сервисному слою отношения не имеет. Плюс в Yii гораздо более удобный механизм геттеров сеттеров - читайте документацию.

    Ваш UserService - это вовсе не служба, а репозиторий в чистом виде. Да, вы можете их делать, но почему он не может оперировать удобнейшим и гибким AR?

    Что касается смены выборки пользователей - да, здесь репозиторий поможет, и интерфейс поможет . Только почему репозиторий не может юзать AR, а интерфейс не вешаться на модель?

    Что касается "а что будет, если то да се, фреймворк сменим, и т.п" - не будет такого! За всю практику я встречал только 2 перехода - с yii1 на yii2, и с yii1 на java, все!

    Короче, yii крут, не надо изобретать велосипеды, надо проникнуться его философией и поймать просветление.

    Да, что касается служб - советаю почитать про Service Locator и связанные с этим топики в документации, там написано как их лучше реализовывать технически.
    Ответ написан
    Комментировать
  • Сервисный слой в yii, как правильно?

    bitver
    @bitver
    Вы пишете на Yii, так и используйте средства фреймворка, то, под что он заточен. Сейчас это выглядит как попытка сделать что-то своё, ну так и пишите свой фреймворк или юзайте другой если не нравится Yii. Нет, не защищаю фреймворк, это самое очевидное что приходит в голову.
    А по поводу организации Service Layer именно в Yii, он и так есть в шаблонах и Gii его генерит (SearchModel) - это своего рода прослойка меж моделью и контроллером. Не обязательно привязываться к конкретной модели, можно создать свой класс от yii\base\Model или yii\base\Object и делать там всё что душе угодно с готовыми приятными фичами в виде евентов и прочего.
    Ответ написан
    5 комментариев