2010-04-06 2 views
4

Меня не интересует технология, например. CORBA vs Web Services, меня интересуют принципы. Когда мы делаем ООП, почему мы должны иметь что-то такое процедурное на более высоком уровне? Разве это не то же самое, что с ООП и реляционными базами данных? Часто службы поддерживаются с помощью генерации кода, помимо шаблона, я думаю, что это потому, что мы новый SOM-сервисный объект mapper. Итак, каковы причины для вербовщиков, а не объектов?Как распределенные службы лучше распределенных объектов?

ответ

4

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

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

Итак, проблема заключается не в технологии или протоколе (двоичный, а в XML), а в сценариях использования. Вы можете создавать «сервисы» в CORBA и программировать распределенные объекты старой школы в WCF, но первые, кажется, более склонны к объектам, а последние - к услугам ...

+0

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

0

ИМХО, есть небольшая разница на высоком уровне. Но на уровне реализации распределенные объекты, CORBA, Java RMI и т. Д. Оставляют желать лучшего. Я пытался работать с CORBA и позже RMI в реальных производственных системах, а синхронизация версий была кошмаром.

В эти дни я отправляю сообщения и получаю ответы.

+0

Ок, отдельно забыть о технических трудностях, я спросил в этом вопросе и сказать мне, как различные отправляют сообщения на пути WS от передачи сообщений в распределенных объектах? –

+0

Передача распределенного объекта означает, что вы передаете код и данные объекта. Когда я писал о передаче сообщения, я имел в виду передачу некоторых текстовых/строковых данных, которые можно разобрать/прочитать в Object на принимающей стороне. Его так же, как с помощью пакета RDBMS, а не с помощью собственного файла IO, с СУБД, кто-то еще может добавлять столбцы, индексы и т. Д., И ваш код не волнует. Когда вы передаете объекты, вы должны синхронизировать их определения. – fishtoprecords

0

Распределенный объект означает что? Две копии того же объекта, который должен быть синхронизирован? двухфазная фиксация для каждого изменения объекта? Сложный.

Перемещение объекта по сети из местоположения в другое? В этом случае вы должны быть уверены, что «право собственности» правильно отказано. Как один хозяин знает, что другой изменил состояние объекта? Это должно быть - что - скопировано обратно?

Модель «распределенного объекта» быстро становится сложной.

Служба - в ее самом простом смысле - означает, что именно один хост предлагает обслуживание и поддерживает состояние. Реляционные базы данных на протяжении десятилетий демонстрируют эту модель услуг. Как и другие традиционные услуги (т. Е. Электронная почта, NIS и т. Д.)

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

«почему мы должны иметь что-то такое процедурное на более высоком уровне»

Вы не имеете что-то процедурную на более высоком уровне.

У вас есть объект (хост, предлагающий услуги) несколькими способами. Это совершенно объектно-ориентированный подход.

Это - вообще - a Singleton, что делает жизнь очень простой.

+0

Согласен, реализация распределенных объектов может быть более сложной, но картографические швы для ее взвешивания. Кроме того, аргументами сервисов могут быть только чистые данные, нет объектов, поэтому он по-прежнему не будет выглядеть более непрозрачным для меня, даже с идеей singleton. Я не говорю, что службы и процессы неестественны, они лучше для многих случаев, как вы упомянули, но ООП заменил процедурное программирование на более низком уровне в основном использовании, поэтому я думаю, что разработчикам проще думать с точки зрения ООП так же, как и это для меня. –

+0

@Gabriel Ščerbák: «Также аргументы для сервисов могут быть только чистыми данными, без объектов»: False. Аргументы могут быть сериализованными объектами. Услуги ** - это объекты **. Легко применять дизайн OO к услугам. Почему вы продолжаете повторять, что услуги - это просто процедуры? Это ** методы ** одноэлементного ** Объекта **. –

+0

Иногда это может быть допустимый прецедент для использования объекта в качестве аргумента, но не из-за его данных, а его поведения. Как бы вы моделировали это с помощью сервисов? Каким образом поведение может передаваться в данные, переданные в качестве аргументов для служебных вызовов? Не могли бы вы передать в качестве аргумента какой-то URL-адрес другому синглтону? –

1

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

Его можно сравнить с отношением между обычным ООП на общедоступном государственном языке и языком, использующим модель Актера, и не иметь общего состояния (например, в Эрланге, где у вас много легких процессов, которые не делят ничего, но только через сообщения). Модельный подход Actor намного менее сложный и может дать вам преимущества по сравнению с параллелизмом и т. Д.

+0

Я не совсем уверен, если вы упомянули актеров только, например, или если вы косвенно предложили объектно-ориентированную альтернативу услугам. Не поймите меня неправильно, я просто хочу увидеть за пределами шумихи. –

+0

Я просто попытался рассказать о предмете, рассматривая параллель с различием между «ванильным ООП» и моделью Актера. –

+0

Vanilla OOP Я имею в виду основной OOP в C#/Java/что-то еще. OO - идея - больше, и согласно ppl, например, Alan Key, все должно было быть связано с сообщениями: «Мне жаль, что я придумал термин« объекты », это все о сообщениях». Erlang также является OO - идея - даже если нет классов или объектов. http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html –

0

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

Разница в основном терминологическая, объясняется историческими областями применения.

(Шимона писал по существу того же eariler)

+0

Веб-сервисы были представлены мне как лучший способ распространения предыдущих технологий CORBA. Когда я попросил аргументы, были представлены только технические детали. ООП является ИМХО в настоящее время преобладающим (над процедурной оценкой), поэтому я смущен, почему вернуться на концептуальный уровень? SOAP давно потерял свое первоначальное значение.У меня нет опыта, но я буду вам верить в WCF, но разве он не отличается от микширования процедурного (стиль C) в C++ (OOP)? Мне кажется концептуально неправильным. Если бы объекты-участники (как упоминалось) были веб-службами, это имело бы смысл для меня. –

+0

Почему вы приравниваете веб-сервисы к процедурному подходу? Можно утверждать, что SOA является процедурной (и это будет по-прежнему большое упрощение), но технология веб-сервисов - разумеется, нет. – ima