Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
cat file | sort | uniq > file2 — это, по вашему, не программа, написанная в одну строку? =)определить как эти части будут взаимодействоватьА что тут определять? Это как раз наименее принципиальный вопрос — любой подходящий способ взаимодействия подойдёт. Например, если эти мелкие задачи оформляются в виде сетевых сервисов, значит взаимодействовать они будут либо через некий единообразный протокол вроде JSON-RPC, либо у каждой будет свой собственный протокол, наиболее подходящий для конкретно этого сервиса — у одного RPC, у другого постоянно открытый tcp-сокет по которому он отправляет события по мере их возникновения, etc. Безусловно, таких сервисов скоро станет много, и для управления ими понадобится некий реестр сервисов — но это разовая задача, которая решается один раз и дальше можно этим реестром пользоваться во всех проектах. Мы, например, вообще свой не писали, а подняли стандартный реестр сервисов из OS Inferno. Если Вы работаете в какой-нить навороченной среде, и Вас не волнует куча лишнего мусора бегающего по сети — можно использовать стандартные решения типа WS-crap/SOAP, etc. В общем, берёте любое подходящее решение для организации взаимодействия между сервисами/проектами/объектами/etc.
как оператор будет получать результатЭто тоже абсолютно не важно. Как ему удобно, так и будет. Когда проект разделён на мелкие подзадачи, то результат для оператора подготавливается просто через несколько запросов к этим подзадачам. И эта задача подготовки результата для оператора выносится в отдельную подзадачу. Нужно будет оператору получить другой результат и в другом формате — просто пишется ещё одна маленькая подзадача для этих целей. Иными словами, этой «проблемы» на этапе дробления проекта на подзадачи практически не существует, любой интерфейс для оператора всегда без проблем навешивается сверху на имеющуюся систему.
определить форматы файловНе совсем понял, причём здесь форматы файлов. Если Вы про то, что разные подзадачи будут работать с одними и теми же файлами, поэтому нужно тщательно разработать их формат — так это в корне неверно. Задачи необходимо максимально изолировать друг от друга, никаких сильных связей между задачами создавать нельзя. И, разумеется, две задачи не должны лазить в один и тот же файл, или базу данных — фактически, этот файл/база играют роль громадных глобальных переменных разделяемых несколькими задачами! У каждой задачи должны быть свои файлы/базы, а всё взаимодействие между задачами должно идти через чёткие и максимально простые интерфейсы.
Чем лучше все проработано, тем меньше ошибокНет, чем на большее количество мелких подзадачек Вы разобьёте свой большой проект, тем меньше Вас будет волновать степень общей проработанности. Простой пример: авторы никсовых утилит grep, sort, uniq, etc. и не думали прорабатывать все возможные способы способы воспользоваться их утилитами. Просто сами утилиты настолько просты, и у них настолько чёткие интерфейсы, что ими можно пользоваться для множества задач, которые авторы этих утилит даже представить себе не могли. Вот и в Вашем проекте должны быть такие же простые и более-менее универсальные маленькие задачи, на базе которых в результате можно будет собрать требуемый Вам большой проект. И если возникает потребность тщательно всё прорабатывать, постоянно выявляются ошибки в структуре и интерфейсах — значит Вы идёте не в ту сторону, скорее всего Вы не в том месте разделили большую задачу на меньшие и у Вас из-за этого появляются гораздо более сложные и менее гибкие интерфейсы между подзадачами.
За что я люблю программирование