2011-02-16 5 views
7

Я использую шаблон команды для передачи команды от клиента на сервер через сокет TCP/IP. Сервер возьмет объект команды, десериализует его, а затем вызовет execute() для объекта команды. Однако мне нужно передать значение обратно вызывающему абоненту через сокет. Устанавливает ли шаблон команды? Если нет, есть ли работа? Я посмотрел на пример переключателя света на википедии, который велик, но нет никаких возвращаемых значений. Любой совет очень ценится.Command Pattern - вернуть значение

+0

Можете ли вы объяснить, почему вам нужно отправить значение обратно вызывающему абоненту? Возможно, поможет еще какой-то контекст. – Ocelot20

+1

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

+1

http://stackoverflow.com/questions/1154935/command-pattern-returning-status - это аналогичный вопрос. – nos

ответ

4

У вас не должно быть метода «execute()» на Command, отправленного на удаленный сервер, это плохо во многих отношениях, особенно в Java. Command должен представлять действие, которое должен принять получатель. В этом случае нужно вызвать метод для некоторого объекта.

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

Что вы описываете, это в основном механизм вызова RPC с надстройщиком. Не заново изобретайте это колесо. Рассматривает существующие механизмы RPC, их много на выбор в мире Java. Затем вам нужно решить, является ли RPC синхронным или асинхронным.

A REST API основан на том, что является популярным и прослужит дольше, чем API, чем какой-либо специфический для родного языка механизм, такой как RMI.

+0

Хорошая точка. Считаете ли вы, что RMI будет хорошо подходить для этого сценария, а не к сокетам в контексте моей проблемы? RMI даст мне заглушки, которые могут быть вызваны непосредственно клиентом нет? Это похоже на гораздо более приятный подход. Еще раз спасибо за указатели. – Joeblackdev

+0

Я только что обнаружил, что RMI не работает с Android. Любые другие предложения? Еще раз спасибо – Joeblackdev

+1

Простой API на основе REST - это то, что сейчас в моде. И я не имею в виду RPC через HTTP, я имею в виду настоящий REST. -> http://www.vertigrated.com/blog/2009/10/this-isnt-rest-this-is-rpc/ –

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