SQLRU.net
Разработка приложений баз данных

Начало » Программирование » Delphi » Подскажите с реализацией
icon3.gif  Подскажите с реализацией [сообщение #3573] Sat, 28 October 2023 10:28 Переход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Добрый день.
Подскажите как лучше реализовать без множества ifов
есть порядка 10 служб доставки, для каждой службы доставки есть клас
TDeliveryServices_A_ApiClient = class
TDeliveryServices_B_ApiClient = class
TDeliveryServices_C_ApiClient = class
в каждом классе есть месть метод
get_tracking_number_status(Atracking_number:string):string;
который возвращает статус отправления по трек номеру.
Есть таблица DELIVERY_SERVICES в базе c службами доставки.
ID|NAME|API_KEY|........
как елегантно зеализовать.
if DELIVERY_SERVICES.ID=2 then
delivery_service:=TDeliveryServices_A_ApiClient .Create(); 
.......
.......
if DELIVERY_SERVICES.ID=10 then
delivery_service:=TDeliveryServices_C_ApiClient .Create(); 
.......
.......
без кучи if ?
Re: Подскажите с реализацией [сообщение #3574 является ответом на сообщение #3573] Sat, 28 October 2023 14:16 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 410
Зарегистрирован: August 2022
Senior Member
Надеюсь, они имеют хотя бы общего предка?..
type TDeliverySeviceClass = class of TDeliveryService;
const aaa: array[0..10] of TDeliveryServiceClass = { TDeliveryServices_A_ApiClient, TDeliveryServices_B_ApiClient .... };
delivery_service = aaa[DELIVERY_SERVICES.ID].Create;
Re: Подскажите с реализацией [сообщение #3727 является ответом на сообщение #3574] Wed, 15 November 2023 00:16 Переход к предыдущему сообщениюПереход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
Спасибо огромное, то что было нужно
Re: Подскажите с реализацией [сообщение #3730 является ответом на сообщение #3574] Wed, 15 November 2023 16:31 Переход к предыдущему сообщению
wildbill в настоящее время не в онлайне  wildbill
Сообщений: 43
Зарегистрирован: November 2023
Member
SD писал(а) Sat, 28 October 2023 14:16
Надеюсь, они имеют хотя бы общего предка?..
type TDeliverySeviceClass = class of TDeliveryService;
const aaa: array[0..10] of TDeliveryServiceClass = { TDeliveryServices_A_ApiClient, TDeliveryServices_B_ApiClient .... };
delivery_service = aaa[DELIVERY_SERVICES.ID].Create;

Красиво!

Я эту тему (про подобное "type TDeliverySeviceClass = class of TDeliveryService;" ) пролистал в книжке как то, что врядли пригодится ))
Теперь засяду читать.
Предыдущая тема: function(Atracking_numbers:TStringList):TDictionary<string,string>
Следующая тема: FHIR
Переход к форуму:
  


Текущее время: Thu Nov 21 12:04:02 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01048 секунд