Рамките за приложения са един от основните модули в специализацията по софтуерно инженерство в кампуса на SLIIT. Този модул ни дава обща представа за това как да станем разработчик на пълен стек. В този модул първите лекции обхващат принципа SOLID, някои насоки и практики за софтуерно инженерство.

SOLID са 5 обектно-ориентирани принципа, които следват при проектирането на софтуер. Те са единична отговорност, отваряне-затваряне, заместване на Liskov, сегрегация на интерфейса и инверсия на зависимостта.

Единична отговорност означава да имате една определена отговорност на всяко дадено ниво. Ако мислите за клас, стига този клас да прави едно нещо, защото е много лесен за поддръжка. Ако прави едно нещо, което трябва да прави, има само една причина да се промени.

На второ място принципът Open-Close означава отворен за разширение и затворен за модификации. Когато дефинирате клас или метод, вие го затваряте за модификации, ако някой иска да добави повече функции към него, просто трябва да го разшири, вместо да модифицира.

Третият е заместването на Liskov, което означава, че всеки подклас/производен клас трябва да може да замества своя родител/базов клас. Детето всъщност прави това, което родителят трябва да прави с някои допълнителни с тази зададена граница, а не нещо като напълно различно.

Принципът на разделяне на интерфейса означава, че клиентите не трябва да бъдат принуждавани да прилагат методи, които не използват, като цяло трябва да разчупите интерфейсите си въз основа на употребата.

Последният е инверсия на зависимостта, която обикновено означава, че модулите от по-високо ниво зависят от самия бизнес. Но модулите от по-ниско ниво (класове на DB, презентационни класове, API...) трябва да зависят от тези модули на бизнес ниво.

След това можем да преминем към подход към решението и прилагане на решението. Можем да постигнем решението с помощта на Мисли през целия проблем, Разделяй и владей, ЦЕЛУВАЙ, Учи се специално от грешките, Винаги помни защо съществува софтуерът и помни, че ти не си потребителят.

Когато внедряваме решението, следваме някои насоки. Те са YAGNI, DRY, Embrace abstraction, DRITW, Напишете код, който прави едно нещо добре, Отстраняването на грешки е по-трудно от писането на код и Kaizen.

Практиките са набор от насоки, които трябва да следваме, когато разработваме код. Основно трябва да вземем предвид тестване на единици, качество на кода, преглед на кода, контрол на версиите и непрекъсната интеграция.

Единичното тестване основно е избор на единица, единица може да бъде метод, клас или API, като че ли може да бъде всичко друго, но не и ясно дефинирана граница. Единичният тест е, докато разработваме модула, ние пишем модулен тест, за да тестваме поведението на модула. Единичният тест ви позволява да откриете грешки възможно най-рано.

Качеството на кода означава спазване на съответните стандарти за кодиране за съответните езици за програмиране. Нашият код трябва да бъде разбираем, четим и лесен за поддръжка. Организациите могат да наложат някои правила, че целият код, който се произвежда от разработчиците, е по подобен начин.

Преглед на кода, който можем да използваме за подобряване на кода. Друг разработчик разглежда кода на друг разработчик с намерението да подобри кода.

Ние можем лесно да управляваме и развиваме нашия код, като използваме контрол на версиите. В момента GitHub е една от основните платформи за контрол на версиите в индустрията. Използват се много организации за поддържане на различни версии на код и лесна работа с множество разработчици. Също така можем да поддържаме история на кода, без да губим части от кода.

Накрая непрекъснато интегрирайте кода си в главния клон, за да се уверите, че работи според очакванията. Това позволява на разработчиците да откриват проблеми на ранен етап.

Втората лекция е базирана на основите на JavaScript. Днес много уеб сайтове са базирани на JavaScript и рамки на JavaScript. Можем лесно да разработим приложение с пълен стек само с помощта на езика за програмиране JavaScript с помощта на изискването за неговите рамки.

Например React и Angular са основните рамки за разработка на фронтенд, а за бекенда широко се използва Node.js с помощта на експресна рамка. Но преди това първо трябва да научим основите на езика JavaScript, защото всички тези споменати рамки и библиотеки са базирани на езика JavaScript. JavaScript е интерпретиран език за програмиране.

Можем да дефинираме JavaScript променлива с помощта на ключови думи const, var и let. Константа, която се създава, не може да бъде променена, след като й дадете стойност. Var и нека можем да променим стойността му, но те се държат малко по-различно по отношение на обхвата. Ако създадете променлива с помощта на var, let или const във функция, всички те са локални променливи и могат да се използват само във функцията. Но ако създадете някоя от тези променливи извън функцията, те са глобални променливи и имат глобален обхват. Те имат достъп и могат да се използват навсякъде във файла. Ако създадем променлива с помощта на var вътре в блок If или нещо различно от функция, можете да получите достъп до тази променлива извън фигурните скоби на блока if.

В JavaScript, когато пишем отнемащ време код, не можем да напишем този код по синхронен начин. Трябва да напишем този отнемащ време код по асинхронен начин. За разработване на кода по асинхронен начин ние използваме специална функция в Java, която е обратно извикване. Просто обратното извикване е, че можем да предадем функция като аргумент на друга функция. След като отнемащата време функция завърши работата, тази функция изпраща резултата обратно с помощта на това обратно извикване.

Но когато разработваме големи приложения, трябва да управляваме функциите си една след друга. В тази ситуация можем да се сблъскаме с някои проблеми с тези обратни извиквания. Този проблем наричаме ад за обратно извикване. Можем да избегнем тези проблеми с помощта на обещания. Promise е JavaScript обект и този обект дава 2 неща. Те са решителни и отхвърлящи. Ако асинхронният процес е успешен, тогава той дава резултат чрез разрешаване. Ако процесът има някои грешки, той дава грешка чрез отхвърляне. Обещанията също имат проблеми, когато разработваме големи приложения. Също като обратното извикване, можем да се сблъскаме с обещаващ ад, когато разработваме приложения. Можем да избегнем този обещаващ ад, като използваме async и await.