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

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Пишете простой скрипт, в котором описываете все ваши условия и который на выходе выдаст все возможные связи и зависимости событий и элементов в виде какого-то формата. Ну и далее создаёте граф/диаграмму в виде картинки любой тулзой - например, через тот же UML или какой-нибудь mermaid.
    Ответ написан
    Комментировать
  • Как обосновать применение реляционной БД на интервью по System Design?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Обоснование в данном случае очень простое:
    • Данная БД позволяет решить задачу?
    • Она соответствует требованиям задачи?

    Положительный ответ на вот эти два вопроса в целом достаточное обоснование. Что-то более сложное - это надо проводить исследования, собрать прототип, провести тестирование решения, возможно даже для нескольких разных БД, сделать сводную таблицу результатов, подвести итоги исследований. Вот тогда да, будет "сильное" обоснование. "Сильное обоснование" входило в условия ТЗ? Если не входило и вы не делали - то в данном случае не вы "сели в лужу", а те, кто проводил интервью. Возможно, надо было уточнить, какое именно обоснование они хотят получить и сколько они готовы за это заплатить. ТЗ было какое? Решить конкретную задачу в определённых рамках. Вы её решили успешно? Значит, вы молодец и всё отлично.
    Ответ написан
    Комментировать
  • Какую выбрать оболочку для совместной работы - визуализация архитектуры с возможностью описания PlantUML?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Diagrams.net - отлично работает как в гугл докс так и локально.
    Альтернативное и тоже интересное решение - mermaid, тоже можно запустить у себя локально.
    Ответ написан
    Комментировать
  • Как правильно спроектировать микросервисную архитектуру?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Правильно для чего именно? Прежде, чем что-то проектировать надо определиться с конкретными требованиями вашей задачи. И уже исходя из требований и ограничений проектировать архитектуру и прочее. Если требования неизвестны, то делается минимальный прототип, испытывается, результат записывается, анализируется и делаются какие-то выводы. При отсутствии результата - прототип допиливается до MVP и так далее. И вот уже по этим выводам принимаются какие-то решения - сделать другую архитектуру, изменить что-то в текущей архитектуре, как-то её дополнить/доработать или оставить как есть.
    Ответ написан
    4 комментария
  • Интерфейс, БД для серфинга по жесткому диску. На чем написать?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Дык возьмите сразу браузер - есть же NWJS. Логику можно там же на интегрированном NodeJS сделать, а можно хоть на питоне/C# и любом другом известном вам ЯП, ибо любой ЯП можно легко интегрировать с браузером через сетевые API и другие IPC механизмы. Так что слова "питон и шарп не дружат браузерами" - полный бред. Кроме того, на питоне и шарпе спокойно и без проблем создают веб-приложения. Если на вашем ТВ есть браузер - то на нём спокойно можно будет открыть страницу приложения, запущенного на ПК (ну, тут уже будет полноценное веб-приложение). Для ТВ лучше использовать андроид свисток, ибо всякие смарты - это недоделки со своими лимитами.
    Ответ написан
    Комментировать
  • Как организовать систему обновлений БД?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Это называется "Миграция БД". Для этого уже давно есть готовые инструменты, которые уже много лет применяются везде.
    Ответ написан
    Комментировать
  • Как получать данные с десктопного приложения Windows (works via inet) в реальном времени?

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

    Из игр получать данные только через чтение памяти и перехват трафика драйвером в ядре ОС. В остальных приложениях всё зависит от конкретного приложения: в случае классических оконных приложений все данные из окон считываются через стандартные системные оконные API вызывы. Во всех остальных приложениях - индивидуально для каждого приложения. Реверсинг приложения, исследование его работы и реализация соответствующего решения. После каждого обновления приложения - доработки под новые изменения. При кардинальном обновлении приложения - полное переписывание решения.

    Как это лучше всего реализовать?

    Лучше для чего именно?

    На каком языке?

    С/С++ и ассемблер.

    Писать под каждое приложение отдельный код?

    Да.

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

    Нет.
    Ответ написан
    Комментировать
  • Как организовать обработку webhooks?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Складывать их в какое-то хранилище и после манипуляций с апи crm обрабатывать или есть более подходящие решение?

    Да, складывать. Называется это "очередь". Используйте Redis, RabbitMQ и прочее.
    Ответ написан
    6 комментариев
  • Есть ли языки/нотации для записи бизнес-логики?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Диаграммы же. Смотрите в сторону с текстовой базой. Типа UML и прочее. Вот еще тоже неплохой онлайн инструмент для создания диаграмм из текстового описания: https://www.mermaidchart.com/landing (можно запустить локальный инстанс у себя).

    UPD1:
    Пример флоу-диаграммы русалки:
    flowchart TD
        A[Полльзователь] --> B(Скидка)
        B --> C{Тариф - платина?}
        C -->|Да| D[15%]
        C -->|Нет| E[5%]

    Картинка:
    spoiler
    6687d7a27a876258314167.png

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

    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. Нарисовать схему и логику взаимодействия элементов

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