@SergeySerge11

Как с помощью позднего связывания изменить доступ по ключу доступом по индексу?

Какой паттерн подойдет для решении задачи.
Есть абстрактный класс с методом Compute( ) к примеру;
Появилась задача сделать этот метод клиентским динамически встраиваемым. Клиент может написать свою реализацию. Тут же скомпилировать.
При инициализации объекта, клиент добавляет набор ресурсов с тегами(ключами) в словарь. и работает с ними в методе.
Словарь неизменяемый, и заполняется при инициализации. Отсюда видно, что поиск по ключу может быть заменен поиску по индексу. после инициализации. (выигрыш в скорости 20 раз для задачи).
Задача заменить поиск по string ключу, прямым доступом по индексу

Задача была реализована сразу в приложении, (одно из решений ниже), но сейчас потребовалось что бы пользователь то же мог написать свою реализацию.
// к примеру  такой код у пользователя
add("input_1",new Res());
add("input_2",new Res());
////..... 
public override void Compute( ){
// пример  
       int i1=inputs["input_1"].GetVal(); 
// тут сразу видно, что возвращается одно и то же значение
       int i2=inputs["input_2"].GetVal();
       this._data= i1+i2;
}

// данный выше  код  должен быть  таким при выполнение.  или быть по смыслу таким
public override void Compute( ){ 
       int i1=inputs[ 3 ].GetVal(); // прямой массив  по индексу
       int i2=inputs[ 4 ].GetVal(); // каждый уникальный тег имеет свой индекс, нужно только связать, и все. 
       this._data= i1+i2;
}

Решение одно из, пользователь должен определить метод/свойство замены или поле кеширования (но это усложняет код)
public override void Compute( ){ 
       int i1=  Res_1.GetVal();
       int i2=  Res_2.GetVal();
       this._data= i1+i2;
} 
 private Res _res1;
 public void Res_1 => {
if(_res1==null) _res1=build("input_1");  return _res1;
} 
//  вот последние 2 поля/свойства можно ли как-то сделать так, что бы клиент не
 //реализовывал их.  Так как это однотипное действие.

Задача оптимизировать, но не усложнить код клиента. Код клиента должен быть максимально простым. Получить ресурс, произвести операцию. все. А уже при встраивании, нужно оптимизировать.
И не знаю как, кроме как ковыряния в байткоде и заменой поиска по ключу вычисленным 1 раз значением(хотя не знаю).
Но есть какое простое решение, паттерн. Изначальная архитектура.

е
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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