2008-09-16 4 views
3

Можем ли мы достичь 100% -ной развязки между компонентами системы или различными системами, которые общаются друг с другом? Я не думаю, что это возможно. Если две системы общаются друг с другом, то между ними должна быть определенная связь. Я прав?Можем ли мы достичь 100% -ной развязки?

ответ

0

Вы можете достичь этого. Подумайте о двух компонентах, которые общаются друг с другом через сеть. Один компонент может работать в Windows, а другой - в Unix. Разве это не 100% развязка?

+0

Не совсем. Они соединены вместе протоколом, который они используют, чтобы разговаривать друг с другом. Хотя я согласен, что это «сорт» 100% -ной развязки, я не считаю, что 100% -ная развязка не возможна и не возможна. – Statement 2008-09-16 08:58:18

2

Если компоненты на 100% развязаны, это означает, что они не общаются друг с другом.

На самом деле есть different types of coupling. Но общая идея состоит в том, что объекты не связаны, если они не зависят друг от друга.

0

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

0

Это достигается путем введения интерфейса связи или протокола, который оба компонента понимают и не передают данные непосредственно между компонентами.

+0

Да, но если мы изменим протокол в будущем, нам нужно будет изменить оба компонента. Разве это не будет связано? – 2008-09-16 08:57:38

0

Ну, два веб-сервиса, которые не ссылаются друг на друга, могут служить хорошим примером 100% -ной развязки. Затем связь будет поступать в виде приложения, которое «соединяет» их вместе, используя их оба.

Сцепление не является по своей сути плохим, но вам нужно сделать твердые суждения о том, когда это сделать (это только при реализации или в вашей структуре?), И если соединение разумно.

2

Право. Даже если вы пишете интерфейс или протокол, вы что-то совершаете. Вы можете спокойно забыть о 100% развязке и быть уверенным в том, что независимо от того, что вы делаете, вы не можете просто выделить один компонент и пощекотать другого на своем месте без хотя бы незначительных изменений, если вы не совершаете очень простые протоколы, такие как HTTP (и даже затем.)

Мы, люди, в конце концов, просто LOOVE стандарты. Вот почему у нас ... ну, неважно.

0

Если компоненты рассчитаны на 100% ортогонально, это должно быть возможным. Это может обеспечить четкое разделение проблем. Все компоненты должны знать интерфейс его ввода.

Муфта должна быть однонаправленной: компоненты знают семантику своих параметров, но должны быть агностическими.

Как только у Вас есть 1% связь между компонентами, 1% начинает расти (в системе, которая длится немного дольше)

Однако часто знание впрыскивается в компонентах одноранговых для достижения более высокой производительности.

0

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

@Vadmyst: Если ваши компоненты обмениваются данными по сети, они должны использовать какой-то протокол, который совпадает с интерфейсом двух локальных компонентов.

0

Это очень абстрактно задаваемый вопрос.Если указанная система является компонентом одного приложения, то существуют различные методы, такие как MVC (Model View Controller) и интерфейсы для ввода IoC/Dependency Injection, которые облегчают развязку компонентов.

С точки зрения физически изолированных архитектур программного обеспечения, CORBA и COM поддерживают локальный или сетевой интерфейс и используют «общий язык» таких вещей, как ATL. Они устарели из услуг XML, таких как SOAP, который использует WSDL для выполнения связи. Нет ничего, что помешало бы клиенту SOAP использовать WSDL для позднего связывания во время выполнения, хотя я редко его вижу. Тогда есть такие вещи, как JSON, который похож на XML, но оптимизирован, и Google Protocol Buffers, который оптимизирует взаимодействие, но обычно предварительно скомпилирован и не связан с поздним соединением.

Когда речь заходит о IPC (межпроцессная связь), двум системам необходимо говорить только об общем «протоколе». Это может быть XML, это может быть библиотека разделяемого класса, или это может быть нечто частное. Даже на проприетарном уровне вы все еще «соединены» потоками памяти, сетью TCP/IP, общим файлом (памятью или жестким диском) или каким-либо другим механизмом, и вы все еще используете байты и, в конечном счете, 1 и 0.

Так что в конечном итоге на вопрос действительно нельзя ответить справедливо; строго говоря, 100% достигается только системами, которые имеют zilch, чтобы делать друг с другом. Уточните свой вопрос в контексте.

0

Важно различать прямые и косвенные компоненты. Стремитесь удалить прямые подключения (один класс ссылается на другой) и вместо этого использовать косвенные соединения. Привяжите два «невежественных» класса с третьей, которая управляет их взаимодействием.

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

0

Нет, мы не можем. Прочтите замечательную статью Джоэля The Laws of Leaky Abstraction, это для многих людей. Однако, это не обязательно плохое вещь, она просто есть. Утечка абстракций дает прекрасную возможность, потому что они делают базовую платформу пригодной для использования.

0

Think АФИ очень тяжело в течение очень долгого времени, то убедитесь, что это так мал, как это может быть возможно, пока это не в том месте, где он почти исчез ...

Lego Software Process предлагает это. .. :) - и на самом деле довольно хорошо достигает этого ...

Как «тесно связаны» две клетки организма ...?

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

Смежные вопросы