Совет относительно перемещения во много архитектуру Delphi уровня

Я бы сделал это следующим образом (см. Комментарии для получения дополнительной информации):

#include 
#include 
#include 

// This function does not concern me - do not pay attention at memory managemt
void* getObject()
{
    uint32_t* oldArr = new uint32_t[2];
    oldArr[0] = 1;
    oldArr[1] = 2;

    // no need for a cast
    return oldArr;
};

struct ArrayStruct
{
    uint32_t dest[2];
};

void copy_to(ArrayStruct& as, void const* type_erased_source)
{
    // std::extent gives us the number of elements in an array
    constexpr auto elements = std::extent::value;

    // cast the void* to the correct pointer type
    auto source = reinterpret_cast(type_erased_source);

    // copy the objects to dest
    std::copy(source, source + elements, std::begin(as.dest));
}

int main()
{
    void* obj = getObject();
    ArrayStruct s;

    copy_to(s, obj);

    std::cout << s.dest[0] << " " << s.dest[1];
}

Если вы посмотрите на какой-нибудь пример ассемблера на Godbolt, вы увидите, что функция copy_to в конечном итоге скомпилирована в один движение памяти.

https://godbolt.org/z/ALdq6e

copy_to(ArrayStruct&, void const*):
  mov rax, QWORD PTR [rsi]
  mov QWORD PTR [rdi], rax

11
задан norgepaul 13 February 2009 в 07:43
поделиться

4 ответа

В процессе перемещения в многоуровневое приложение Вы могли рассмотреть использование транспортного протокола между слоями, который является независимым языком/технологией (как веб-сервисы, (я думаю tha remobjects поддержки это)).

Это могло сделать переопределение слоя более простым позже (как то, если позже необходимо сделать другую версию клиентского приложения в браузере/Java/Silverlight).

3
ответ дан 3 December 2019 в 08:57
поделиться

Я могу рекомендовать использовать компоненты Промежуточного программного обеспечения KBM от Components4Developers. Существует определенная кривая обучения, но они очень гибки и держат хорошо при использовании в условиях реального мира.

Комментарий от пользователя (http://www.components4programmers.com/usercomments/commentfromapowerusertoaquestion.htm)

4
ответ дан 3 December 2019 в 08:57
поделиться

Изменяя Ваше приложение на Мультиуровни с новой платформой (RM, DS, kbmMW, или что когда-либо), внесет много изменений в нашей архитектуре приложения, я рекомендовал пойти с этим в будущем, но можно достигнуть поддержки много базы данных с другими продуктами как

UniDac от DevArt (Лучшие компоненты для базы данных с прямым подключением). AnyDac (от той же Компании, кто предлагает RemObjects. SqlDirect (Имеет поддержку 9 MajorDB и также ODBC). ZeosDB (Открытый исходный код).

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

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

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

4
ответ дан 3 December 2019 в 08:57
поделиться

Вы также можете исследовать Midware http://www.overbyte.be/frame_index.html

1
ответ дан 3 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

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