مایکروسافت قبل از معرفی Entity Framework ، تکنولوژیهای ado , rdo و سرانجام ado.net را ارایه کرده بود و برای اکثر این تکنولوژیها زمان زیادی گذاشته بود ، هر کدام از اینها در زمان خود یک تکنولوژی نوینی و حرکت عظیمی بود . اما با گسترش مفاهیم شی گرایی و نیاز مبرم برنامه نویسان به ایجاد اشیا از داده ها و جداول بانکهای اطلاعاتی مایکروسافت اقدام به توسعه تکنولوژی ado.net کرد و ابتدا امکانات linq و سپس Entity Framework را برای تعامل بهتر با شی گرایی مطرح کرد .
تا قبل از آن برنامه نویسان زمان زیادی را برای برنامه نویسی اشیا جدولهای بانکهای اطلاعاتی و ارتباطات آن صرف می کردند و هر گونه تغییر در جداول بانکها مستلزم تغییرات فراوانی در کد نویسی است .
ابتدا فهرستی از ابزارهای مدل سازی را معرفی می کنم :
1-ERM یا Entity Relationship Model ابزاری برای مدل سازی پایگاههای داده ای رابطه ای .
2- UML یا Unified Modeling Language زبان استاندار ماژول سازی اشیا و کلاسها
3-ORM یا Object-Relational Mappingروشی و ابزاری برای ایجاد تعامل ماژولار میان اشیا بانکهای اطلاعاتی رابطه ای و زبانهای برنامه نویسی شی گرا
4-DFD یا Data Flow Diagram ابزاری برای نمایش نموداری از جریان داده ها و فرآیند سیستم
البته چند ORM دیگر هم وجود دارد یکی NHibernate و SPRINT.net هر دوتای آنها از جاوا مشتق شده اند و توانمنیدهای فراوانی دارند اما بحث ما Entity Framework.Net4 است .
البته لیست بالا لیست کاملی نیست و از حوصله این بحث خارج است .
قبل از ورود به بحث Entity Framework مقدمه ای در مورد Entity Data Model یا مختصرا EDM باید بیان شود .EDM در حقیقت پایه و پیش نیاز Entity Framework است و شامل سه model است
1-مدل مفهومی 2-مدل منطقی 3-مدل ذخیره سازی یا فیزیکی
ما می توانیم بگوییم که EDM یک نسخه تکامل یافته ERM است .ما در مدل EDM در مورد ساختار شی گرای business objects داده ها بحث می کنیم در حالی که در مدل ERM ما در مورد طرح بانک اطلاعاتی بحث می کنیم .که باید تفاوت میان مدل داده و مدل شی را متوجه شویم ، شکل زیر یک مدل داده را نشان می دهد در حالی که شکل بعدی مدل شی گرا از بانک اطلاعاتی ما را نشان می دهد.
Entity چیست ؟
ما برای فهم Entity Framework باید ابتدا مفهوم Entity را متوجه شویم ، البته بعدا در مورد این مفصلا خواهم نوشت ولی فعلا برای فهم بیشتر مقایسه ای با object و relational data انجام می دهم
تشابه Entity با شی یا object
1- Entity مانند شی دارای انواع تعریف شده برای داده ها و فیلدها است
2- Entity مانند شی دارای خصوصیت یا properties است
3- هر Entity یک هویت متمایزی دارد
4- یک خصوصیت Entity می تواند ارجاعی به Entity دیگر باشد
تفاوت Entity با شی یا object
1 -Entity می تواند یک فیلد اصلی یا primary keys داشته باشد
2-Entity می تواند دارای ارتباطی با Entity دیگر باشدمانند ارتباطات موجود در بانک اطلاعاتی
تشابه Entity با داده رابطه ای relational data
1-Entity یک ارتباط چند گانه مانند داده ها با دیگر entity می تواند داشته باشد
2-Entity مانند داده ها می تواند کلید اصلی یا primary key داشته باشد
تفاوت Entity با داده رابطه ای relational data
1-Entity از داده ها با نوع پیچیده complex typesپشتیبانی می کند
2-Entity از وراثت موجود در کلاسها پشتیبانی می کند
3-Entity داده های فیزیکی را ذخیره نمی کند .
پس Entity Framework چیست ؟
درواقع Entity Framework تکنولوژی توسعه یافته ADO.Net است که فاصله بین برنامه نویسی شی گرایی و بانک اطلاعاتی رابطه ای را پر می کند .این فاصله معمولا تحت عنوان عدم تطابق شناخته می شود. و یک تکنیک برنامه نویسی برای تبدیل ارتباطات در Database به مفاهیم Object Oriented در برنامه نویسی است. در واقع میتوان گفت که کلاس ها را به Table ها map میکند. وقتی که شما میخواهید به Database دسترسی پیدا کنید، یا اطلاعاتی را ذخیره کنید، این کارها را مستقیما بر روی اشیاء ( Object تان ) انجام میدهید. Entity Framework مدل داده ها را به سه بخش تقسیم می کند 1-مدل مفهومی یا ادراکی 2-مدل منطقی 3- مدل فیزیکی
پایان بخش اول
فرض کنید شرکتی به نام w می خواهد سه نفر نیرو x,y,z را استخدام کند ، این شرکت حق دارد در مورد این سه مجهول x,y,z تحقیق کند ،مواردی مانند تخصص ، سوابق و تعهدات و از همه مهمتر موارد قابل اعتماد بودن طرف .
اما در طرف دیگر معادله متغیر w یعنی شرکت قرار، دارد ، که به نظر من قبل ار معلوم شدن 3 مجهول بالا ، ابتدا باید مجهول w معلوم باشد ، در تعجبم از برخی آگاهیهای استخدام برخی شرکتها که هیچ اسم و نشانی از خود نمی نویسند مثلا یک آگاهی استخدام اعلام می کنند با عنوان زیر:
شرکتی معتبر در زمینه نرم افزار یا صنعتی یا تجارت و غیره ، نیاز به سه نفر نیرو با تخصصهای زیر دارد
1-مثلا برنامه نویس P
2-پشتیبان v
3-مدیر فلان و غیره
لطفا رزومه خود را به آدرس ایمیل نامعلوم jobdsa@gmail.com بفرستید
خوب دقت کنید که از آگاهی بالا چه می فهمید ، قراره کجا کار کنید ،رزومه باید به کدام شرکت بفرستید ، وقتی با چنین آگاهیهای استخدام مجهول مواجه می شوید عکس العمل شما چیست ؟ آیا حق استخدام شونده این نیست که در مورد شرکت تحقیق کند ، سابقه شرکت ، فعالیت شرکت و غیره
در فضای اینترنت مطالب زیادی در مورد رزومه نوشتن هست ، اما من سوالم این است چرا مطالب کمی در مورد نحوه اگاهی زدن برای استخدام هست ، به نظر من یک فرد حق دارد بداند که قرار است کجا کار کند چون
1-با فرض اینکه روزانه 10 ساعت از عمرتان را در محل کار می گذرانید مثلا از ساعت 8 صبح تا 5 بعد از ظهر و سپس تقریبا در محدوه ساعت 6 تا هفت به منزل می رسید ، اگر فرض کنیم ساعت 12 هم می خوابید پس هر روز 10 ساعت در محل کار و 5 ساعت در منزل هستید یعنی 2 برابر وقت زندگی شما در محل کار است ، پس حق دارید بدانید که رزومه تان قرار است برای کجا فرستاده شود ، یک شرکت معلوم نه یک شرکت مجهول .
2-آرامش در محل کار منجر به آرامش در تمام مراحل زندگی هم می شود، پس حق دارید بدانید که رزومه تان قرار است برای کجا فرستاده شود ، یک شرکت معلوم نه یک شرکت مجهول .
3-شاید محل کار شرکت با محل زندگی من فاصله زیادی داشته باشد لذا من در همین نگاه اول قضیه را منتفی می کنم پس حداقل باید اسم و نشانی از شرکت باشد .نه یک چیز مجهول
واقعا برای من سوال است که چرا برخی شرکتها در آگاهی استخدام هیچ اسم و نشانی از خود نمی نویسند ؟ آیا شما حاضر هستید رزومه کاری خود را برای جایی مجهول بفرستید ؟ مناسب بودن محل کار را چه کسی تضمین می کند ؟ و ده ها سوال دیگر .
دوست دارم در این زمینه از تجربیات دوستان و خوانندگان بشنوم .
از بزرگواران عزیز مجید آواژ ، علی واحد ،افشار محبی ، ایمان نعمتی ،امیر مهرانی،
و تمام دوستان دیگر ، تقاضا می کنم به ما لطف کنند و نقطه نظراتشان را بیان کنند ،
با تشکر
در مقاله قبل آموختیم که کلاسی که IEnumberator را اعمال می کند قادر به پیمایش رکورد به رکورد داده ها توسط یک حلقه While می باشد ، داشتن خاصیت Current برای مشخص نمودن آیتم جاری ،متد MoveNext برای حرکت به آیتم بعدی و متد Reset برای ریست نمودن پیماینده شاخص های آن می باشند .
در صورتی که یک List کل اطلاعات را در بر دارد و در صورت زیاد بودن رکورد ها قادر به پیمایش آن نخواهد بود . بنابراین IEnumerator برای پیمایش رکورد ها با حجم زیاد بسیار مناسب خواهد بود چرا که اطلاعات را تک به تک پیمایش کرده و هر بار یک رکورد را در حافظه قرار می دهد .
اکنون می خواهم در ادامه مطلب فوق در مورد IEnumerable Inteface صحبت کنم .این اینترفیس متد
GetEnumerator را در اختیار ما قرار می دهد و پارامتر برگشتی این متد از نوع همان اینترفیس IEnumberator است در واقع کلاس ما را قابل پیمایش می کند تا بتوانیم حلقه foreach را در مورد کلاسمون بکار ببریم . فرم کلی بصورت زیر است :
اکنون یک مثال را با هم مرور می کنیم فرض کنید کلاس داریم به نام ColorEnumerator این کلاس از اینترفیس IEnumerator ارث بری می کند این کلاس یک رشته از رنگها را در بر می گیرد ، چون اینترفیس IEnumerator را بر روی آن مطابق شکل زیر اعمال کردیم پس قابل پیمایش می باشد .
اکنون ما کلاسی دیگر ایجاد می کنیم که از اینترفیس IEnumerable وراث دارد ، این کلاس در متد GetEnumerator پارمتری از نوع کلاس بالا برمی گرداند مطابق شکل زیر :
حال این کلاس ما در برنامه براحتی می توانیم حلقه foreach را برای پیمایش اعضای آن استفاده کنیم .
مطابق شکل زیر :
فرض کنیم کلاسی داشته باشیم که مشخصات پرسنل سازمانی را نشان می دهد ، سپس توسط توایعی لیست فرضا از هزار پرسنل سازمان را تولید کنیم ، ما اکنون می خواهیم بر روی این لیست پرسنل پیمایش کنیم ، راه حل ساده است باید کلاس پرسنل خودتان را بوسیله
Enumerators and Enumerable اعمال کنید .