Я создаю приложение Rails, которому необходимо подключиться к пользовательской службе данных TCP, которая использует XML-сообщения для обмена данными.С функциональной точки зрения это не проблема, но у меня возникают проблемы с его архитектурой, которая кажется «чистой».
Краткий обзор:
Пользователь входит в приложение Rails.При входе в систему учетные данные проверяются службой данных и возвращается «идентификатор контекста».
Запрос:
<login><username>testuser</username><password>mypass</password></login>
Ответ:
<reply><context_id>123456</context_id></reply>
Этот context_id в основном является токеном сеанса.Все последующие запросы для этого пользователя должны предоставить этот context_id в сообщении XML.
Запрос:
<history><context_id>123456</context_id><start_date>1/1/2010</start_date><end_date>1/31/2010</end_date></history>
Ответ:
<reply><history_item>...</history_item><history_item>..</history_item></reply>
Я спрятал все сборки / синтаксический анализ XML в моих моделях, который работает очень хорошо.Я могу сохранить context_id в сеансе пользователя и получить его в моих контроллерах, передав его функциям модели.
@transactions = Transaction.find( { :context_id => 123456, :start_date => '1/1/2010', :end_date => '1/31/2010' } )
С точки зрения дизайна у меня есть 2 проблемы, которые я хотел бы решить:
- Передача context_id каждому действию модели немного болезненно.Было бы неплохо, если бы модель могла просто получить идентификатор из самого сеанса, но я знаю, что это нарушает правило разделения интересов.
- Существует соединение TcpSocket, которое создается / уничтожается моделями при каждом запросе.,Соединение не привязано к context_id напрямую, поэтому было бы неплохо, если бы сокет мог быть где-то сохранен и получен моделями, поэтому я не восстанавливаю соединение для каждого запроса.
ЭтоВозможно, это звучит очень запутанно, и я, наверное, ошибаюсь.Если у кого-то есть какие-либо идеи, я бы хотел их услышать.
Технические подробности: я использую Apache / mod_rails, и у меня 0 контроля над службой TCP и его архитектурой.