Как добиться модульности программных проектов - PullRequest
0 голосов
/ 10 августа 2009

Каковы наилучшие способы достижения чрезвычайно слабой связи?

Если вы хотите максимально упростить модульное программное обеспечение, чтобы никакие части не зависели от каких-либо других частей вашей системы, но они все равно могли бы обмениваться данными, что означает, что мы должны будем использовать (независимо от технологии) это цели тогда

Предложения, пожалуйста, подумайте об этом как о мозговом штурме ...:)

Ответы [ 7 ]

2 голосов
/ 10 августа 2009

Используйте некоторый формат данных, отсоединенный от домена, для обеспечения связи или обмена информацией между модулями, такими как XML, RPC, HTTP и т. Д.

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

2 голосов
/ 12 августа 2009

Данные.

Если вы хотите быть слабосвязанными, ответ - данные. Ваши программы или компоненты не будут «выполнять функции» друг над другом, они будут передавать данные друг другу. (Внутренне, это, вероятно, будет сделано путем вызова метода - но механика в стороне, это должно быть, концептуально, передача данных).

Если данные внутри вашего процесса обрабатываются как неизменные, даже лучше.

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

Четко определенные интерфейсы, которые передают данные, и вы великолепны. И я имею в виду данные, а не «объекты», которые знают, как делать всевозможные магические вещи. Просто простые, чистые данные.

Кстати, это не значит, что объектам нет места в вашей программе - это то, что действует на ваши данные.

Кроме того, убедитесь, что части вашей программы, которые работают с данными, отделены от частей программы, которые отвечают за ее фактическое перемещение, и частей, которые показывают ее пользователю. Я знаю, что все дело в том, чтобы снова «отделить свою бизнес-логику от ваших постоянных элементов и уровня пользовательского интерфейса».

1 голос
/ 10 августа 2009

Пусть каждая система предоставляет свои функциональные возможности как интерфейс REST или WS- *.

Однако, более интересный вопрос: когда вы захотите это сделать? Вы должны выжать как можно больше производительности и производительности из выбранной вами технологии, что означает использование специальных технологических решений.

1 голос
/ 10 августа 2009

Я думаю, что то, что вы упоминаете, не может быть реализовано или даже если это возможно, это будет довольно сложно реализовать, и у него будет мало преимуществ.

Модуляризация может быть хорошей, но есть ограничения. Конечно, вы можете спроектировать свою систему так, чтобы некоторые ее части зависели от API, но не от конкретных реализаций, и я бы это поддержал, но «абсолютно никаких зависимостей» - иллюзия. «связь», скорее всего, создаст зависимости.

Хорошо бы попробовать модульную программу, но вы зашли слишком далеко.

1 голос
/ 10 августа 2009

Используйте платформу Inversion of Control, чтобы компоненты не знали, как загружать свои зависимости.

0 голосов
/ 12 августа 2009

Быть на 100% модульным, вероятно, достаточно сложно, чтобы не стоить усилий. Для классов в приложении вы можете использовать Dependency Injection и Inversion of Control для свободного соединения.

Если вы говорите о более распределенном системном подходе, вы можете использовать SOAP или REST (REST является наиболее технологически нейтральным), так что каждый модуль предоставляет контракт, но в этом случае вам понадобится какой-то централизованная система обмена сообщениями / маршрутизации, которая знает, где находятся модули и их контракты, чтобы их можно было вызывать, и реализует какую-то стандартную коммуникацию для сообщения об успехе / сбое, если только когда ваши модули не сообщаются, вы не хотите, чтобы они попали в черную дыру услышал еще раз:)

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

0 голосов
/ 10 августа 2009

Я думаю, что единственный способ сделать это - это некая форма «белой доски», где компоненты записывают факты в некоторой общедоступной области и наблюдают, как другие компоненты записывают свои факты. Такие архитектуры используются в распределенных системах ИИ, но я никогда не слышал о реальных распределенных системах, использующих их. Ваши компоненты, очевидно, должны будут согласовать формат сообщений «доски» и фактическую реализацию, такую ​​как общая память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...