Реализация сменной системы в C или C++

Ну, на основе документации вы можете использовать DiscoveryClient , чтобы получить экземпляры, основанные на каком-либо сервисе, на примере документации "STORES", посмотрите, вы можете сделать это следующим примером:

@Autowired
private DiscoveryClient discoveryClient;

public List getInstances(String serviceName) {
    List list = discoveryClient.getInstances(serviceName);
    if (list != null && list.size() > 0 ) {
        // logic here if it is necessary. 
    }
    return list;
}

31
задан Diego Sevilla 4 April 2009 в 00:43
поделиться

6 ответов

В '92 / '93 периода времени я работал над сменной архитектурой для PageMaker Aldus, который был кодирован в C++. PageMaker был основан на платформе ООП C++ под названием ВАМП, который помог ее мобильности между Mac OS и Windows.

Таким образом, мы пытались использовать функции C++ для создания сменной архитектуры. Это оказалось очень проблематичным для классов C++ из-за так называемой хрупкой проблемы базового класса. Я продолжил писать работу, которая была опубликована в журналах и что я представил в OOPSLA '93 в отражательном цехе. Я также вступил в контакт с Bjarne Stroustrup на конференции Usenix в Портленде и продолжил двигаться к диалоговому окну с ним в течение нескольких месяцев, где он защитил проблему контакта с хрупкой проблемой базового класса от моего имени. (Увы, другие проблемы считали более важными в то время.)

Microsoft представила систему COM/DCOM и для той платформы, которая считалась эффективным решением проблемы. C++ мог использоваться в качестве языка реализации для COM через абстрактные классы, используемые для определения COM-интерфейсов.

Однако в эти дни разработчики избегают далеко от COM/DCOM.

Напротив, NeXT создал сменную архитектуру с помощью Objective C в начале 90-х в платформе Шага NeXT. Сегодня это живет на vibrantly в Mac OS X на компьютерах Apple и важных платформах, таких как iPhone.

Я утверждаю, что Objective C позволил решить сменную проблему превосходящим способом.

Я лично расцениваю хрупкую проблему базового класса C++, чтобы быть, это - большая часть фатального дефекта.

Если бы создавали сменную архитектуру с языковой семьей на базе С, то сделал бы настолько использующий Objective C.

14
ответ дан RogerV 27 November 2019 в 21:50
поделиться

Я имел некоторый успех с помощью довольно наивной системы:

  • Создайте спецификацию API для плагинов
  • Используйте одноэлементного менеджера по плагину
  • Используйте базирующееся динамическое подключение времени выполнения LoadLibrary/GetProcAddress
  • Инверсия реализации основанной на управлении обработки событий для уведомления плагинов
0
ответ дан dirkgently 27 November 2019 в 21:50
поделиться

В C (и я думаю C++ также, хотя я не сделал его сам), это, как правило, делается с помощью динамично загруженных модулей. API:s для такого зависимы от платформы.

На POSIX (Linux) Вы используете dlopen() семейство функций. В основном Вы создаете свой плагин отдельно, затем загружаете его во времени выполнения, ищете его символы по имени и можете затем назвать их.

Для Win32, существует LoadLibrary() который делает что-то очень похожее, Вы встраиваете свой код в DLL.

Для удобной обертки, которая делает все из них легкими и прозрачными, API GLIB выезда GModule.

31
ответ дан unwind 27 November 2019 в 21:50
поделиться

Это не может быть тем, что Вы ищете, но Вы могли встроить язык сценариев в свое приложение, такое как Lua. Lua был разработан, чтобы встраиваться в другие программы и использоваться в качестве языка сценариев для записи плагинов. Я полагаю, что довольно легко добавить интерпретатор Lua к Вашей программе, хотя я не знаю Lua, таким образом, я не могу ручаться за то, насколько эффективный из решения это было бы. Другие с большим опытом с Lua, добавьте комментарии о своем опыте со встраиванием Lua в другом приложении.

Это, конечно, означало бы, что Ваши плагины должны быть записаны в Lua. Если Вам не нравится Lua затем, фактический стандартный Perl, Python и интерпретаторы Ruby все записаны в C и могут быть встроены в программу C. Я знаю о многих программах, которые используют эти языки в качестве расширений языка сценариев.

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

5
ответ дан Chris Lutz 27 November 2019 в 21:50
поделиться

Лучше использовать платформу как ACE (http://www.cs.wustl.edu/~schmidt/ACE.html), который экранирует Вас (как хороших как возможных) с платформы определенное кодирование.

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

Поскольку высокоуровневая абстракция проверяет ЧАО (http://www.cs.wustl.edu/~schmidt/CIAO.html) Открытый исходный код реализация C++ Компонентной модели CORBA.

3
ответ дан lothar 27 November 2019 в 21:50
поделиться

Этот подкаст об архитектуре плагинов также может быть интересным.

1
ответ дан 27 November 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: