Ответы пользователя по тегу Проектирование программного обеспечения
  • Модульность php-приложения (на примере интернет-магазина)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В то же время ни Order, ни Payment не могут работать без Cart

    То есть у вас возникает циклическая зависимость Order и Cart? я так понимаю?

    Вообще Order, Cart и Payment можно объеденить в один модуль, который задает базовые интерфейсы + тыща модулей с реализацией интерфейсов. Типа CardPayment и т.д. Словом нужно избавляться от циклических зависимостей и думать о кейсах когда с чем будет работать. Скажем Cart без Order не имеет смысла, а вот Order без Payment - имеет.

    Или же тема оформления не поддерживает нужный модуль.

    Хорошая идея - тема должна содержать метаданные о том какие модули оно поддерживает а какие нет. + идея с виджетами.

    Возможно ли это? Если не полная, то хотя бы слабая зависимость модулей друг от друга?

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

    Стоит ли оно того?

    Увы вы один не сможете написать и поддерживать такую систему. Многие пытались и даже есть парочка неплохих вариантов ( sylius.org например ), но в одиночку за приемлимое время - маловероятно.

    Какие есть пути уменьшения зависимости модулей друг от друга?

    Доменные события это к слову неплохой вариант уменьшения связанности, можно рассматривать как вариант. Но в целом должно хватать соблюдение принципов SOLID и более рациональное дробление функционала, поиск общих зависимостей и тд. Сегрегация интерфейсов + Инверсия зависимостей.
    Ответ написан
    Комментировать
  • Вопрос по прочитанному( Гексагональная архитектура)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вы не уловили сути идеи гексагоналок судя по всему. В частности вся соль гексагоналки заключается в том, что бы при помощи инверсии зависимости (не путать с контейнером зависимисти или IoC) отделить слои друг от друга. В частности отделить ваш код от кода фреймворка. Далее уже идут концепции из луковой архитектуры. Гексагоналка лишь описывает что должно быть на границах слоев.

    То есть если все эти 3 помощника объединить в один, как и сделали в 5.1 то это ведь даже лучше, правда?

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

    и еще пожалуйста один момент как быть скажем с обработкой таких форм когда создаются например 3 сущности одновременно?

    А теперь опишите ваш случай в виде юз кейса. Когда вам такое понадобиться может? И причем тут формы? Формы это часть интерфейса, то от чего мы хотим изолировать наше приложение.

    короч.. лучше не практикуйте пока гексагоналки, они вам пока не нужны. Все эти приемы приследуют определенную цель. И если у вас нет причин для этого, вроде... возможности быстро организовать еще один интерфейс к приложению, например черей MQ, или же у вас есть потребность в изоляции слоев для лучшей тестируемости оных... Или у вас сложная архитектура базы данных (что звучит маловероятно при использовании active record) и вы хотите применить CQRS что бы упростить работу с оными...

    Вы должны четко понимать зачем это все нужно. Иначе есть шанс что вы архитектуре своего приложения сделаете только хуже. Просто так такого рода усложнения делать просто не целесообразно.
    Ответ написан
  • Организация структуры приложения java + mongo?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    шаблон Registry.

    p.s. Зачем вам монга то?
    Ответ написан
    1 комментарий
  • Где можно посмотреть пример готового сайта на Express.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    разбития его по шаблону MVC.

    Uncle Bob - Agility and Architecture. MVC работает только в маленьких масштабах (кнопка, инпут). MVC не является архитектурой приложения.

    но это не дает понимания архитектуры

    фреймворк это не архитектура, это фреймворк, инструмент, который решает общие проблемы возникающие у разработчиков (надо например авторизацию запилить, маршрутизацию и т.д.)

    Где можно посмотреть готовый пример

    github
    Ответ написан
  • Как спроектировать JavaScript приложение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала разберитесь с принципами объектно-ориентированного и функционального программирования. Штуки вроде "почему высокая связанность кода это плохо, зачем нужны MVC и т.д."

    Паралельно можете поразбираться с типичными шаблонами проектирования под js: largescalejs.ru

    Ну и еще - ES2015, активное использование модулей и штук вроде jspm/webpack для сборки. По сути все проблемы в js - кривое управление зависимостями (вся соль ООП в принципе состоит в инверсии зависимостей, функциональные подходы делают все еще лучше). Сейчас ситуация с этим всем намного лучше чем была скажем еще года 4 назад.

    Опять же, когда речь идет о реально больших проектах, следует перестать писать на каждый чих свой велосипед. Нужна библиотека для организации маршрутизации - берем готовую. Нужно работать с датами - берем moment.js и т.д. Сборщики вроде того же jspm умеют выдерать из популярных библиотек то что можно (если можно так сделать, скажем с angular2 выдрать только нужные модули можно. а вот с angular1 нет).
    Ответ написан
  • Вопрос тем, кто недавно читал книгу Боба Мартина - "методика гибкой разработки на c#".?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не читал, но подозреваю что логика сохранения вынесена как раз таки в метод Execute (то есть она не реализована, и наверное должна быть реализована в рамках PayrollDatabase), то есть вне Change. Я бы туда Unit-of-work еще впихнул, тогда вообще славно.
    Ответ написан
    Комментировать
  • Микросервисная архитектура в nodejs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну.... пишите кучу сервисов - сервер авторизации, еще какие-нибудь штуки... разделяйте все на функциональные модули, связывайте все вместе шиной данных на zeromq например и профит.
    Ответ написан
    1 комментарий
  • Чем вы пользуетесь для составления требований и проектировании ПО?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Jira + testlodge. Если именно документация - можно какую вики поставить.

    Вопрос довольно сложный, так как под "документацией" и "требованиями" многие понимают разные штуки. Я вот пытаюсь писать приемочные тесты на геркине, и использовать это как документацию к проекту.
    Ответ написан
    Комментировать
  • Eсть ли смысл в parse.com в моем случае?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если вся бизнес логика вписывается в простой CRUD - в этом есть смысл. Если приложение начнет хоть чуть чуть разрастаться и усложняться - начнутся проблемы. Но опять же, к этому моменту уже возможно будет видно стоит ли в проект вкладывать усилия или нет. Ну и опять же, никто не помешает вам реализовать все потом своими силами.
    Ответ написан
  • Какие книги по программированию 2014 года стоит прочесть?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Все must-read книжки по Java написаны в начале двухтысячных.
    Ответ написан
    Комментировать
  • Чем отличаются компьютерные архитектуры?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фон Нейман как бэ в принстоне преподавал. Просто намекаю... Гарвардская - развитие архитектуры фон-нэймана призванная уменьшить влияния "горлышка" первого.

    читайте вики, там все более мение по делу.
    Ответ написан
    Комментировать
  • DataMapper, Identity Map, связанные объекты, как правильно построить архитектуру?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне кажется вам стоит пересмотреть то, как вы создаете объекты. В частности вам нужно хранить какие-то методанные как что собирать и не делать мэппер для каждого объекта а просто что бы на основе метаданных генерились оные одним мэппером который просто умеет разруливать связи.
    Ответ написан
  • Какие есть *DD? И какую-когда лучше использовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    TDD + DDD + BDD. Причем все эти *DD можно применять вместе, и даже лучше применять вместе, так как тот же BDD это не столько про тесты, сколько про процесс разработки в целом а DDD это для более качественного проектирования и для того, что бы на митингах все говорили на одном языке (и внутри команды так же, и да, продукт-оунер тоже будет вас понимать). TDD же очень общая идея, мол тесты перед кодом. Это позволяет лучше проектировать код в небольших масштабах, но можно и на интеграционных тестах TDD построить.
    Ответ написан
    Комментировать
  • Yii. Как вы проектируете свои модели?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Откройте для себя путь DDD. Доменная модель на все приложение одна и не привязана к модулям фреймворкам и вообще. Правда в контексте Yii сделать чистые модели не получится, php все же не ruby.
    Ответ написан
    5 комментариев
  • Yii: Одна большая или несколько маленьких моделей?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    LoginForm это LoginForm, а User это User. LoginForm может вообще не пересекаться с User (внезапно). Вообще как хотите. Это ж Yii...
    Ответ написан
  • Как распланировать классы для приложения а-ля pastebin.org?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    guesstype вообще не должно быть в базовом классе, ибо это не логично. Можно сделать в базовом классе абстрактный метод isMatches (просто пустой метод который выкидывает исключение) и в потомках перегружать его. Этот метод будет определять, подходит ли данный кусок кода под выбранный язык. Хотя еще лучше было бы в отдельный компонент эту логику запихнуть.
    Ответ написан
    1 комментарий
  • Как устроена стена VK?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ответ написан
    Комментировать
  • Каким образом организовывали код до применения архитектуры MVC при веб разработке?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нет. Вообще все это логично и было еще до вэба, принципы сильной/слабой связанности и все такое. В контексте PHP - раньше PHP составляло только букву V в проектах на плюсах. С тех пор много чего изменилось.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    То что вы описываете непосредственно со структурой базы не связано. Во всяком случае бонусы могут быть просто полем в документе пользователя. Суть в том, что вам нужен метод оплаты через бонусы, по сути.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Казалось бы, причем тут база данных?
    Ответ написан