obyekte-dogru-refaktorinq-obyekt-konfiqurasiyalar

Obyektə doğru refaktorinq:Obyekt konfiqurasiyalar

Javascriptdə obyekt yaradılmasının bir neçə sintaksisi var amma bunlar arasında obyekt konfiqurasiyalar(bir mənada assosiativ massivlər) xüsusi yer tutur. Praktikada json sintaksisinə bənzəyən, istifadə zamanı daha çox konfiqurativ məlumatları özündə saxladığına görə bu modelləşdirmə üsuluna çox vaxt obyekt konfiqurasiyalar deyilir. Obyekt konfiqurasiyalar özlərində hərəkət saxlamadıqda ona assosiativ massiv kimi fəaliyyət göstərirlər. Assosiativ massivlər massivlərin bir digər forması olub indeksi adətən daha anlamlı frazalardan ibarət massiv formasıdır.

PS: proyektin mənbə kodlarını buradan yükləyə bilərsiniz.

               Müəllif qeydi: Ödəmə terminalının proqramlaşdırmasını aparan zaman ən çox istifadə etdiyimiz 10 JS topicindən biri məhz obyekt konfiqurasiyalar idi. Terminala yeni provayder inteqrasiya edən zaman əlavə olunmuş provayderin identifikatoru, min max ödəniş limiti, hansi provayderlər qrupuna aid olması, request response zamanı gələcək və gedəcək parametrlərin adları və.s kimi informasiyalar məhz obyekt konfiqurasiyalarda saxlanılırdı.

{
    "__type""pages",
    "__objects": [{
        "pageId""30492001",
        "title""",
        "useOnline""true"// Онлай авторизация false-нет, true-да.
        "__objects": [{
            "__type""controls",
            "__objects": [{
                    "header""Xahiş edirik, 15 rəqəmli kodu daxil edin"// Приветствие
                    "footer"""// Подпись под полем ввода номера
                    "mask"""// Маска поля ввода
                    "name""account",
                    "nobr""false",
                    "regexp""^\\d{15}$",
                    "strip""True"// Удаление доп. символов в маске например кавычки. true - удалить false - нет 
                    "type""text_input"
                },
                {
                    "layout""DG"// Язык клавиатуры по умолчанию DG - цифровая, Буквенная ( AL - английский язык, ALC - Всключенный Capslock, ALS - Зажат Shift, ALR - Русская раскладка, ALRC - Русская с Capslock, ALRS - Русская с Shiftom (Первая буква))
                    "type""keyboard"
                }
            ]
        }]
    }]
}

PS: User-defined massivlər sadəcə informasiya saxlayır, müəyyən hərəkət saxlamır. Amma obyekt konfiqurasiyalar həm assosiativ məlumatlar saxlayır, həm də hərəkətlər(metodlar) saxlayır. Ona görə bir çox JS ədəbiyyatlarında assosiativ massiv termininə rast gəlməməyiniz normaldır.

Obyekt konfiqurasiyalar necə yaradılır?

Obyekt konfiqurasiyalar əsasən {} işarəsi vasitəsilə elan olunur. New Object() ilə yazılan varianta az rast gələcəksiniz. Obyekt konfiqurasiyalar adətən adlarına uyğun müəyyən bir obyektin konfiqurasiyasını və bu konfiqurasiyalar üzərində manipulyasiya aparmaq üçün metodları saxlayır. Obyektin bu cür elan olunması məfhumlara obyekt olaraq baxmağa imkan verir.

let person = {
    name: "Hesen",
    surname: "Mammadov"
}

               Siz obyekt konfiqurasiyalarda sadəcə dəyərlər saxlayaraq onu assosiativ massiv kimi istifadə edə bilərsiniz. Böyük tətbiqlər hazırlanan zaman obyektin assosiativ massiv rolunda çıxış etməsinə çox ehtiyac duyula bilər. Beləki siz bəzi informasiyaları backend-dən almağınız sizin proqram üçün baha başa gələ bilər. Bu zaman static informasiyaları assosiativ massiv formasında saxlayırıq. Biz Emanat terminalını proqramlaşdıran zaman provayderlərin konfiqurasiyasını məhz assosiativ massiv şəklində saxlamışdıq. Terminalın ana səhifəsindəki provayder adları backenddən gəlsəydi terminal xeyli yüklənərdi. Amma onları JS assosiativ massivindən oxumaq bizə maksimum sürət qazandırır.

               Obyekt konfiqurasiyaları yaradan zaman bəzi qaydaları bilmək lazımdır.

1)Obyektin daxili strukturunu kənar müdaxilədən qorumaq üçün adətən obyektin dəyişənlərini _ işarəsi ilə elan edirlər.

let person = {
    _name"Hesen",
    _surname"Mammadov",
    changeNamefunction (name{
        //validate here
        this._name = name;
    }
}

2)Obyektin daxili dəyişənlərini OOP paradiqmasına riayət etmək yalnız metod vasitəsilə dəyişməyə icazə verilməlidir.

3)Obyektə dinamik şəkildə olmayan bir field-i əlavə etmək mümkündür. Çünki obyekt konfiqurasiyalar həmçinin massivlərin sadəcə digər forması kimi fəaliyyət göstərə bilir!

//this code however works fine...
person.age = 45;

4)Obyekti konfiqurasiya edərək ona dinamik şəkildə obyekt elavə olunmasını , iterasiya olunmasını qadağan etmək olar.

5)Obyektin dəyişəni normal dəyişənlərdən fərqli olaraq iki və daha artıq sözdən ibarət olub ayrı yazıla bilər. Buzaman sadəcə massiv sintaksisi ilə ona müraciət edə bilərik.

let person = {
    _name"Hesen",
    _surname"Mammadov",
    'full info':'Full info here',
    changeNamefunction (name{
        //validate here
        this._name = name;
    }
}

6)Əgər obyektin property adları dəyişənlərin adlaındırma qaydalarına riayət edirsə ozaman onları dırnaqda yaza da bilərik yazmaya da bilərik.

let person = {
    '_name'"Hesen",
    '_surname'"Mammadov",
    'full info':'Full info here',
    changeNamefunction (name{
        //validate here
        this._name = name;
    }
}

 Öyrəndiklərimiz praktikada:

Öyrəndiklərimizi praktika etmək üçün aşağıdakı şəkildəki kiçik bir app-i javascript vasitəsilə yığmağa çalışacağıq. Səhifədə nəinki animasiya, bütün HTML elementləri Js vasitəsilə yaradacağıq ki, obyekt konfigurasiyaları daha yaxşı anlaya bilək.