Форум программистов, компьютерный форум CyberForum.ru

Задача дизайна - прокинуть детали низкоуровневой реализации на более высокий уровень и вернуть обратно - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Можно ли открыть проект написанный на С++ Builder в Visual Studio 2015? http://www.cyberforum.ru/cpp/thread1856932.html
Как это сделать напишите пожалуйста, срочно надо.
C++ Удаление файла, использующегося в данный момент Я пишу антивирус, передо мной настала задача: Как удалить файл, который используется в данный момент? Конечно, я знаю, что сперва нужно удалить процесс, а потом удалить этот файл, но вот вопрос - А как это реализовать? Помогите) http://www.cyberforum.ru/cpp/thread1855015.html
Большая погрешность в вычислении длины кривой C++
Есть задание: вычислить длину контура эллипса. Входные данные - коэффициенты a и b из канонического уравнения и n - количество точек для таблицы значений функции. Количество точек к сожалению только 20 программа осиливает. Я набираю в вольфраме команду "arc length y = 5*sqrt(1-x^2/16), x=-4,4" которая высчитывает длину кривой. Но моя программа высчитывает длину кривой с довольно сильной...
C++ Запрет на запуск нескольких копий
Возможно ли сделать так, что может быть запущена только одна копия программы (копий несколько по всему диску, они имеют разное название)?
C++ Ошибка в коде сортировки слиянием http://www.cyberforum.ru/cpp/thread1852811.html
Добрый день :) Есть код параллельной сортировки слиянием на С++ в консоли, сделанный с помощью библиотеки MPI: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <cstdlib> #include <time.h> #include <mpi.h>
C++ Как перевести матрицу в трёхдиагональную? Ребята, кто-то может помочь в реализации алгоритма для програмки. Необходимо реализовать алгоритм во внутрь программы, который переводит любую матрицу в трёх диагональную!! Голова уже запуталась. А надо срочно // metod.cpp : Defines the entry point for the console application. //metod progonki< dlja dannogo metoda raspologaetsja cto dannaja matrica sistemi trexdiagonaljna,... подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4247 / 2779 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
24.11.2016, 07:34  [ТС]     Задача дизайна - прокинуть детали низкоуровневой реализации на более высокий уровень и вернуть обратно
Цитата Сообщение от vxg Посмотреть сообщение
Kastaneda, то есть:
-пришло сообщение из космоса на 1-й уровень (мы добавили к сообщению какие-то свои пометки)
-сообщение пересылается с 1-го на 2-й уровень
-ответ посылается со 2-го на 1-й уровень
-ответ уходит с 1-го уровня в космос (мы добавили к ответу какие-то свои пометки которые были добавлены к сообщению когда оно пришло)
так?
Sorry, если не понятно объяснил. Реально происходит следующее:
1. На AMQP сервер приходит сообщение. Сообщение содержит в том числе поля replyTo и correlationID, которые нужны для формирования ответа на это сообщение.
2. Сообщение нужно отдать на верх (уровень RPC).
3. RPC должен его обработать и ответить. На уровне RPC ответ - это просто string
4/ AMQP должен упаковать этот ответ (string) в свой формат сообщения. Для этого ему нужны replyTo и correlationID,

Цитата Сообщение от IGPIGP Посмотреть сообщение
Кроме того, что ему придётся знать, что экстру надо перекинуть в ответ.
Да, что не есть хорошо. Плюс зачем ему (2-му уровню) приходят какие-то непонятные данные, которые ему даже не нужны.

Менять по идее можно все, что угодно. Чтоб было понятно, у нас тут были предолжены например такие варианты:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// AMQP
void AmqpServer::mainLoop()
{
    // что-то делаем, в итоге получаем сообщение
   // при этом есть некий ID, который нужно знать при отправке ответа
   
   auto sendResponse = std::bind(&AmqpServer::sendResponse, this, replyTo, correlationId, _1);
    _messageHandler->onMessageReceived(message, sendResponse);
}
 
void AmqpServer::sendResponse (std::string replyTo, std::string correlationId, std::string response)
{
    // отправляем сообщение
}
 
// RPC
void RpcChannel::onMessageReceived (std::string message, std::function<void(std::string) sendResponse)
{
    // обработали сообщение, сформировали ответ
    sendResponse(response);
}
Либо тоже самое, но через паттерн "Команда". Либо создать класс Request, который имеет метод createResponse(), этот Request передать в RPC, а там дернуть createResponse(), и в этом response будут невидимые для RPC replyTo и correlationID. Этот response отдаем в AMQP и он уже может прочитать нужные ему поля (как вариант через френдов можно разрулить доступ к полям).

Это более менее адекватные предложения (были совсем не адекватные), но мне лично ни один из этих подходов не нравится. Интуитивно чувствуется какая-то костыльность, есть ощущение, что можно сделать лучше/проще, но решение в голову не лезет.
 
Текущее время: 18:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru