У меня есть интерфейс MyInterface
и конкретная реализация MyImplementation
, которая реализует интерфейс. Теперь мне нужно создать несколько «Wrappers», которые также должны реализовать MyInterface
и будут обертывать оригинальный объект MyImplementation
. Обертка в некотором смысле, что свойства и методы функций на обертке будут служить своего рода Proxy
- т. Е. Выполняя некоторые проверки входных данных и передавая их исходной реализации MyImplementation
. Мне нужно уложить несколько оберток друг в друга, то есть иметь MyValidator1
, MyValidator2
и т. Д., Которые могут быть - в зависимости от варианта использования - все добавлены к одному объекту.Несколько оберток объектов в TypeScript/JavaScript
Некоторые код, чтобы сделать вещи яснее:
interface MyInterface {
method1(arg1, arg2): any;
}
class MyImplementation implements MyInterface {
method1(arg1, arg2) {
/* perform checks and or throw */
}
}
class MyValidator1 implements MyInterface {
method1(arg1, arg2) {
/* ... */
}
}
class MyValidator2 implements MyInterface {
method1(arg1, arg2) {
/* ... */
}
}
let o1 = new MyImplementation();
// only apply validator1
AddValidator1(o1);
let o2 = new MyImplementation();
// only apply validator2
AddValidator2(o2);
let o3 = new MyImplementation();
// apply both validators
AddValidator1(o3);
AddValidator2(o3);
// intended call hierarchicy when calling o3.method1(arg1, arg2)
// MyValidator1.method1(arg1, arg2)
// MyValidator2.method1(arg1, arg2)
// MyImplemenation.method1(arg1, arg2)
// but the order of the validators is not important!
Это просто какой-то код предложение, я ищу для всех видов моделей, которые могут отличаться от приведенного выше кода для достижения этой цели.
Важно, чтобы все экземпляры объектов были инкапсулированы - они должны вести себя так, как если бы они были MyImplemenation
потребителю. Валидаторы должны добавлять частные функции или свойства.
Каков наилучший способ для этого? Может быть, изменить прототип во время выполнения?
Вы добавляете валидаторы в экземпляр каждого класса? Кроме того, существует ли только один экземпляр для валидатора? –
похоже, что вы ищете нечто похожее на черту. Может быть, смешение поможет? – toskv
Идея состоит в том, чтобы иметь возможность смешивать и сопоставлять валидаторы. Нужно иметь возможность добавлять какие-либо валидаторы в реализацию, без какого-либо валидатора, знающего о другом. – Dyna