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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Декомпозиция и разбиение скриптов на более простые части, а так же добавление гибкости как в плане настроек, так и функционала.
    Ответ написан
    Комментировать
  • Как одновременно работать с одной папкой двум копиям приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В данном случае проще всего будет просто связать оба инстанса друг с другом и использовать второй инстас как резервный. Например через банальную проверку друг друга по сети запросом каким-нибудь. Один инстанс работает, а другой проверяет, что первый инстанс работает верно. Если первый инстанс не отвечает, висит, сломался и т.п. - в работу включается второй и где-нибудь ставит флаг/файл/что угодно и как, что теперь он основной, а первый - резервный будет, когда заработает и отправляет сообщение ответственному.

    Чуть более сложный вариант: использовать, например, редис для хранения состояния процесса работы и через него синхронизировать инстансы. Например: первый сервис определил для себя задачу и сообщает об этом второму, что он взял такую-то задачу или такие-то файлы. Соответственно второй сервис эти файлы не трогает. Или, оба инстанса смотрят в каталог, как только что-то обнаруживают - помещают в очередь задач. А при появлении задачи в очереди - оба сервер генерируют случайно число и так выбирают кто из них возьмет следующую задачу из очереди. Т.о. можно, этих инстансов наплодить сколько угодно.

    Более правильный вариант: разделить функционально вашу задачу на несколько более простых. А именно: вместо проверки каталога, запустить на том сервере, где находится данный каталог с файлами сервис наблюдения ФС, который использует системные уведомления об изменениях файловой системы. И при наступлении нужных событий - отправляет запрос в очередь на обработку, например в тот же редис, а оттуда запрос забирает один из инстансов и обрабатывает его.
    Ответ написан
  • Какой самый простой способ организовать SSO?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Дополню, если хочется сделать именно свою реализацию, то вот тут я уже отвечал как именно это делается: Как сделать единый аккаунт для своих сервисов?
    spoiler

    5bd748db6d572869658821.png
    Ответ написан
    Комментировать
  • Что такое компонент? Что такое модуль?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Если смотреть в общем - это синонимы. Под оба определения можно подогнать любую сущность. А можно точно так же сказать что это разные сущности. Все зависит от конкретной задачи и области. Обычно уровни абстракции выстроены так: приложение -> модуль -> компонент -> класс -> методы. Т.е., модуль - это что-то более-менее функционально цельное, а компонент - это именно как составная часть чего-либо. А вообще, можно просто не париться и использовать те термины, которые приняты в конкретной ситуации.
    Ответ написан
    Комментировать
  • Как правильно выбрать фреймворк и яп для проекта, если ты заказчик?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак. Выбор инструмента - это задача тимлида и/или техлида. Т.е. ведущего/главного разработчика, отвечающего за принятие ключевых технических решений. Ваша задача, как заказчика, четко оформить требования, ограничения и сформировать начальное ТЗ и описание, что вам требуется от проекта, прототипы интерфейса, например. Без вникания в технические детали. Т.е., "хочу чтобы были фичи такие-то и работил они так-то, ограничения такие-то, требования такие-то". Далее уже задача найти разработчика/команду с большим или достаточным для данного проекта опытом. Далее из начального ТЗ формируется полноценное техническое задание: описывается весь требуемый функционал, рисуется дизайн, прописываются требования, ограничения и прочие хотелки. И на основе ТЗ, тим/тех лид уже подбирает/подбирают наиболее оптимальные и конкретные инструменты и решения, основываясь на собственном опыте и знаниях для конкретно этой задачи. Например, если человек хорошо знает несколько разных инструментов и есть достаточный опыт их использования - он может реализовать проект используя любой из них как одинаково хорошо, так и одинаково плохо. У разных ЯП и фреймворков свои плюсы и минусы. Далее из ТЗ формируется более детальное ЧТЗ и происходит разработка проекта.

    Вот вы говорите:
    Нужно будет выполнять много запросов к БД

    Важная быстрая скорость работы нашего сайта

    Много/быстро это сколько? 100 запросов в час? 1000 в минуту? 1М в секунду? Загрузка страницы за 30/10/1с или даже 100мс? А к какой именно БД? Какая характеристика самих данных и какого типа запросы? На какое количество соединений? В каком регионе? Есть ли там тяжелые или еще какие-то вычисления? Медиа файлы - картинки, видео? Тут очень много нюансов. В идеале следует определиться с конкретными значениями/параметрами и их описать в ТЗ. Ну или определить примерное, а фактическое значение определить на стадии прототипа/MVP и/или провести какое-то исследование/тестирование. Можно потратить десяток лямов на написание крутого кода на го/расте/С++/ассемблере в течении года и все будет летать на простейшем сервере. А можно купить свой сервер за лям (ну, условно, конечно), нанять питонщика или PHP-ника за 300к и он за пару-тройку недель добьется такого же результата. Большинство веб-задач сегодня достаточно просто или с минимальными усилиями решаются абсолютным большинством решений для веба. Да, у всех решений есть свои плюсы и минусы.

    Безопасность от всяческих XSS и SQL атак.

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

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    C# + WPF + любая либа для работы с файлами экселя. Воспроизведение звука вообще из коробки работает.
    Ответ написан
    3 комментария
  • Как придумать архитектуру сервера на c++?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    В целом совет простой и стандартный: рисуете три элемента - входящие данные, игра, исходящие данные (для сервера и для клиента). Далее делаете декомпозицию каждого элемента - от сложного к простому. Повторяете несколько раз вниз до самого простого элемента. Далее структурируете и организовываете вашу архитектуру логически в объекты, методы, классы, модули и прочее. Например: раз, два.

    как можно реализовать сами комнаты?

    Структурой.

    Можно ли представить комнаты потоками?

    Можно, но не нужно. Это несколько разные концепции. Комната - это набор данных. Поток - это процесс обработки данных.

    Тогда получится ли корректно работать с двумя игроками в одном потоке?

    Вполне. Обратите внимание на существующие онлайн игры - тысячи и миллионы игроков.

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

    Опять путаете процесс и данные. Игрок - это тоже данные.
    Ответ написан
    3 комментария
  • Как правильно структурировать программу?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Использовать декомпозицию. Рисуете сначала простую схему программы: рисуете три элемента - входящие данные, программа, выходящие данные. Далее все просто: разбиваете каждый из элементов на более мелкие логические части и повторяете данную итерацию несколько раз до каких-то простых элементов. Затем группируете элементы логически начиная с нижнего уровня от простого к сложному - объекты, классы, модули и прочее. Например: раз, два.
    Ответ написан
    Комментировать
  • Как реализовать передачу файлов между двумя компьютерами?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Можно напрямую передать данные с одного компьютера на другой. Например, использовать сокеты и любой протокол поверх. На одном ПК - сервер, на втором - клиент. Либо использовать третий ПК как сервер.
    Ответ написан
    Комментировать
  • Разработка архитектуры javascript приложения?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Правильно заданный вопрос уже содержит половину ответа.

    достаточно ли его в качестве архитектуры?
    Достаточно ли хорошо решает поставленные перед ней, а так же бизнес-задачи данная архитектура?

    Что ещё следует учесть при разработке чтобы архитектура была действительно true?
    Удовлетворяет ли данная архитектура на 100% бизнес-требованиям к ней и на сколько качественно? И если нет, то почему именно?

    Что посоветуете изучить, почитать, (подсмотреть :) )по этой теме ?
    Разработка ПО и его архитектуры, жизненные циклы ПО.
    Ответ написан
    Комментировать
  • Как планировать архитектуру приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Примерно так:
    20b039b972.png
    В целом логика следующая:
    1. Сделать декомпозицию задачи
    2. Установить взаимосвязи элементов
    3. Нарисовать схему и логику взаимодействия элементов

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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Со сбора требований и разработки ТЗ. А уже на основе ТЗ прорабатывать ЧТЗ со всем деталями.
    Ответ написан
    Комментировать
  • Какие существуют современные средства в проектировании сервисов типа Instagram и Facebook?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Каким софтом можно визуально проектировать приложения?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Например Lucidchart, Draw.io.
    Ответ написан
    Комментировать
  • Какую оптимальную архитектуру выбрать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Выделить подписку в отдельную сущность: она должна держать список подписанных пользователей на данное событие, при этом сделать синхронный кэш в памяти (ну или просто кэш) - т.е. вот пользователь подписывается на событие икс в категории игрек - записываем это в профиль юзера и добавляем юзера в список подписок категории "игрек.событие" . Как только событие происходит - нам не надо проходить по всем профилям пользователей, а достаточно просто пройтись по всем подписанным пользователям. Либо, можно оптимизировать работу с БД и переложить на её плечи проверку "подписан ли пользователь икс на подписку игрек". Как именно делать оптимальнее - зависит от многих факторов: самый простой вариант - это в памяти приложения, редис же имеет смысл для кластеризации и распределения нагрузок - но это может несколько увеличить время обработки запроса.
    Ответ написан
    Комментировать
  • Какой стек технологий выбрать для приложения в трее под разные настольные ОС?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если надо максимально автономное и есть знание или желание познать С++ - то QT, если это не слишком принципиально - то можно и C# + Mono, но тут сложность в том, что кроме самого приложения надо тащить и устанавливать рантайм библиотеки - а это еще мегабайт 30-50.
    Ответ написан
    2 комментария