connected-model-disconnected-model-ve-entity-frameworkun-ferqi

Connected model, Disconnected model və Entity Frameworkün fərqi

Bugünki məqaləmizin mövzusu ADO.NET-in  yanaşma modelləri arasındakı fərqlər və praktikada hansı halda hansını istifadə etməyimizə həsr olunur.

               ADO.NET (ActiveX Data Objects for .NET) verilənlər bazası və ya başqa resurslarda yerləşən məlumatları idarə etmək üçün nəzərdə tutulan Microsoft texnologiyasıdır. ADO.NET vasitəsilə biz Verilənlərin müxtəlif formalarına (Excel, Outlook, Access, SQLServer, Exchange, OLE DB, XML vəs.)  rahatlıqla manipulyasiya və idarə edə bilərik.

               Bilindiyiniz üzrə ADO.NET –in hazırda 3 model forması var.

1)Connected Model

2)Disconnected Model

3)Entity Framework

               Connected Model – verilənlər bazasıyla “online” rejimdə işləyir. Əgər datalara manipulyasiya aparmaq lazımdırsa mütləq şəkildə baza açıq vəziyyətdə olmalıdır. Yəni əgər datanı almaq ,filter,sort və .s işlər yerinə yetirmək lazımdırsa mütləq şəkildə verilənlər bazasına qoşulu olmalıyıq. DbConnection, DbCommand, DbDataReader, DbDataAdapter, DbParameter, DbTransaction kimi klaslar connected modelin arxitekturasını təmin edən əsas ana klaslardır. Hazırda Ado.NET texnologiyası EF(Entity Framework) hesabına daha da abstrakt levelə qalxsa da mənə görə connected model hələ də öz əhəmiyyətini itirməyib, itirə də bilməz. Çünki istər EF, istər disconnected model background-da yenə də connected modeli istifadə edirlər. Mənə görə aşağıdakı hallarda bu APİ-ni rahatlıqla istfiadə edə bilərik.

Hansı hallarda Connected model işlədək?

1)Öyrənmə məqsədilə(Learning purpose)- SQL-i tanış olub .NET-də SQL ilə işləməyə başlamaği öyrənməyin ən yaxşı yolu mənə görə connected model-dir. Çünki birbaşa disconnected model və ya EF-dən başlamaq arxa planda necə proseslərin yerinə yetirildiyini dərk etməyə imkan vermir. Connected modelə ən aşağı layer olaraq baxa bilərsiniz. Bu imkan verəcək ki, .NET-in SQL queryləri icra etmə prinsipini başa düşək.

2)Müşayiət olunma(code support) -İşləməyə başladığınız hazır layihə ola bilsin connected model üzərinə yazılıb. Bir neçə dəfə bu tipli layihələrə rast gəlmişəm. Məsələ odur ki bir sıra layihələrdə DAL layer formalaşdırılır və data access connected modellə yazılır.(çox azdır amma var) Bu tipli layihələrə rast gəldikdə ənənə üzrə onu yazldığı üslubda davam edirmək lazım olar.

3)Yeni ORM yazılması ehtiyacı( EF sucks sometimes) – EF çox hallarda özünü doğrultsa da bütün hallar üçün bu keçərli deyil. Bəzi şirkətlər hətta sürət naminə nəinki EF , bütün başqa ORM-lərdən imtina edərək özlərinin DAL modelini toplamalı olurlar. Belə olan halda sizdə connected modellə birbaşa işləməli olacaqsınız.

               Disconnected Model – Bu mode-da ADO.NET konteynerdəki məlumatları operativ yaddaşa yükləyərək onlara manipulyasiya edir. Hər dəfə bazaya qoşulub ordan məlumat çəkmək və ya oraya məlumat daxil etmək vaxt aparır və resurs istifadə edir. Sərfiyyatı minimuma endirmək üçün bazadan lazım olan məlumatları operativ yaddaşa yükləyərək onları istifadə edə bilirik. Düzdür, Microsoft hər dəfə bazaya qoşulma prosesində ən qısa zaman və resursa endirmək üçün pooling prosesindən istifadə edir amma yenə də bir çox situasiyalarda disconnected model çox optimaldır. Disconnected model DataSet,DataTable, DataColumn, DataRow, DataRelation və.s klaslar istifadə edərək verilənlər bazasını operativ yaddaşda modelləşdirir. Biz məlumatları artıq RAM-dan çəkdiyimizə və RAMdaki data struktura manipulyasiya etdiyimizə görə proseslər çox sürətli yerinə yetirilir. Yalnızca məlumatları daimi saxlamaq üçün bazayla əlaqə yaradılır və real bazaya data transfer prosesi baş verir. Disconnected modelin işləmə prosesini sadə dillə belə təsvir edə bilərik:

Verilənlər bazasına sorğu verilir və bazada bütün lazımi məlumatlar operativ yaddaşa yığılır. Disconnected modelin verdiyi özəl klaslar imkan yaradır ki, verilənlər yazasının modelini operativ yaddaşda quraq. Daah sonra bazayala əlaqə kəsilir. Biz əgər hansısa dataları update, delete ediriksə ozaman həmin əməliyyatlar sadəcə RAM-da baş verir. Real bazaya təsir etmir. Disconnected Model real dataları bazadan aldıqdan sonra lifecycle boyu həmin dataları izləyir(track) Əgər dataalrda dəyişiklik baş verirsə, həmin dəyişikliyə müvafiq oalraq İNSERT, UPDATE ,DELETE komandaları generasiya edir. Yekunda RAM-daki datalarla işi bitirdikdən sonra save koamndasını verərək RAMd-aki dataları daşıyırıq bazaya.  Hansı hallarda Disconnected model istifadə olunur.

Hansı hallarda Connected model işlədək?

1)Connected model ilə hər hansı bir səbəbdən yetərincə effekt almadıqda- Əgər avadanlıq, məsafə ,data həcmi və ya hər hansı başqa səbəbdən connected model yetərincə sürət təqdim edə bilmədikdə rahatlıqla disconnected model istifadə edə bilərik. Əgər işlədiyimiz proyekt tez tez bazaya müraciət və datalar üzərində fərqli əməliyyatlar (filter, sort vəs) tələb edirsə bu zmaan optimizasiya məqsədilə disconnected modelə baxmaq olar.  Operativ yaddaşda məlumatları sort və filter etmək daha rahatdır nəinki bazaya hər dəfə soft və filter sorğusu göndərmək. İndi bir çox hallarda datanı connected model ilə gətirib ajax ilə sort filter verilir amma həmin sort və filter yalnız əldə olunmuş datalar tətbiq olunur. Yəni sən bazadan misalçün 100 sətir məlumat gətirib Uİ tərəfdə onu disocnnected model olmadan da sort və ya filter edə bilərsən. Amma bu yalnız həmin 100 dataya aid olacaq. Bazada isə daha çox sətir varsa həmin sətirlər bu prosesdə iştirak etməyəcək.

2)İşlədiyiniz şirkətdə yarımçıq layihəni davam etdirdikdə və orada disconnected model istifadə edildikdə -- İşlədiyimiz bir neçə layihədə baza faktiki olaraq disconnected model ilə işləyirdi. Buna tam da olmasa “arxutektur qərar” olaraq baxmaq olar.  Belə olan halda layihənin bir hissəni connected model və ya bir hissəsini EF ilə də yazmaq olardı ,amma mənim fikrimcə bu qarışıqlığa gətirib çıxardır. Bir layihədə (çox böyük olmayan) mümkün qədər  yalnız bir üslubun götürülməsinə yönəlmək lazımdır. Amma buna dogma olaraq baxmaq lazım deyil .Çünki çox böyük layihələrdə aktiv data(tez-tez manipulyasiyaya məruz qalan cədvəllər) və passiv data(passiv cədvəllər) anlayışları ortaya çıxır. Buna görə də bir layihədə həm connected və də başqa model iştirak edə bilər.

               Entity Framework (EF) – Microsoftun verilənlər bazasına qoşulmaq üçün tövsiyə olunan verilənlər bazası modelidir. EF əsasən müasir tipli yeni yazılan applicationlarda istifadə olunur. 99% situasiyalarda bütün tələblərimizi demək olar ki ödəyən ORM –dir. Ado.NET üzərinə abstraktiya olaraq yaradılıb.

Yəni arxa planda yenə də connected və disconnected model istifadə edir. Üzdə isə OOP üslubunda işləyən ORM-dir. ( Niyəsə OOP-nin belini qıran EF-ə OOP üslubu olaraq baxırlar.. EF bir OOP üslubunda bir çox yaxşı proqram yazma prinsiplərinin üzərindən xətt çəkib və buna baxmayaraq istifadəsi asan olduğu üçün tövsiyə olunan birşeydir. ) Sıfırdan başlayan demək olar ki, bütün növ proyektlərdə EF istifadə edilir . Sizinçün də bu belədir güman edirəm. EF-ün arxa planda necə işlədiyini bilmək üçün məncə connected və disconnected modeli dərk etmək mütləqdir. EF verilənlər bazasıyla işləmək üçün bazanın conseptual təsrivini class-lar formasında yaradır. Üzdə klaslarla OOP üslubunda sanki LİST ilə işləyirmişik kimi işləyirik və arxa planda işlədiyimiz konteynerə uyğun SQL querylər generasiya olunur. Məqsəd proqramçıları SQL-dan daha da çox izolyasiya etmək və adi kolleksiyalarla,data strukturlarla necə işləyiriksə bazayla da həmin formada işləməyi təmin etməkdir.EF haqda gələcək məqalələrimizdə daha detallı danışacağıq. Gələn dərsimizdə EF-ün Code first, Database first və Model first yanaşma qaydaları haqda və onların harada istifadə olunması haqda yazacağıq.


Tural

Tural Süleymani

Süleymani Tural Microsoft-un MCSD statuslu mütəxəssisidir, 2008-ci ildən bu yana proqramlaşdırma üzrə tədris aparır

Müəllifin bu dildə ən son postları

Bu yazıları da bəyənə bilərsiniz