Поработав некоторое время с javascript, я все больше убеждался, что ООП - это не правильный путь, или, по крайней мере, не очень.Хорошо иметь два или три уровня наследования, но работать с полным ООП, как это было бы в Java, просто не подходит.
Язык поддерживает компоновку и делегирование изначально.Я хочу использовать только это.Однако у меня возникают проблемы с репликацией определенных преимуществ ООП.
А именно:
- Как мне проверить, реализует ли объект определенное поведение?Я подумал о следующих методах
- Проверьте, есть ли у объекта определенный метод.Но это будет означать стандартизацию имен методов, и если проект большой, он может быстро стать громоздким и привести к проблеме Java (object.hasMethod ('emailRegexValidatorSimpleSuperLongNotConflictingMethodName') ... Это просто переместит проблему ООП, а не исправит ееКроме того, я не смог найти информацию о производительности поиска, если методы существуют
- Сохраните каждый составной объект в массиве и проверьте, содержит ли объект композитор. Что-то вроде: object.hasComposite (compositorClass) ...Но это тоже не очень элегантно и опять ООП, просто не стандартным способом.
- Пусть у каждого объекта есть свойство массива "Implements", и оставьте ответственность за объект, чтобы сказать, реализует ли онопределенное поведение, будь то с помощью композиции или изначально. Гибкий и простой, но требует помнить ряд соглашений. Это мой предпочтительный метод до сих пор, но я все еще ищу.
- Как бы я инициализировать объект без повторноготорможение всей установки для составных объектов?Например, если у меня есть класс «textInput», который использует определенное количество валидаторов, которые должны быть инициализированы переменными, и класс «emailInput», который использует точно такие же валидаторы, повторять код неудобно.И если интерфейс валидаторов меняется, код должен меняться в каждом классе, который их использует.Как бы я мог настроить это легко?API, о котором я думаю, должно быть таким же простым, как и выполнение object.compositors ('emailValidator', 'lengthValidator', '...')
- Есть ли потеря производительности, связанная с выполнением большинства функций, которые выполняютсяв приложении пройти через apply ()?Поскольку я собираюсь широко использовать делегирование, у базовых объектов, скорее всего, почти не будет методов.Все методы будут предоставлены скомпонованными объектами.
- Есть ли хороший ресурс?Я прочитал бесчисленные сообщения о ООП и делегировании, а также о преимуществах делегирования и т. Д., Но я не могу найти ничего такого, что обсуждало бы «делегирование javascript сделано правильно», в рамках большой структуры.
edit
Дополнительные пояснения:
- У меня еще нет кода, я работаю над фреймворком в чистом ООП, и я застреваю и мне нужно нескольконаследование.Таким образом, я решил полностью отказаться от занятий.Так что я сейчас просто на теоретическом уровне и пытаюсь из этого разобраться.
- «Композиция» может быть неправильным словом;Я имею в виду составной шаблон , очень полезный для древовидных структур.Это правда, что редко есть древовидные структуры (ну, конечно, за исключением DOM), но я разрабатываю для node.js
Что я имею в виду под «переключением с ООП»"я собираюсь расстаться с определением классов, использованием оператора" new "и т. д .;Я намерен использовать анонимные объекты и расширять их с помощью делегаторов.Пример:
var a = {};
compositor.addDelegates(a,["validator", "accessManager", "databaseObject"]);
Таким образом, "класс" будет функцией с предопределенными делегаторами:
function getInputObject(type, validator){
var input = {};
compositor.addDelegates(input,[compositor,renderable("input"+type),"ajaxed"]);
if(validator){input.addDelegate(validator);}
return input;
}
Имеет ли это смысл?