Yeni layihəyə başlayan zamanı proqramçını ilk düşündürən suallardan biri proqram arxitekurası olur. Proqramların hazırlanması zamanı arxitekturanın düzgün şəkildə qurulması vacib şərtlərdən biridir. Proqramın arxitekturası proqramın necə yazılmasına, problemlərə yanaşılma tərzinə bir başa təsir edir. Bu yazımda proqramın arxitekturası necə qurulmalıdır?, proqram hansı layerlərə bölünməlidir?, bu layerlər hansı formada əlaqələndirilməlidir?, hansı tullardan istifadə edilməlidir? və s. suallara cavab tapacaqsınız.

All-in-one arxitektura

All-in-one proqram arxitekurası mümkün olan ən az sayda layer olandır. Yəni bir layer olur və hər bir şey onun icərisində yazılır. Proqramın məntiq hissəsi, databaza ilə olan əməliyyatlar və s hər biri bir layerin icərisində yazılır və folderlərlə ayrılır. Məsələn aşağıdakı şəkildə MVC də hazırlanan proqramın Solution-u görünür. Modellər, Controller -lər, View-lar MVC arxitekturasına aiddir. DataAccess-də databaza əməliyyatları aparılır. Proqramın məntiq hissəsi isə çox vaxt Controller -in içərisində yazılır. Göründüyü kimi çox qarışıqlıq var. Layihənin ölçüsü artdıqca folder sayı da artmağa davam edecek və daha da qarışıqlıq yaradacaq.

Bəzən hətta bu tipli istifadə olunan arxitekturalarda belə folderlərə ayırmalar belə düzgün aparılmır. Hər bir şey qarışır bir birinə. Layihəyə yeni proqramçı qoşulan zaman nəyin harda olduğunu tapmaq üçün çox vaxt itirir. Hətta proqramı hazırlayan proqramçı belə bir müddət sonra nəyi harda etdiyini tapmaqda çətinlik çəkir. Buna spagetti kod da deyirlər.

Bunun digər bir mənfi cəhədi isə siz əgər proqramın mobil və ya desktop və b. versiyaları hazırlamaq istəsəniz proqramı demək olar ki, yenidən yazmalı olacaqsız.

Yenidən niyə? kopiyalayıb yeni proyektə atacam vəsalam

Kopiyalayıb atmaq elə yenidən yazmaq kimidir. Əgər sizdən proqramın məntiqində dəyişikliyin edilməsini istənilsə siz proqramın hər bir versiyalarda düzəliş etməli olacaqsız.

N-Layer arxitektura

N-Layer proqram arxitekurası köhnə olmasına baxmayaraq hələ də sıxca istifadə olurur. Bu zaman proqram ən azı üç, Presentation, BLL (Business Logic Layer) və DAL (Data Access Layer) layerlərə bölünür. Layerlərin bir birindən asılılığı şəkildəki ardıcılıqla olmalıdır.

Presentationproqramın istifadəçi tərəfini hazırlanması və istifadəçidən gələn məlumatlar BLL ötürülməsi və əksinə BLL dan gələn məlumatın istifadəçiyə xüsusi formada verilməsi üçün hazırlanır. Presentation layer Web, Desktop və Web API və b. ola bilər.

BLL proqramın məntiq hissəsi üçün hazırlanır. Proqram hansı işi görəcək hansı əməliyyatlar yerinə yetirəcək hamısı burada yazılır. Buna proqramın mator hissəsi də deyə bilərik. Proqramın idarə olunması ancaq burda aparılır.

DAL – bu layerdə databaza ilə olan bütün əməliyyatlar aparılır. Məlumatların saxlanması, gətirilməsi, dəyişdirilməsi, silinməsi və s. kimi bütün əməliyyatlar burada aparılır.

Bəzən bu pr arxitekturanı tətbiq edirəm deyərək üç bu adda layer yaradılır amma əməliyyatlar düzgün şəkildə bölünmür. Bəzən Presentation layerdə məntiq əməliyyatlar bəzən databaza əməliyyatlar aparılır. Yəni proqram hazırlayan zaman proqrama üç bu adda layer əlavə etmək hələ bu arxitekturanı düzgün tətbiq etmək anlamına gəlmir. Yerinə yetirilən əməliyyatı diqqətlə düşünülməlidir və hansı tip əməliyyat olduğuna qərar verildikdən sonra uyğun layerdə yazılmalıdır. 

Bu arxitektura istifadə edilən zaman üçdən çox layer hazırlana bilər. Bu ümumi BLL və DAL -ın mətiqinə təsir etməməlidir.Mənim özümün bir çox layihələrimdə tətbiq etdiyim arxitekturanı sizlər üçün hazırlamışam. Buradan baxa bilərsiz.

Qeyd:  Git-ə yerləşdirdiyim proqramda SampleServis hazırlamışam. Bu yalnız bir nümunədir. Buna görə də həmin servisin hər bir metodunda bəzi yoxlamalar yazılmayıb. Məsələn Update metodunda id -yə görə databazadan məlumat gətiririk amma yoxlamırıq həqiqətən də həmin id-yə görə məlumat var ya yox. Bundan başqa proqramın istifadəçisinin məlumatlarının idarə olunması, Xətaların idarə oluması, Validationların necə ümumi əlavə olunması, istifadəçiyə yönümlü bildiriş mesajlarının qaytarılamsı, IoC Container və s göstərilməyib. Bu real bir proqram deyil yalnız bir arxitektura nümunəsdir.

Layerlərin adlandırılamsını aşağıdakı formada aparıram

[Layihənin adı].[Layerin adı]

Məsələn EBook.DataAccessLayer, EBook.BusinessLogicLayer və s. Əgər şirkətin bir neçə layihəsi olarsa bu zaman şirkətin adını da əvvələ əlavə etmək olar. Məsələn BDU.EBook.DataAccessLayer, BDU.EBook.BusinessLogicLayer və s. kimi yazmaq olar.

BusinessLayer aşağıdakı folderlərdən ibarət olur.

Abstractions- Bu folderdə ancaq interface-lər və abstract classlar yer alır. Xidmət göstərən yəni hər hansı bir işi görən classlara servis classlar deyirəm. Onların hər birinin bir mənalı olaraq interface-ləri olmalıdır. Həmin interface-ləri Abstractions-ınaltında Services folderində yerləşdirirəm.

Dtos – Data Transfer Object-lərmi bu folderdə yerləşdirirəm.

Mappings – Bu folderdə Dto Entity və əksinə mappingləri yazıram. Burada siz mappingləri özünüz də yaza bilərsiz amma mən AutoMapper-dən istifadə edirəm.

ServiceImplementations Abstractions-ınaltında Services folderində olan interface-lerin implementation olan classlar isə bu folderdə yerləşdirirəm.

Validations – bu folderdə istifadəçidən gələn məlumatların düzgünlüyünü yoxlamaq üçün Valiatorlar hazırlayıram. Bunun üçün adətən FluentValidation-dan istifadə edirəm.

Servis classlarına Dependency Injection Principle tətbiq edirəm. Yəni həmin servisdən istifadə edən digər servis və controller-lər həmin servisin interface-indən istifadə etməlidir. Constructor Injection tətbiq etmək lazımdır ki servis classları bir birindən asılı qalmasın.

DataAccessLayer üçünsə buradan ətraflı oxuya bilərsiz.

Bu arxitektura ilə hazırladığım bütün layihələdə bu layerlər və folderlər standartdır yəni ən az bu qədər bölünmə olur. Layihənin böyüklüyündən və gördüyü işlədən asılı olaraq başqa bir neçə layerlər də əlavə edirəm. Businessdə olan folderlə də layihənin ölçüsündən asılı olaraq arta bililir.

Bir cavab yazın

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir