Ответы пользователя по тегу Проектирование программного обеспечения
  • Дальнейшие этапы в создании Приложения после создания прототипа?

    @xfg
    Нужен один более-менее опытный backend разработчик, ему делегируете все вопросы связанные с разработкой и подбором других необходимых специалистов. Что-то типа Team Lead. Еще до старта, показываете ему что у вас есть на текущий момент, что хотите на выходе и на какой бюджет расчитываете. Подписываете договор и работаете.

    Вам человек подскажет возможно с имеющимися у вас ресурсами сделать то что вы хотите или нет и возможно предложит варианты где от чего отказаться, чтобы уложиться в бюджет, например от мобильных приложений и сделать только веб-интерфейс на первом этапе и тому подобное.

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

    @xfg
    Не думайте о доменах. Вы смешали администрирование и программирование. Не нужно никакого dev сервера. Делайте работу на локальной dev машине, отправляйте изменения в удаленный репозиторий и всё. Можете вообще не устанавливать nginx/apache и т.д. на локальную dev машину, чтобы не забивать голову всякими доменами, а проект запускать под встроенным PHP сервером например из корня проекта и тогда будете обращаться к вашим сервисам по адресу localhost:port/service1/index.php, localhost:port/service2/index.php и т.д.

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

    server {
      server_name company.com;
      root /home/www/company/frontend;
     ...
    }
    server {
      server_name admin.company.com;
      root /home/www/company/backend;
     ...
    }
    server {
      server_name service1.company.com;
      root /home/www/company/service1;
     ...
    }
    server {
      server_name service2.company.com;
      root /home/www/company/service2;
     ...
    }


    Есть еще мнение, что каждый разраб должен разворачивать себе локальное окружение на своем компе, но хз...

    Так и делают. Разработчикам не нужен никакой dev сервер. Они клонируют репозиторий, делают что-то локально у себя и отправляют изменения в удаленный репозиторий. Для тестеров и всяких менеджеров просто поднимают так называемый stage-сервер где они и тестируют приложение, но это тоже самое что и продакшн сервер, просто доступ к нему только внутри компании. Можно настроить continuous integration чтобы все изменения из репозитория в master ветке автоматически бы приводили к деплою приложения на stage и продакшн сервера. Примерно так в общих словах устроена веб разработка.
    Ответ написан
    22 комментария
  • На чём лучше прокачивать архитектурный навык разработки моделей предметной области и принципов DDD вообще?

    @xfg
    Любой фреймворк с инверсией зависимостей подойдет. На Symfony и Yii2 точно можно сделать. На русскоязычном форуме Yii по теме DDD очень много обсуждений. Но если не увидели единого согласия по DDD, то скорее всего не читали книгу Эванса или Вернона. Если так, то лучше начать с кого-нибудь из них.

    Многоуровневая архитектура рассказывает нам о слоях presentation, application, domain и infrastructure. С однонаправленным потоком данных. Нижестоящий слой, никогда не должен вызывать вышестоящий. Это значит, что к примеру можно выбросить presentation слой и не придется ничего изменять в оставшихся 3.

    Фактически выходит, что в любой момент можно выбросить фреймворк и заменить другим, так как это presentation layer в многоуровневой архитектуре. Можно даже сначала написать application/domain, проверить их юнит-тестами, а только потом уже задуматься о фреймворке. Application/domain слои никогда ни при каких обстоятельствах не должны вызывать методы фреймворка. Контроллеры фреймворка работают с доменной моделью, через вызовы методов application layer.

    Соответственно, при миграции на другой фреймворк, всё что потребуется, это переписать контроллеры (методы очень простые 1-5 строк) и реализации классов в infrastructure layer если вы завязывали их на фреймворк. Хотя лично я бы, не советовал этого делать. Лучше найти/написать отдельные библиотеки/компоненты под инфраструктурный слой, тем самым облегчив себе жизнь в будущем, когда фреймворк умрет или при очередном релизе мажорной версии.

    Symfony под DDD наилучший выбор, он компонентный, можно подтянуть только то, что нужно. С другой стороны Yii2, он монолитный и вы затяните Active Record и кучу всего еще, чем не будете пользоваться, но джуниор придет и обязательно понавызывает AR или чего-нибудь еще в application/domain слоях, чего вы явно не ожидаете. Поэтому в случае с Yii2 нужен будет тотальный контроль. :)

    Про Laravel не пишу ничего, так как не работал с ним. Но судя по беглому просмотру документации, никаких проблем сделать на нем DDD также нет.
    Ответ написан
    4 комментария
  • Какую выбрать архитектуру взаимодействия мобильных приложений и веб-версии с API?

    @xfg

    Текущий вариант: в БД присуствует приложение с токеном, от которого работает angular.js приложение. Является ли такой подход нормальным или взаимодействие собственных frontend с backend должно быть организовано как-то по иному ?

    Хранить токен в приложениях, выполняющихся на клиенте бессмысленно. Приложение разберут, достанут токен и кто угодно с этим токеном будет обращаться к api.

    Как правило, официальные приложения не ограничивают в правах. Ограничивают приложения от сторонних разработчиков и это делается через протокол OAuth 2.0. Какие права дать стороннему приложению, решает сам пользователь. Токен выдается на пользователя. На само приложение токен имеет смысл выдавать, только если приложение выполняется на стороне сервера, в противном случае, бессмысленно. Более подробно в rfc6749

    Я вообще не понимаю, зачем вам требуется выдавать токен на приложение. Ограничить endpoints set для каждого из приложений? Зачем? Что это дает? Опишите задачу.
    Ответ написан