Дружище, это не тестовое задание на 4-8 часов. Это или заказ, за который должны заплатить или кто-то хочет на халяву получить достаточно интересное приложение. Не ведись)
спасибо за коммент
вы описали техническую сторону - я с вами полностью согласен
меня же в этом вопросе больше интересует - организация труда людей, более эффективная возможно
Я, как раз, не очень понимаю эту связь ...
Но есть мнение, что в больших командах "размазана" ответственность и сложнее планировать работу, так как какие-то фичи требуют больше фронта или больше бэка
Антон Спирин, о, наконец-то )) и SOLID вы вспомнили, и модуль знаете ) а то, что в js модуль можно реализовать через IIFE - это не отменяет того, что это модуль. Нет никаких, сугубо фронтовых паттернов )
Вот пришла на ум аналогия:
Кто-то хочет спроектировать автомобиль. Пробует, полученный результат, даже, может ездить Но автор, задумывается о том, как же сделать это правильно.
Моя позиция - это порекомендовать ему изучить принципиальное устройство автомобиля: двигатель, кузов, шасси и т.д. И как эти модули взаимодействуют друг с другом. Тогда он может и свой вело ...автомобиль спроектировать и в чужом разобраться.
А ваша - это то, что устройство автомобилей значительно изменилось за последние 8 лет )) И тем более, это особые "фронтенд" автомобили - и рассматривать их устройство в классических терминах: двигатель, кузов и т.д. весьма сомнительно ) Потому что, у них коробка передач через IIFE сделана ))).
Лучше почитать полезные статьи о конструкциях от запорожца до мерседеса, об их эволюции, узких местах и почему отказались от тех или иных решений и пришли к тому, что есть.
Впрочем, имеете, право )
На этом, считаю спор завершенным, автора запроса - получившим нужные ответы, и оставляю вам право на завершающее едкое замечание )
Спасибо за терпение.
Антон Спирин, И какой паттерн в вашем примере представлен ? )
Ну, и чего вы тогда со мной спорите ? Человек спрашивал про архитектуру - ему нужно читать про архитектуру, декомпозицию, ослабление связей и паттерны, за счет которых это реализуется.
Вы согласны по существу вопроса ?
Или ему нужно изучить все фрейворки, их историю и архитектуру - начиная с бэкбона ? Простите, не могу сдержать улыбку )))
Спасибо, я тоже так и подумал - что никаких своих паттернов во фронте нет.
А классика, она на то и классика )
Если автор будет знать классику - тогда не будет разницы, фронт это или бэк. Это если мы говорим об архитектуре. Хоть на Java напишите Observer, хоть на Java-Script
Антон Спирин, Хорошо, что вы признаете это ИМХО )
Ну, и немного странно, человек про архитектуру спрашивает, а вы ему про модули и библиотеки..ну да ладно.
А вот паттернами фронтенда заинтересовали )) Можете привести пример чисто фронтового паттерна ? )
Я просто никогда о таких не слышал )))
Антон Спирин,
Не видел, где тут речь о коммерческих проектах ? Человек пишет приложение для себя, чтобы разобраться как создать архитектуру с нуля. А коммерческие проекты вы приплели, чтобы был аргумент использовать фреймворки.
Возможно это мой опыт проведения собеседований такой, но большая часть "синьоров" начинают путаться в паттернах и для решения каких проблем их придумали. И никогда/очень редко заглядывали в код фреймворков (собственно, каждый проходил такой этап, и я в том числе, думаю и вы тоже, когда вы понятия не имели об архитектуре и о том, как устроен Backbone)
Антон Спирин,
Изобреть велосипед можно и нужно ) Если хотите разобраться в архитектуре приложений как таковой, а также препарировать что вам по вкусу ангуля/реакт/вью
Чтобы понимать как они устроены.
Большей же частью, люди, которые сразу использут фремворки, не понимамают как они работают под копотом. Какие паттерны используются, что такое депенденси Инжекшен и почему где-то это основа фреймворка, а где-то запросто без этого обходятся.
По поводу синхронизации. Если вы хотите обновить модель на основании данных контроллера, то можно сделать один большой метод сервиса, например setModel(newModel) - который будет обновлять полностью модель. Или несколько дескретных setModelColor(newColor) - который (-ые) будут обновлять какие-то определенные части вашей модели.
Если вы обновляете модель из самого сервиса (по таймауту или по событию) - то хорошим тоном будет использовать те же методы обноыления, что и для контроллера. ( setModel и/или setModelColor ).
Сообщить, контроллеру, о том что данные обновились можно тоже разными способами.
Наверное, правильно, будет бросить эвент о том, что ваша модель в сервисе обновилась и контроллер при наступлении этого события вызовет getModel() из вашего сервиса, чтобы получить актуальную модель
По ссылке, не подходит. Вы верно понимаете, иначе все изменения будут происходить по ссылке в той моделе, что у вас в сервисе. Можно в сервисе сделать метод, например getModel(){ return angular.copy(service.model); } Он будет возвращать копию.