Badral's personal blog
Интернет миний ертөнцийг хардаг цонх …

Posts Tagged ‘MSL’

Entity Framework 4 is full of bugs

Thursday, October 28th, 2010

За ойрд энэ муу хогийн хэрэгсэлтэй ажиллаж нервтэж үхэх нь. Уг нь програм хангамжийн инженерчлэлийн их хөөрхөн санаа байна гэж харж, ойлгож ойшоож хүлээн авч ашигласан юм. Гэтэл микрософтынхон үүнийг миний бодож байгаа шиг зохиосон биш Nhibernate шиг визуал Object Relational Mapping маягийн хэрэгсэл хийсэн байжээ гэдгийг хэд хоногийн өмнө Жулиа Лерман, Франц Боума хоёртой ярилцаад ойлголоо. Тийм том газар байж заавал яах гэж нэг нээлттэй эх бүхий програмтай өрсөлдөж ноцолдож байдаг байнаа, жаахан дээгүүр харж болмоор доо. Би уг нь EF-ыг ERD (Entity Relational Diagram) буюу Объект холбоосын диаграмаа зураад түүнээсээ автоматаар өгөгдлийн сангаа үүсгэхийн сацуу, объект холбоосын буулгалтын давхрага (layer) үүсгэчихдэг дээр нь сүүлийн хувилбар нь reverse engineering дэмжилттэй тун давгүй эд байна гэж үзээд сонгосон нь алдаа болов. Миний ажлыг нэг сараар ухраав.
Уг нь model-first, db-first, code-first 3 арга барилтай эд юм. Миний зорилго бол model-first зарчмаар шинэ програмынхаа объект холбоосын давхрагаа үүсгэх явдал байлаа. Яагаад гэвэл хийсэн ажлаа тайлагнахын тулд үзүүлэх юм байх хэрэгтэй дээ. Тэгээд ч тэрхүү визуал диаграмыг зурах нь програм хангамжийн инженерчлэлд байх ёстой л нэгэн процесс. Тиймээс өгөгдлийн сангаа бүтэцлээд EF designer-р загварчлаад байлаа, зураад л байлаа, овоо ч олон хүснэгтийг (~200) цааш харуулав. За тэгээд нэг завсрын шалгалт хийгээд үзье гэж бодоод жижигхэн модуль бичээд өгөгдлийн сангийн нөгөө буулгалтын давхрагаа ачаалаад үзлээ. Ээ бурхан минь нэг WPF цонх ачаалах гэж бараг 5 секунд болж байнаа. Ингээд энэ асуудлын талаар гүүглэ гуайгаас хайж үзлээ. Гэтэл хөөрхий 100-с дээш хүснэгттэй үед удаад явдаггүй болох нь тодорхой боллоо.
За тэгээд диаграмаа модуль модулиар нь хувааж эхлэхээс өөр илүү арга олддсонгүй. 6 модульд хуваалаа.
Модуль тус бүрт нь CDSL (conceptual data services layer), SSDL (Storage Schema Definition Language), MSL(Mapping Specification Language)-г тусад нь үүсгэхгүй бол хүчин чадлын хувьд сайжраад байх юм алга. Түүнээс биш олон CDSL үүсгээд нэг SSDL ба MSL үүсгээд хуваадаг арга байдаг л юм байна. Аль алинд нь T4 template ашиглана.
Гэтэл модулиудын хувьд shared table буюу хамтын хэрэглээний хүснэгтүүдийн мета мэдээллийг заавал тусад нь CDSL үүсгэж байгаад гараар засаж өгөхөөс өөр аргагүй болох нь тэр. Сигнал дамжуулж автматчилах боломж байсангүй. За тэгээд нэг гараар засаад өгчихлөө гэхэд объект загвартаа засвар хийсэн бол ахиад л нөгөө гар өөрчлөлтүүдээ концептуал өгөгдлийн үйлчилгээний давхрагатаа гараар засаж өгнө гэсэн үг. Нөгөө визуал дизайнер маань сүртэй үүрэг гүйцэтгэхээ больж эхэллээ гэсэн үг. Гэтэл Франц Боума болон түүний нөхдийн хийсэн llblgen pro гэсэн хэрэгсэл байдаг юм байна. Жулиагийн зөвлөсөний дагуу туршиж үзлээ. Чадлын хувьд ч овоо юмаа, ярих юм алга. Гэтэл нь түүний дизайнер нь гэж авах юм алга. Визуал дизайн ч гаргаж чадахгүй юм. Ер нь model-first биш DB-first арга замд зориулж хийгдсэн эд болох нь тодорхой боллоо. (Шинэчлэл: Дажгүй дизайнертай болохыг хожим нэлээн ухаж байж олж авав. Дараагийн удаа энэ фрэймворкыг хэрэглэнэ ээ.) Гэтэл надад DB байхгүй түүнийгээ шинээр загварчилж байхын дээр ажлаа танилцуулахын тулд баримт ба загвар маань хэрэгтэй байгаад байдаг. Тэгээд ч тийм визуал загвар гаргаж чадахгүй л бол заавал тийм үнэтэй эд хэрэглэж байхаар төлбөргүй, нээлттэй эхээр нь Nhabernate-р хийж болно шүү дээ. Ялгаагүй л гараар концептуал загвараа кодлохоос хойш.
Тиймээс за больё ямар ч гэсэн загвараа хичнээн том ч байсан хамаагүй үүсгэж байгаад өгөгдлийн сангаа үүсгэж авсны дараа Nhabernate-р эргээд ORM хийе гэж бодоод цагт баригдан цааш суулаа. За тэгээд загвараа задлаад буцааж нийлүүлээд хайран цаг алдав. Дээр нь хүснэгтүүдийг хуулахад талбаруудын тайлбарууд хуулагдахгүй үлдээд байх согог өнөө хэрэгсэлд байх. Аль болох болох бүтэхээр нь туслахдаа өгч гараар хийлгээд зүтгээд байлаа.
Уг нь ч энэхүү EF4 хэрэгсэл арай ядан хиймээр аядах юм. даанч нил алдаа согог.
Гэтэл өнөөдөр bit, datetime талбаруудын өгөгдмөл (default) утгуудыг SSDL файлдаа үүсгэхгүй харин зөвхөн CDSL -дээ үүсгэж байхын. За нэг жижиг согог байна даа бараг засагдсан биз гэж бодоод hotfix хайтал байдаггүй ээ. Уг нь энэ согог бараг жилийн өмнө мэдээлэгдсэн боловч микрософт дараагийн хувилбар хүртэл засахгүй юм байхаа. Ай хөөрхий өнөөдрийн бүтэн өдрийн ажил ингэж нурсан болохоор удаан хугацаагаар гар хүрч чадаагүй блогдоо энэхүү бичлэгийг хийв. Энийгээ бичиж жаахан тайвширч аваад гараар л өөрөө DDL скрипт файлд нь засвар (patch) хийдэг бас нэг жижиг скрипт бичихээс дээ.
Микрософтыг би үзэн ядсандаа биш иймэрхүү алдаа ихтэй, алдаагаа засахгүй их зантай болохоор нь байгаа байдлыг нь л бичихээс аргагүй болох юм. Дээр нь монопол болохоор даалгавар, ажлын хувьд шаардлага нь виндовс дээрх үйлчлүүлэгчид зориулж тэр Visual Studio-р хий гээд тулгагдаад ороод ирэхээр хүчээр ашиглахаас аргагүй, ингээд цаг идээд гараар (manual) -р ноцолдож эхлэхээр уур их хүрэх юм даа. Хайран ч цаг минь.
Монголын ёс юм гээд муу ч гэсэн сайныг ерөөж бичлэгээ өндөрлөе. Microsoft “Entity framework”-н дараагийн хувилбар сургалтад зориулсан рекламдах маягийн бүтээгдэхүүн биш үйлдвэрлэлд хэрэглэгдэх боломжтой бүтээгдэхүүн болж гараасай гэж ерөөе дөө.