Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Свой фрэймворк вместо QOOXDOO. ООП-шим Яваскрипт.

#framework #javascript


Доброго времени суток.
Задался я целью на работе - избежать использования такого фрэймворка как QOOXDOO.
Он, конечно, классный и прикольный, но, к сожалению, и питон нужен для компиляции
кода (да-да, чтобы собрать воедино код, нужен Питон), а еще он весит 100500 метров. 
В общем, старался обойти без потерь для текущего проекта. Получилось вроде бы.
Из возможностей: 

Возможность создания класса и его экземпляров. 
Текущие типы классов, возможные для создания - динамический, синглтон.
Возможность "подмешивания" методов сторонних классов (МИКС).
чОткое наследование
Автоматическое создание Геттеров, сеттеров и листинга и контроля типов для публичный
переменных.
Возможность создания статических методов вне статических классов.

оооооОоОооочень маленький.
Текущие недоработки (будут исправлены в течении пары дней...когда высплюсь):


Нет возможности наследования синглтона. (функции написаны, но начинку не пихал. Там
все просто)


Пример простейшего класса: 
// Mixin class
smc.define("MTest", {
         // Static methds & properties
        static: {
                base: 0x100,
                unit: 0x200,
                resouce: 0x300
        }
});
// Mixin class
smc.define("MTest2", {
        // Static methds & properties
        static: {
                moto: 0x100,
                auto: 0x200,
                velo: 0x300
        }
});

smc.define("MyFirstClass", {
        /*
        * Конструктор. Вызывается при создании нового экземпляра класса.
        */
        construct: function (a,b) {
                if(a) this.setName(a);
                if(b) this.setMessage(b);
                this.helloWorld();
        },
        /*
        * Это примесь. Вы можете создать массив и указать SMC классы, 
        * чьи свойства необходимо подмешать в текущий объект класса.
        * Если такие классы есть - Вы сможете вызвать их методы, из текущего экземпляра,
        * либо обратится к их переменным
        */
        mixins: [
                smc.MTest,
                smc.MTest2
        ],
        /*  
        *  Это паблик- переменные класса.
        * value: Значение переменной
        * type: тип переменной (дефолт- любой)
        * event: Если при изменении значения переменной необходимо вызвать какую-либо
функцию, 
        */
        properties: {
                name: { value: "Станислав", type: "string" },
                message: { value: "Привет", type: "string", apply: "this.helloWorld" }
        },
        /*
        * Список паблик функций, либо переменных
        * (как правило, сюда забрасываются переменные, которые не нуждаются в паблик
доступе)
        */
        members: {
                helloWorld: function () {
                        alert( this.getMesage() + ", " + this.getName());
                }
        },
        static: {
                whatAreFuck: function () { console.log("Это простой статический метод
у динамического объекта. Может вызываться без создания экземпляра класса") }
        }
});

Скачать его можно пройдя по этой ссылке :)
http://download.tracking.by/smc.js    


Ответы

Ответ 1



:) ЗАчетно, действительно, ничего тяжелого :) Но есть и нюансы. 1. Сразу бросилось в глаза с примером создания Юзера и Админа. Практически копипаст содержания одного объекта и второго. Думаю, никто не возразит, если я скажу, что это немного некрасиво :) Ну да ладно, тут дело вкуса, не имею права ничего говорить :) Вот, хотел обратить внимание на фразу : " сеттеры, геттеры и т.д и т.п. не стал т.к. не считаю целесообразным ( надо будет - можно написать "класс" с этим функционалом от которого, потом, расширять все )." Не стоит расширять функционал за счет таковых лесапедов :) Тут фишка в чем. Почему я задался вопросом о реализации сеттеров и геттеров - очевидно. Можно запросто контролировать типы переменных (а порой это очень важно) Не придется писать к каждому геттеру и сеттеру функции всякие познавательные :) Как говориццо "Все уже сделано до нас:)" ... да и размер кода существенно уменьшается. :) У меня просто позиция такая - чем больше сделаешь сейчас - тем меньше потом делать всего :)

Ответ 2



И что, вот так можно вызвать функцию? MyFirstClass::whatAreFuck(); А вообще круто.

Комментариев нет:

Отправить комментарий