گذاشتن محدودیت برای برنامه نویسان… اما به چه قیمتی!

گذاشتن محدودیت های مختلف برای برنامه نویسان از مهمترین دغدغه های اکثر مدیران شرکت های نرم افزاری در ایران بوده و هست. برنامه نویسی یک شغل بسیار متفاوت است که نمی توان با راهکارهای مدیریتی شغل های دیگر بر روی آن مدیریت داشت و موفق شد. کسی که قرار است بر روی چندین برنامه نویس و مهندس نرم افزار مدیریت کند خودش حتماً باید از زوایا و جزئیات این کار کاملاً آگاه باشد. به علت تفاوت این شغل با شغل های دیگر، نمی توان همان محدودیت هایی که برای کارمندان دیگر شغل ها در یک شرکت گذاشته می شود و معمولاً جواب می دهد را برای برنامه نویسان گذاشت و جواب گرفت.

به عنوان کسی که در حال حاضر به عنوان یک برنامه نویس کار می کند در این مطلب در مورد مهمترین محدودیت هایی که برای برنامه نویسان گذاشته می شود بحث خواهم کرد. شما هم اگر برنامه نویس هستید می توانید در قسمت نظرات این مطلب یا در وبلاگ خود در این مورد بنویسید. اگر مدیر شرکت نرم افزاری هستید در مورد این محدودیت ها در شرکت خود بنویسید و اگر مخالف هستید حتماً نظر مخالف خود را بیان کنید تا به یک نتیجه گیری خوب در آخر برسیم.

محدودیت دسترسی به اینترنت

در اکثر شرکت ها و مخصوصاً شرکت های نرم افزاری که به اینترنت نیاز دارند، این سئوال پیش می آید که آیا باید بر روی دسترسی اینترنت کارمندان محدودیت اعمال کرد یا نه. معمولاً اکثر محدودیت های اینترنتی شرکت ها بر روی وب سایت های شبکه های اجتماعی، مسنجرها، ایمیل ها و وب سایت های خبری و بلاگ های شخصی است. در مملکت ما که اکثر شبکه های اجتماعی بسته هستند و نیازی به اعمال محدودیت در سطح شرکت برای این وب سایت ها وجود ندارد. اما در مورد مسنجر ها، سرویس های ایمیل و وب سایت های خبری معمولاً محدودیت هایی اعمال می شود. در بعضی شرکت ها این محدودیت با استفاده از ابزارهای پیشرفته و تقریباً سنگین است و در برخی دیگر سخت گیری زیادی در مورد آن نمی شود اما می توان گفت در اکثر شرکت های نرم افزاری ایران در مورد استفاده از اینترنت برای نیروی فنی خود محدودیت می گذارند. دلیل این کار هم مشخص است، می خواهند برنامه نویسان به جای وقت تلف کردن در وب سایت های غیر مرتبط با کار، کارایی بالاتری داشته باشند. من به عنوان یک برنامه نویس با این ایده کاملاً مخالفم. با محدود کردن دسترسی برنامه نویسان به اینترنت نمی توان به کارایی بالاتر رسید. باید قبول کرد که برنامه نویسی شغلی بسیار متفاوت از شغل های دیگر است. کسی که می خواهد یک شرکت نرم افزاری را با چند برنامه نویسی اداره کند نباید تفکرش با مدیران دیگر یکی باشد. برنامه نویسی امروز بدون داشتن دسترسی به اینترنت امکان پذیر نخواهد بود.

می توان اینطور نتیجه گرفت که باید وب سایت های مرتبط با برنامه نویسی را آزاد گذاشت اما وب سایت های غیر مرتبط و سرویس های وب مثل ایمیل، مسنجر و شبکه های اجتماعی را فیلتر کرد. خب اینکه مسلم است وب سایت هایی مثل MSDN یا StackOverFlow باید برای برنامه نویسان قابل دسترس باشند، اما به نظرم بقیه وب، مثل شبکه های اجتماعی و مسنجرها نیز باید برای برنامه نویسان قابل دسترس باشند. می پرسید چرا؟ به این دلیل که اکثر برنامه نویس ها رابطه هایی دارند که می تواند هنگام کار به آن ها کمک کنند. به طور مثال من می توانم در مورد مشکلی که دارم در مسنجر از دوست برنامه نویسم کمک بخواهم یا ایده جدیدی برای حل مشکلم در یک گروه برنامه نویسی در فیس بوک بدست بیاورم. از جی میل می توانم برای ارتباط های کاری و رد و بدل کردن فایل هایم استفاده کنم. در مورد بلاگ ها هم همینطور. اکثر وبلاگ های برنامه نویسان مطرح به صورت وبلاگ شخصی هستند. ممکن است راه حلی که من بدنبال آن هستم در یکی از همین وبلاگ های شخصی باشد که برایم قابل دسترس نیست.

در مورد وب سایت های کاملاً غیر مرتبط با کار هم با اعمال محدودیت مخالفم. باز هم تکرار میکنم که برنامه نویسی با دیگر شغل ها تفاوت بسیاری دارد. خواندن یک مطلب کاملاً غیر مرتبط با کار می تواند ذهن من را به عنوان یک برنامه نویس رفرش کند تا بتوانم دوباره با ذهنی پاک بر روی مساله موجود تمرکز کنم و کارم را به اتمام برسانم. در این مورد تحقیق علمی هم وجود دارد که یک نمونه از آن ها را می توانید اینجا بخوانید.

محدودیت ساعت ورود و خروج

شاید اکثر مدیران شرکت های نرم افزاری در این مورد توافق دارند که برای یک برنامه نویسی که درگیر تولید محصول است، نباید اجبار در ساعت ورود به شرکت گذاشت. هرچند به این موضوع اعتراف می کنند اما باز هم احتمال اینکه در زمان دیر رفتن با قیافه عبوس جناب مدیر مواجه شوید زیاد است. یک برنامه نویس اگر به اندازه کافی نخوابیده باشد و یا فکرش جای دیگر باشد، حضور فیزیکی اش در یک ساعت معین در شرکت به هیچ دردی نمی خورد. اگر مثل شرکت های دولتی فقط زمان حضور برایتان اهمیت ندارد، بهتر است در مورد ساعت ورود برنامه نویسان به شرکت هیچ محدودیتی قرار ندهید. البته بحث بر سر برنامه نویسانی نیست که کار پشتیبانی انجام می دهند. برنامه نویسانی که کار تولید انجام می دهند و هیچ رابطه مستقیمی با مشتریان ندارند، نیازی به یک ساعت ورود مشخص ندارند. معیار سنجش این برنامه نویسان باید وظیفه ای باشد. یعنی کاری که در یک روز به آن ها واگذار شده را به خوبی انجام دهند و نه ساعت ورود یا خروج آن ها از شرکت.

محدودیت صحبت با تلفن شخصی

این محدودیت شاید بهترین و موثرترین محدودیتی باشد که شما می توانید برای برنامه نویسان تان قرار دهید. به عنوان یک برنامه نویس هیچ چیز بیشتر از زنگ تلفن همراهم حواسم را هنگام کار پرت نمی کند. معمولاً جواب تلفنم را هنگام کد نویسی نمی دهم. بهترین حالت این است که در زمان کار از برنامه نویسان بخواهید که گوشی های خود را خاموش کنند و به هنگام نهار و استراحت در این مورد آزاد باشند. هر چند باز هم باید تلفن های ضروری را استثنا دانست و سخت گیری در این مورد نباید داشت زیرا برنامه نویسی که منتظر یک تماس تلفنی مهم و ضروری است نمی تواند به خوبی کار کند و همه حواسش به تلفنش خواهد بود.

محدودیت زمان استراحت

به عنوان یک برنامه نویس نمی توانم بیشتر از دو ساعت به صورت مداوم کدنویسی کنم و به مانیتور چشم بدوزم. باید درک کرد که یک برنامه نویس با یک تایپیست فرق می کند، و برای هر خطی که تایپ می کند ابتدا باید فکر کند. بهترین حالت این است که به صورت دوره ای مثلاً هر یک ساعت، 10 دقیقه به ذهن استراحت داد تا برای ادامه کار ذهن خسته نباشد. در این 10 دقیقه می توان چای یا قهوه نوشید و با همکار در حال استراحت خود گپ زد. برای خودم خیلی پیش آمده که زمانی که ذهنم بر روی یک مشکل متمرکز شده است، در زمان استراحت ایده جدیدی برای رفع مشکل به ذهنم خطور کرده و کارایی ام بالاتر رفته است. بعد از هر یک ساعت کار 10 دقیقه از میز و مانیتورتان دور شوید، قهوه یا چای بنوشید، قدمی بزنید، زیر آفتاب بروید و ذهن تان را رفرش کنید. زمانی که به سختی بر روی یک موضوعی کار می کنید و جواب نمی گیرید و ممکن است با 10 دقیقه استراحت ذهنی، کل قضیه از دستتان خارج شود می توان با کمی قدم زدن و فکر کردن ایده های جدیدی برای رفع مشکل پیدا کرد. در زمان استراحت می توان حتی مطالب غیر کاری را در وب مطالعه کرد تا ذهن برای ادامه کار خلوت و آماده شود.

این را بخاطر داشته باشید که برنامه نویسی که به طور مداوم کدنویسی می کند و به مانیتور خیره است نه تنها کارایی بالاتری ندارد بلکه مطمئن باشید کیفیت کارش از برنامه نویسی که هم کار می کند و هم استراحت، پایین تر است. می توان با استراحت های دوره ای در حین کار، مثل نوشیدن قهوه، خوردن میان وعده، گپ زدن در مورد مطالب غیر کاری و خواندن یک مطلب خنده دار به همراه همکاران در حال استراحت، کارایی را بالا برد. سخت کار کردن هیچ ربطی به 4-5 ساعت پشت سر هم کد نویسی و نشستن و خیره شدن به مانیتور ندارد! درست کار کردن مهم است.

محدودیت گوش دادن به موزیک

گوش دادن به موزیک در حین کار برای اشخاص به اصطلاح Knoledge Worker مثل نویسندگان و برنامه نویسان می تواند مفید باشد. من خودم به عنوان یک برنامه نویس زمانی که در حین کار به موزیک گوش میدهم از زمانی که در سکوت برنامه نویسی می کنم، کارایی بالاتری دارم. گوش دادن به موزیک با هدفون مخصوصاً زمانی که تیم تولید و پشتیبانی و منشی و بازاریاب یکجا هستند و سر و صدا زیاد است، حتماً کارایی یک برنامه نویس را افزایش می دهد و کمک می کند تا برنامه نویس تمرکز بیشتری بر موضوع کارش داشته باشد. هرچند گوش دادن به موزیک در حین کار یک موضوع کاملاً سلیقه ای است، اما حتی برای کسانی که از این کار خوششان نمی آید هم تاثیر مثبت به همراه دارد، فقط آن ها باید این موضوع را قبول کنند. گوش دادن به موزیک هم می تواند باعث پرت شدن حواس در حین کار شود و هم می تواند به شما کمک کند تا بر روی کار خود تمرکز بیشتری داشته باشید. این باید بستگی به خود برنامه نویس داشته باشد که آیا می تواند با گوش دادن به موزیک کارایی خود را بالاتر ببرد یا خیر؟

گوش دادن به موزیک بوسیله هدفون در حین برنامه نویسی مثل این است که در اتاق خود را ببندید و در آرامش کار خود را انجام بدهید حتی در زمانی که در یک جای شلوغ و پر استرس قرار دارید. روی هر چیزی محدودیت قرار می دهید به هیچ وجه سعی نکنید بر روی گوش دادن موزیک در مورد برنامه نویسان محدودیت قرار دهید!

نتیجه

نه فقط در مورد برنامه نویسان، بلکه در هر موردی گذاشتن محدودیت اثر عکس دارد و اثر مثبتی نخواهد داشت. صداقت و اعتماد متقابل میان همکاران و مدیران در یک شرکت کلید موفقیت در این مورد است. شما با اعتماد به برنامه نویسان خود به چیزی بالاتر از نتیجه اعمال محدودیت ها در شرکت خود خواهید رسید. با گذاشتن محدودیت های بیخود و زجرآور کردن کار برای برنامه نویسان به جای بالا بردن کارایی، کیفیت کار آن ها را پایین خواهید آورد. اگر با محدود کردن اینترنت و تلفن های همراه برنامه نویسان خود منتظر افزایش کارایی آن ها هستید، بدانید که شرکت شما از نظر فرهنگ کاری و اخلاقی مشکلات زیادی دارد. فرهنگ سازی در این موارد بهترین راه حل برای افزایش کارایی برنامه نویسان خواهد بود. برنامه نویسانی که خودشان می دانند چه موقع باید استراحت کنند، چه موقع باید سر کار حاضر باشند، چه موقع باید به تلفن همراه خود جواب دهند و چه موقع باید فقط و فقط بر روی کار تمرکز کنند.

farasun.wordpress.com

خواندن مطلب مرتبط : یک محیط سفارشی شده; تمام چیزی که یک برنامه نویس می خواهد!

Subcribe to Farasun feedمشترک فراسان شويد

پ.ن : ایده این مطلب از مطلب آقای آواژ با عنوان «تفکیک مسائل شخصی از محیط کار» به ذهنم خطور کرد.

باگ

یک باگ نرم افزاری اصطلاحی است برای توصیف یک خطا، عیب، اشتباه، خرابی یا نقص در یک برنامه کامپیوتری که باعث ایجاد نتایج غیر منتظره یا نا درست در برنامه ها می شود. علت بسیاری از باگ ها در نرم افزارها، اشتباهات برنامه نویسان در هنگام نوشتن سورس کد نرم افزارهاست. در یک برنامه بزرگ، اشتباه در فاز طراحی نیز می تواند باعث ایجاد باگ های جبران ناپذیر شود.
باگ هایی که باعث ایجاد نتایج اشتباه در خروجی نرم افزار می شوند، از بدترین نوع باگ ها هستند. نرم افزاری که خروجی اشتباه تولید کند به درد کاربر نمی خورد و کسی از آن استفاده نخواهد کرد. برخی باگ ها بر روی کاکرد برنامه تاثیر می گذارند و ممکن است باعث کرش کردن برنامه شوند. بعضی از باگ ها، اشکالات امنیتی هستند و ممکن است باعث دسترسی افراد غیر مجاز به اطلاعات حساس سیستم شوند. در این میان باگ هایی نیز وجود دارند که تا مدت ها مخفی می مانند و بر روی کارکرد برنامه تاثیرات منفی می گذارند.

باگ
وجود داشتن باگ در نرم افزارها کاملاً طبیعی است. از آن جا که هیچ کدام از ساخته های بشر کامل و بی نقص نیستند، نرم افزار نیز از این قاعده خارج نیست. یک باگ می تواند هنگام شناسایی نیازمندی های سیستم نرم افزاری توسط یک تیم نرم افزاری ایجاد شود. اگر نیازمندی های یک سیستم به درستی تشخیص داده نشوند، طراحی نرم افزار اشکال خواهد داشت، و در نتیجه کدنویسی ما نقص خواهد داشت. به جز برنامه نویسان و طراحان سیستم، کاربران سیستم نیز می توانند با ورود داده های اشتباه به سیستم باعث ایجاد باگ در سیستم نرم افزاری شوند. اینجاست که اعتبار سنجی داده های ورودی کاربر اهمیت زیادی پیدا می کند.

برای جلوگیری از ایجاد باگ در سیستم های نرم افزاری در فازهای مختلف ایجاد سیستم از روش های استانداردی استفاده می کنند. با استفاده از روش های استاندارد و معروف مهندسی نرم افزار و جمع آوری درست نیازهای سیستم، تحلیل و طراحی بر اساس آن می توان باگ های احتمالی را به حداقل رساند. در هنگام برنامه نویسی بسیاری از خطاها هنگام کامپایل کردن برنامه رفع می شوند. اکثر باگ های مربوط به برنامه نویسی، خطاهای منطقی هستند که کامپایلرها توانایی تشخیص آن ها را ندارند. امروزه پلت فرم ها و زبان های برنامه نویسی پرکاربرد امکانات خوبی برای شناسایی و هندل کردن خطاهای برنامه نویسی به ما ارائه می کنند. بلاک های کنترل خطا و استثناها، ابزارهای خطایابی، کنترل نوع داده ها و شناسایی خطاهای زمان اجرا در یک زبان برنامه نویسی باعث ایجاد کمترین باگ در یک نرم افزار می شوند.

برای شناسایی باگ ها معمولاً قبل از ارائه نسخه عمومی یک نرم افزار، نسخه های آلفا و بتا را منتشر می کنند. این نسخه های آزمایشی در اکثر اوقات راه خوبی برای پیدا کردن باگ های جدید در یک نرم افزار است. کاربران از نسخه های آزمایشی استفاده می کنند و اشکالات برنامه را گزارش می کنند. معمولاً تیم های نرم افزاری برای این کار از نرم افزار های مدیریت باگ یا Bug Tracking و Issue Tracking استفاده می کنند تا عملیات ثبت باگ های جدید، بحث در مورد آن ها و رفع آن ها را مدیریت کنند. از این نرم افزارها می توان به Bugzilla، BugTracker.NET، JIRA و OTRS اشاره کرد.

دیباگ کردن یک روش مرسوم و پرکاربرد برای یافتن باگ ها و از بین بردن آن هاست. دیباگ به پروسه خطایابی در یک نرم افزار گفته می شود که قسمت عمده ای از زمان تست نرم افزار را به خود اختصاص می دهد. در اکثر مواقع برنامه نویسان بیشتر زمان خود را در حال دیباگ کردن کد خود هستند تا اینکه کد جدید بنویسند! ابزارهای دیباگر در محیط های توسعه با امکان اجرای خط به خط کد، مشاهده مقادیر متغیرها در زمان اجرا و مطالعه رفتار برنامه به برنامه نویسان برای پیدا کردن باگ ها و درست کردن آن ها کمک زیادی می کنند. حتی با وجود ابزارهای دبیاگر خوب، پیدا کردن بعضی باگ ها کار واقعاً سختی است. ممکن است پس از انتشار نسخه عمومی برنامه باگ های جدیدی توسط کاربران پیدا شوند، که در این مواقع برنامه نویسان با انتشار یک Patch سعی می کنند باگ های شناسایی شده را اصلاح کنند.

farasun.wordpress.com

اگر تمايل به دنبال کردن مطالب اين وبلاگ داريد، مي توانيد مشترک فيد فراسان شويد.

پ.ن : وردپرس.کام امکان لایک را به وبلاگ ها اضافه کرد!

نیازهای من به عنوان یک نیروی انسانی – بازی وبلاگی

کمبود نیروی انسانی با سواد و به روز در صنعت نرم افزار کشور چیزی نیست که بر کسی پوشیده باشد. اکثر شرکت های نرم افزاری از وضعیت نیروی انسانی گله مندند و سعی می کنند به هر طریقی نیروهای ارزشمند خود را نگه دارند. آن طرف قضیه هم این نیروهای انسانی هستند که از وضعیت شرکت ها گله دارند. پیدا کردن یک شرکت نرم افزاری درست حسابی هم این روزها سخت شده است. اگر شرکت های نرم افزاری ایران حرفه ای شروع به کار می کردند، حرفه ای ادامه می دادند، حرفه ای استخدام می کردند و با نیروی انسانی حرفه ای تعامل داشتند که وضعیت صنعت نرم افزار در ایران این نبود!

افشار محبی در یک مطلب انتظارات خودش را به عنوان یک نیروی انسانی برنامه نویس مشخص کرده و از چند وبلاگ نویس خواسته تا در این مورد بنویسند. هدف از این کار این است که نظرات مختلف برنامه نویسان به عنوان نیروهای انسانی شرکت های نرم افزاری بیان شود، شاید بهبودی در زمینه نیروی انسانی صنعت نرم افزار کشور حاصل شود. من پیشنهاد میکنم طرف دیگر قضیه یعنی کارفرماها و مدیران شرکت های نرم افزاری نیز خواسته های خودشان را از نیروهای انسانی مطرح کنند. همان کاری که آقای آواژ در وبلاگ خودشان انجام داده اند +

نیازهای من به عنوان یک برنامه نویس :

1) انتظارات از من شفاف باشد. من می خواهم بدانم کارفرما دقیقاً انتظار انجام چه کاری را از من دارد. اگر من به عنوان «برنامه نویس» استخدام شدم، نباید کاری جز کدنویسی داشته باشم. اگر قرار است تیمی کار شود، هر کس باید وظایف خودش را انجام بدهد. نه اینکه اکثر کارها را یک نفر انجام بدهد و در آخر کار به اسم تیم تمام شود!

2) اعتماد و صداقت متقابل. همانطور که من به کارفرما اعتماد میکنم و وقت و انرژی خودم را در شرکت او میگذرانم، دوست دارم کارفرما هم به من اعتماد داشته باشد. اگر من در کارم صادق باشم و از هیچ تلاشی برای پیشرفت شرکت دریغ نکنم، میخواهم کارفرما هم قدر این صداقت را بداند و با من رو راست باشد.

3) در بدو ورود به شرکت کاملاً در مورد خط مشی شرکت، پروژه های در دست اجرا، روش های تولید و پشتیبانی محصولات توجیه شوم. من چطور می توانم وارد پروسه توسعه پروژه ای شوم که هیچ مستنداتی ندارد و هیچ ایده ای از آن ندارم. متاسفانه اکثر شرکت ها این مورد مهم را رعایت نمی کنند. باید یک هفته اول برای فرد تازه وارد جلسات توجیحی در مورد تمام زوایای شرکت گذاشته شود، سپس او را با محصولات و روش های تولید و پشتیبانی آشنا کنند. نکته مهمی که باید در اینجا در نظر گرفته شود رفتار دیگر کارکنان با فرد تازه وارد است. باید کارکنان طوری توجیه شوند که به جای پرتاب کردن سنگ جلوی فرد تازه وارد به او کمک کنند تا با شرایط و پروژه های شرکت هر چه زودتر آشنایی پیدا کند.

4) بتوانم محیط کارم را سفارشی کنم. من برای برنامه نویسی نیاز به یک محیط آرام و دور از استرس دارم. اتاقی که در آن بازاریاب شرکت در حال زدن مخ مشتری است و منشی در حال چانه زدن، جای مناسبی برای من برنامه نویس نیست! من نیاز به میز و صندلی و مانیتور استاندارد و یک کامیپوتر مناسب دارم. من باید بتوانم در محیط کارم بر اساس سلیقه ام تغییر ایجاد کنم. قبلاً یک مطلب کامل در این مورد نوشتم که می توانید اینجا مطالعه کنید.

5) کارفرما برای وقت من ارزش قائل باشد. زمان روزانه کار کردن در شرکت باید مشخص باشد. منظورم ساعت شروع و پایان کار نیست. من باید بدانم قرار است دقیقاً روزی چند ساعت برای کارفرما کار کنم. اگر بیشتر از وقت مشخص کاری انجام داده شود باید اضافه کاری محسوب شود. این در اکثر شغل ها بدیهی است، اما اکثراً در شرکت های نرم افزاری رعایت نمی شود.

5+1) کارفرما به آموزش مداوم کارکنان و استفادده از تکنولوژی های جدید علاقه مند باشد. دنیای نرم افزار و برنامه نویسی هر روز تغییر می کند و افرادی که می خواهند در این زمینه کار کنند باید همیشه در حال یادگیری باشند و دانش خود را به روز کنند. من برای بالا بردن دانش و مهارتم نیاز به یادگیری و آموزش مداوم دارم. شرایط یک آموزش منظم را باید کارفرما برای کارکنانش فراهم کند. این موضوع همانقدر که برای کارکنان مطلوب است، برای کارفرما نیز سود زیادی دارد. بعضی از شرکت ها از بکارگیری تکنولوژی های جدید هراس دارند. من نمیخواهم برای شرکتی کار کنم که از تکنولوژی های 5 سال پیش برای توسعه محصولاتش استفاده می کند.

farasun.wordpress.com

در آخر از تمام برنامه نویسانی که وبلاگ دارند و به این موضوع علاقه مند هستند دعوت میکنم تا نیازهای خودشان را به عنوان یک نیروی انسانی در قالب بازی وبلاگی بیان کنند.

پ.ن : بازی های وبلاگی در وبلاگ های تخصصی کمتر مورد توجه قرار میگیره، در صورتی که نتایج بسیار خوبی داره. از آقای محبی بخاطر ایده خوبشان ممنونم و امیدوارم از این دست مطالب در وبلاگ های تخصصی بیشتر ببینیم.

حداقل مهارت های یک برنامه نویس دات نت!

لوگوی دات نتاین روزها آیکون ویژوال استادیو را در دسکتاپ خیلی ها می توان دید. اولین فکری که بعد از دیدن این آیکون در دسکتاپ طرف به فکر شما می رسد این است که او به احتمال زیاد برنامه نویس دات نت است. اما باید بدانید که برنامه نویس دات نت بودن فقط داشتن آیکون ویژوال استادیو بر روی دسکتاپ نیست. من یک نفر را می شناسم که ویژوال استادیو را فقط به اسم «سی شارپ» می شناسد و اصلاً نمی داند دات نت فریم ورک چیست و در حال حاضر هم برنامه های بانک اطلاعاتی می نویسد! برای اینکه یک نفر خود را برنامه نویس دات نت بداند، باید حداقل اطلاعاتی در مورد دات نت فریم ورک، کلاس های پایه آن، ابزارهای توسعه آن و زبان های برنامه نویسی آن بداند. هر کسی که در زمینه دات نت برنامه نویسی می کند و خود را توسعه دهنده دات نت می داند، باید حداقل مهارت های زیر را داشته باشد :

1 : دید شیء گرا داشته باشد و با قوانین Objected Oriented Programming به خوبی آشنا باشد. دات نت به صورت پیش فرض برنامه نویس را درگیر مباحث شیء گرایی می کند. به همین دلیل اگر کسی با شیء گرایی آشنایی نداشته باشد نمی تواند برنامه های خوبی بنویسد یا در دات نت پیشرفت کند. یک برنامه نویس دات نت باید بتواند برنامه خود را توسط کلاس ها و با استفاده از مفاهیم کپسوله سازی، ارث بری، چندریختی و اینترفیس ها بنویسد تا توسعه و تغییر آن در دراز مدت ساده و کم هزینه باشد. بر همین اساس او باید :

  • با namespace و scope کلاس ها آشنایی داشته باشد
  • تفاوت یک کلاس Partial و یک کلاس معمولی را بداند
  • مفهوم کلاس های abstract را درک کند و توانایی نوشتن interface را داشته باشد
  • بتواند با استفاده از کلمات کلیدی private، public، protected، internal و internal protected دسترسی به کلاس ها را کنترل کند
  • فرق کلاس و متد استاتیک و غیر استاتیک را بداند
  • با مفاهیم overload و override در تعریف متدها آشنایی داشته باشد

2 : با ویژگی های یکی از زبان های برنامه نویسی دات نت به خوبی آشنا باشد. دانستن ویژگی های یک زبان برنامه نویسی هم در تسریع کدنویسی و هم در استاندارد کد نوشتن به یک برنامه نویس کمک زیادی می کند. بر همین اساس او باید :

  • با تمام data typeهای یک زبان آشنا باشد و به موقع از آن ها استفاده کند
  • بتواند مفاهیم شیء گرایی را با استفاده از ویژگی های زبان پیاده سازی کند
  • با مفاهیم Boxing و Unboxing و Type Casting آشنا باشد
  • با روش های مستند سازی کد در آن زبان آشنا باشد

3معماری دات نت فریم ورک : با معماری دات نت فریم ورک آشنایی داشته باشد. یک برنامه نویس دات نت هر چقدر هم که خوب کد بنویسد، اگر نداند برنامه اش چطور و توسط چه عامل هایی اجرا و کنترل می شود یک جای کارش می لنگد! باید بداند دات نت فریم ورک شامل یک کتابخانه کلاس های پایه است که خود آن شامل رابط کاربری، کلاس های دسترسی به داده و اتصال به دیتابیس، الگوریتم های کدگذاری، ارتباطات شبکه و وب اپلیکیشن است که استفاده به جا از این کلاس ها، سرعت توسعه یک پروژه را افزایش می دهند. باید بداند برنامه های نوشته شده با دات نت در یک محیط زمان اجرا به نام CLR یا Common Language Runtime اجرا و مدیرت می شوند. باید بداند CLR وظیفه مدیریت حافظه و هندل کردن استثنا ها را نیز بر عهده دارد. بر همین اساس او باید :

  • مفهوم اسمبلی (Assembly) در دات نت را بداند
  • با ساختار فایل های اجرایی دات نت آشنا باشد
  • با کلاس های پایه دات نت آشنایی لازم را داشته باشد
  • با Garbage Collector و نحوه مدیریت حافظه در دات نت آشنا باشد
  • با قابلیت Reflection در دات نت آشنایی داشته باشد
  • بداند GAC چیست و چه کاری انجام می دهد

4 : با ویژگی های محیط توسعه آشنایی لازم را داشته باشد. محیط توسعه برای توسعه دهندگان دات نت به صورت معمول، ویژوال استادیو است. یک برنامه نویس دات نت باید بتواند از ابزارهای موجود در ویژوال استادیو برای بهبود و سرعت بخشیدن به روند توسعه برنامه استفاده کند. بر همین اساس او باید :

  • با پنجره های مختلف ویژوال استادیو و مفاهیم آن ها آشنایی کامل داشته باشد
  • بتواند یک پروژه موجود را کامپایل و اجرا کند
  • بتواند فایل های جدیدی را به پروژه اضافه کند
  • بتواند از Toolbox ویژوال استادیو کنترل های مورد نیاز خود را پیدا کند و کنترل های جدیدی را به آن اضافه کند
  • بتواند با ادیتور کد ویژوال استادیو کار کند و کدهای مورد نظر خود را پیدا کند
  • بتواند یک برنامه را با استفاده از ابزارهای ویژوال استادیو Debug کند (منوی Debug)
  • تفاوت میان اجرا در حالت Debug و اجرا در حالت Release را بداند
  • تفاوت ساختار پروژه های Windows Application، Console Application، Class Library، ASP.NET Web Application و ASP.NET Web Service Application را بداند
  • تفاوت Solution و Project را بداند و بتواند چند پروژه را در یک Solution مدیرت کند

توسعه دهندگان برنامه های مبتنی بر دیتابیس باید :

  • بر روی مفاهیم و نحوه پیاده سازی دیتابیس و رابطه های میان جدول های اطلاعاتی و زبان SQL تسلط داشته باشد
  • با معماری ADO.NET و کلاس های پایه آن آشنا باشد
  • بداند ORM چیست و چه مشکلاتی را حل می کند
  • حداقل با یکی از ORMهای دات نت مثل LINQ to SQL، NHibernate یا Entity Framework آشنا باشد
  • با DataSet و نحوه استفاده ازکنترل های مربوط به دیتابیس مثل DataGrid آشنا باشد
  • با ساختار فایل های XML آشنایی داشته باشد و بتواند یک فایل XML را پردازش کند

توسعه دهندگان برنامه های مبتنی بر وب (ASP.NET) باید :

  • تفاوت های عمومی یک برنامه دسکتاپ و یک برنامه تحت وب را بداند
  • بداند PostBack چیست و چه کاربردهایی دارد
  • بداند متدهای استاندارد POST و GET در ASP.NET چگونه پیاده سازی شده اند
  • با ViewState آشنایی داشته باشد، وظیفه آن را بداند و بداند چه مواقعی کاربرد دارند
  • با ساختار فایل web.config آشنایی لازم را داشته باشد
  • تفاوت میان کنترل های تحت سرور و کنترل های HTML و تحت کلاینت را بداند
  • با زبان جاوا اسکریپت آشنایی لازم را داشته باشد
  • Lifetime یک برنامه ASP.NET را درک کند
  • با کوکی ها آشنا باشد و بتواند از آن ها استفاده کند
  • بتواند با استفاده از Session یک سیستم لاگین طراحی کند
  • بتواند تفاوت یک وب سرویس و یک وب اپلیکیشن را توضیح دهد

farasun.wordpress.com

این مطلب فقط نظر من در مورد حداقل دانسته های یک برنامه نویس دات نت است. شما ممکن است نظر دیگری داشته باشید و یا بخواهید آیتم هایی را به این لیست اضافه کنید. خوشحال می شوم نظر شما را هم بدانم. من تمام سعی خودم رو کردم تا مطلبم با مطلب Scott Hanselman فرق کند، این مطلب را من از نظر خودم نوشتم و هدفم با هدف آقای Hanselman کاملاً متفاوت است.

استفاده از MySQL در دات نت فریم ورک

بانک اطلاعاتی اوپن سورس MySql را می توان یکی از محبوب ترین و پر استفاده ترین نرم افزارهای بانک اطلاعاتی مورد استفاده در وب دانست. به علت سادگی، قدرت و هزینه پایین این بانک اطلاعاتی، سر و کله اش را می توانید در تمام پکیج های هاستینگ پیدا کنید. خیلی وقت ها ممکن است در یک پکیج هاستینگ ویندوزی نتوانید از SQL Server به عنوان دیتابیس استفاده کنید، یا محدودیت هایی برای آن وجود داشته باشد، اما همیشه و به راحتی می توانید از دیتابیس های MySql استفاده کنید. استفاده از بانک اطلاعاتی MySql در کنار ASP.NET می تواند هزینه و زمان توسعه شما را کاهش بدهد و به نظر من دردسرهای شما را کمتر کند!

دات نت فریم ورک به صورت توکار از MySql پشتیبانی نمی کند و فراهم کننده پیش فرضی  برای کار با آن ارائه نمی کند. شما باید برای استفاده از MySql در دات نت از کتابخانه ای که خود MySql در اختیار برنامه نویسان قرار داده استفاده کنید. استفاده از MySql به لطف این کتابخانه دقیقاً مشابه استفاده از SQL Server یا Access است. ابتدا از اینجا کانکتور MySQL برای دات نت فریم ورک را دریافت کنید. متاسفانه اگر ایران هستید نمی توانید از وب سایت رسمی MySQL فایلی دریافت کنید! دوستان داخل ایران از این لینک برای دریافت این کتابخانه استفاده کنند.

این فراهم کننده از معماری ADO.NET پیروی می کند و به همین علت اگر قبلاً با کامپوننت های ADO.NET مثلاً برای برقراری ارتباط با یک دیتابیس SQL Server استفاده کرده باشید، در اینجا مشکلی نخواهید داشت. به عنوان یک مثال ساده قصد داریم جدول tblUsers را بر روی دیتابیسی به نام Sample بسازیم. ابتدا یک پروژه تحت وب (یا تحت ویندوز، فرقی نمی کند) بسازید و فایلی را که دانلود کردید را به ارجاع های پروژه خود اضافه کنید (با کلیک راست روی نام پروژه در Solution Explorer ، انتخاب Add Reference و انتخاب فایل MySql.dll)  سپس فضای نام MySql.Data.MySqlClient را using کنید و سپس کدهای زیر را در جای مناسب قرار دهید.

string ConnectionString = "server=localhost; userid=root;password=;pooling=yes;Database=Sample;charset=utf8";
using (MySqlConnection connection = new MySqlConnection(ConnectionString))
{
connection.Open();
using (MySqlCommand command = new MySqlCommand())
{
command.Connection = connection;
command.CommandText = "CREATE TABLE tblUsers (Uid INT AUTO_INCREMENT, Uname VARCHAR(100) NOT NULL, " +
"Pwd VARCHAR(100) NOT NULL, PRIMARY KEY(Uid)) CHARACTER SET utf8 COLLATE utf8_persian_ci;";
command.ExecuteNonQuery();
}
}

همانطور که در این مثال مشاهده می کنید در کانکشن استرینگ MySql فوق نام سرور، نام کاربری، رمز عبور و نام دیتابیس تعیین شده اند که شما باید به جای آن ها اطلاعات مربوط به خود را قرار دهید. برای اجرای یک دستور SQL بر روی سرور MySql شما نیاز به یک آبجکت MySqlConnection دارید که با تعیین یک رشته اتصال و فراخوانی متد Open به دیتابیس Sample موجود بر روی localhost وصل می شود. سپس با ایجاد یک آبجکت MySqlCommand و تعیین دستور SQL ساخت جدول tblUsers و اجرای متد ExecuteNonQuery به مقصود خود می رسید.

حالا می خواهیم روالی بنویسم تا عملیات ثبت نام کاربران در سایت را انجام دهد. این روال با گرفتن نام کاربری و رمز عبور اقدام به ایجاد رکورد کاربر در جدول tblUsers می کند.

public void InsertUser(string Username, string Password)
{
using (MySqlConnection connection = new MySqlConnection(ConnectionString))
{
connection.Open();
using (MySqlCommand command = new MySqlCommand())
{
command.Connection = connection;
command.CommandText = "INSERT INTO tblUsers (Uname, Pwd) VALUES (?Uname, ?Pwd)";
command.Parameters.AddWithValue("?Uname", Username);
command.Parameters.AddWithValue("?Pwd", Password);
command.ExecuteNonQuery();
}
}
}

همانطور که مشاهده می کنید اگر کار با کلاس های استاندارد ADO.NET مثل SqlCommand را بلد باشید در استفاده از MySQL هیچ مشکلی نخواهید داشت. تنها فرق MySQL با SQL Server در اینجا این است که برای مشخص کردن پارامترها به جای علامت @ باید از علامت ? استفاده کنید. من کد درج رکورد به یک دیتابیس MySql را نوشتم، شما کدهای Update و Delete را بنویسید!

این کتابخانه شامل کلاس های MySqlDataReader و MySqlDataAdapter نیز هست که شما می توانید از آن ها مثل دیگر کلاس های پیش فرض ADO.NET استفاده کنید و اعمال Data Binding و نمایش اطلاعات در یک GridView را به راحتی و با روش های آشنا انجام دهید. به طور مثال برای نشان دادن محتویات جدول tblUsers در یک GridView می توانید از کدی شبیه به کد زیر کمک بگیرید :

DataSet ds = new DataSet();
MySqlDataAdapter dataAdapter = new MySqlDataAdapter("SELECT * FROM tblUsers", connection);
dataAdapter.Fill(ds);
GridView1.DataSource = ds;

همانطور که مشاهده می کنید استفاده از دیتابیس های MySql به لطف معماری ADO.NET هیچ فرقی با دیگر دیتابیس های پشتیبانی شده توسط دات نت ندارد.

farasun.wordpress.com

پ.ن 1 : علت تاخیر زیاد در انتشار مطلب جدید فیلتر شدن کل وردپرس.کام و امتحانات دانشگاه بود. تنبلی را نیز به این دلایل اضافه کنید!

پ.ن 2 : سایت ها یا وبلاگ های دیگری که به نام «فراسان» فعالیت می کنند به بنده و این وبلاگ هیچ ارتباطی ندارند! من سه سال پیش این نام را کاملاً از ذهنم بیرون کشیدم و از هیچ جایی کپی نکردم! فقط این وبلاگ و این سایت با نام «فراسان»  به من مربوط هستند.

یک محیط سفارشی شده; تمام چیزی که یک برنامه نویس می خواهد!

داشتن تمرکز برای افرادی که به اصطلاح Knowledge Worker هستند، مثل نویسندگان یا برنامه نویسان، بسیار مهم است. این تمرکز در محیط های شلوغ و پر استرس و محیطی که فرد در آن احساس راحتی نکند به دست نمی آید. یک برنامه نویس به عنوان فردی که از دانش و قدرت تفکرش برای انجام کارها استفاده می کند، برای انجام وظیفه خود به نحو مطلوب و با بازدهی بالا نیاز به یک محیط سفارشی (=Customize) شده دارد. منظورم از محیط سفارشی شده، محیطی است که فرد برنامه نویس در آن احساس راحتی کند، تمرکز کافی داشته باشد و بتواند در آن بر اساس سلیقه خودش تغییر ایجاد کند.

برنامه نویس در گوگل

برنامه نویسان مستقل از این لحاظ مشکلی ندارند. اتاق کارشان بر اساس سلیقه و شیوه خودشان چیده شده و تایم کاری مشخص به خود را دارند. شاید یکی از بزرگترین مشکلات برنامه نویسان مستقل، نداشتن یک آفیس مستقل از محل زندگی است. به علت اینکه اکثر برنامه نویسان مستقل در خانه کار می کنند، شاید آن تمرکز و بازدهی مطلوب و محیط سفارشی را بدست نیاورند. اتفاقاتی که در محیط خانه اش می افتد، تلفن هایی که به او می شود و حتی وقتی که مادر یا همسرش او را برای نهار یا شام صدا می زند، همه و همه می توانند تمرکز یک برنامه نویس مستقل را برهم بزنند. اما در کل وضعیت یک برنامه نویس مستقل در این مورد از یک برنامه نویس استخدام شده خیلی بهتر است! برنامه نویس مستقل میز کارش را هر طوری که می خواهد می چیند،  تنظیمات کامپیوترش را به دلخواهش عوض می کند، هر نرم افزاری لازم داشته باشد بدون اجازه گرفتن از کسی روی کامپیوترش نصب می کند و مهمتر از هر چیزی، هر ساعتی که بازدهی بیشتری دارد کار می کند.

برنامه نویسانی که برای شرکت ها کار می کنند شرایط متفاوت تری دارند. در اینجا این برنامه نویسان هستند که باید خودشان را با محیط شرکت وقف بدهند. البته این وقف دادن همیشه هم بد نیست. ممکن است برنامه نویس قبلاً از سورس کنترل استفاده نمی کرده و حالا در این شرکت مجبور باشد از این ابزار استفاده کند. این اصلاً بد نیست. اما این شرایط وقتی آزاردهنده می شود که برنامه نویس در محیط کاری شرکت احساس راحتی نکند. مخصوصاً در بدو ورود یک برنامه نویس تازه استخدام شده به یک شرکت، این موضوع خیلی اتفاق می افتد. البته در اکثر موارد این عادی است که حداقل یک هفته زمان لازم است تا فرد تازه وارد خودش را با شرایط جدید، محیط و افراد نا آشنا وقف دهد. نکته ای که وجود دارد این است که یک شرکت موفق باید کاری کند که زمان وقف پیدا کردن یک برنامه نویس تازه وارد (منظور تازه وارد شده به شرکت) با شرایط، محیط، افراد و ابزارهای آن شرکت کاهش یابد. این اول برای خود شرکت سود دارد و بعد برای آن فرد تازه وارد به شرکت! کاهش دادن این زمان هم به نظر من فقط با باز گذاشتن دست برنامه نویس برای سفارشی کردن محیط کارش بدست می آید.

شرکت موزیلا

اجازه دهید برنامه نویس میز کارش را خودش بچیند، کامپیوترش را سفارشی کند، نرم افزارهایی که لازم دارد نصب کند، نرم افزارهایی که نمی خواهد حذف کند و در کل محیط مجازی اش را بر اساس علاقه اش تنظیم کند. اگر کامپیوترش قدیمی است و جوابگوی کار برنامه نویس نیست آن را عوض کنید. حتماً در این مورد نظر او را هم بپرسید. میز، صندلی و مانیتور استاندارد تهیه کنید تا سلامت برنامه نویس به خطر نیفتد. در صورت امکان سعی کنید اتاق برنامه نویسان را از هم جدا کنید یا حداقل با پارتیشن بین آن ها فاصله بگذارید. این کار باعث می شود که تمرکز یک برنامه نویس روی کدهایی که می نویسد بیشتر شود. ممکن است در یک اتاق باز، پرسیدن سئوال یا درخواست کمک یک همکار تمام تمرکز برنامه نویس را به هم بزند که بدست آوردن همان تمرکز برای برنامه نویس زمان زیادی خواهد گرفت. حداقل کاری که می توانید بکنید این است که قانونی بگذارید که هنگام کدنویسی کسی صحبت نکند!

هرچند محیط پر استرس روی کیفیت کار هر کسی تاثیر منفی دارد اما این تاثیر در کار برنامه نویسان بسیار بیشتر است. سعی کنید محیطی دوستانه، مفرح و با امکانات مناسب در اختیار برنامه نویسان قرار دهید. به طور مثال یک وایت برد در بخش برنامه نویسی نصب کنید. نکته مهم دیگر مربوط به تغذیه مناسب برنامه نویسان است. صبحانه و نهار مناسب و در دسترس بودن نوشیدنی های مختلف مثل چای و قهوه بسیار مهم است. یک برنامه نویس گرسنه نمی تواند به درستی تمرکز کند. یک برنامه نویس بدون نوشیدن نمی تواند حتی یک خط کد بنویسد!

برنامه نویسان مایکروسافت

قرار نیست مطلب خیلی طولانی شود. هدف این مطلب لوس کردن برنامه نویسان نیست. شما باید در کنار انجام دادن کارها از برنامه نویسان انتظار کار کردن با بازدهی بالا داشته باشید. به طور مثال از برنامه نویسان بخواهید در هنگام کار، موبایل خودشان را خاموش کنند. شرکت های نرم افزاری موفقی مثل مایکروسافت، گوگل، فیس بوک، توییتر و موزیلا محیط های لذت بخشی را برای برنامه نویسان خود آماده کرده اند و به آن ها اجازه می دهند در محیط های سفارشی شده کار کنند. فکر میکنم یکی از دلایل موفقیت آن ها همین باشد! در آخر به یاد داشته باشید که منفعت انجام دادن تمام این کارها در آخر به جیب شما مدیران شرکت ها سرازیر خواهد شد!

شرکت گوگل

پ.ن : برای نمونه شما یکی از کارکنان توییتر را فالو کنید، متوجه می شوید که این ها یا در حال آبجو خوردن هستن و یا در حال پارتی گرفتن! من نمیدونم اینا کی کار میکنن!

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

راه های دسترسی به داده در دات نت فریم ورک!

در اکثر برنامه های کامپیوتری نیاز به ذخیره و بازیابی داده ها وجود دارد. داده هایی که بدون آن ها سیستم نرم افزاری ما معنایی ندارد. برنامه نویسان معمولاً راه های مختلفی برای این کار سراغ دارند. کسانی که با دات نت فریم ورک برنامه نویسی می کنند راه های مختلفی برای دسترسی به داده ها دارند. در این مطلب با تکنولوژی های مایکروسافت برای این کار آشنا خواهیم شد و سه ORM معروف دنیای دات نت را معرفی خواهیم کرد. مایکروسافت انتخاب های زیادی برای دسترسی به داده ها به برنامه نویسان دات نت می دهد که شما باید با بررسی آن ها و با توجه به نیازهای خودتان یکی از آن ها را انتخاب کنید.

ADO.NET

ADO.NET مجموعه ای از کامپوننت هاست که برنامه نویسان می توانند از آن ها برای برقراری ارتباط با دیتابیس های مختلف استفاده کنند. ADO.NET بخشی از کتابخانه کلاس های پایه دات نت فریم ورک است که توسط مایکروسافت توسعه داده می شود. برنامه نویسان به صورت گسترده از این تکنولوژی برای دسترسی و دستکاری داده های ذخیره شده در یک دیتابیس رابطه ای استفاده می کنند. ADO.NET می تواند با اکثر دیتابیس های موجود کار کند، هر چند به صورت پیش فرض در دات نت فریم ورک فقط فراهم کننده های SQL Server، OleDb و Odbc وجود دارد، افراد و شرکت های دیگر فراهم کننده های دیتابیس های دیگر را برای دات نت ایجاد کرده اند.

برای هر Provider کامپوننت هایی وجود دارند که برنامه نویس با استفاده از آن ها به مقصودش می رسد. به طور مثال برای استفاده از SQL Server در روش ADO.NET کامپوننت هایی مانند SQLConnection و SQLCommand وجود دارد که با استفاده از آن ها می توانید یک دستور SQL را روی داده های موجود در یک دیتابیس SQL Server اجرا کنید. با SQLConnection به دیتابیس موجود در SQL Server وصل می شویم و با استفاده از یک SQLCommand می توانیم یک عبارت T-SQL را که می تواند دستور INSERT, UPDATE, DELETE یا SELECT باشد یا حتی یک Stored Procedure یا عبارت DDL باشد را برای مقصود خاصی روی دیتابیس اجرا کنیم. چون ADO.NET در مورد سینتاکس دیتابیس چیزی نمی داند، دستورات را به صورت یک رشته ساده به SQLCommand می دهیم و این شیء نیز به صورت مستقیم به دیتابیس دستور می دهد.

string query = "SELECT * FROM tblCustomers";
SqlConnection con = new SqlConnection(cnnString);
SqlCommand command = new SqlCommand(query, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetInt32(0) +
reader.GetString(1));
}

نکته ای که باید در مورد ADO.NET بدانید این است که برای استفاده از هر سیستم دیتابیس رابطه ای، مجموعه کامپوننت های جدایی وجود دارد. در مثال بالا از آبجکت های مربوط به SQL Server استفاده کردیم. اگر بخواهید مثلاً از یک دیتابیس اوراکل در برنامه خود استفاده کنید، بایستی از کامپوننت های مربوط به اوراکل استفاده کنید. خوشبختانه تمام این کامپوننت ها بر پایه یک Interface ساخته شده اند، این یعنی شما می توانید با استفاده از کلاس DbProviderFactory برنامه ای بسیازید که با چند نوع دیتابیس مختلف کار کند.

Linq to SQL

مایکروسافت با دات نت فریم ورک 3.0 و 3.5 یک ORM به نام Linq to SQL را به عنوان بخشی از پروژه LINQ خود عرضه کرد. این شرکت مدت ها پیش از آن قول داده بود که یک ORM برای دات نت فریم ورک طراحی کند اما تا نسخه 3.0 دات نت فریم ورک خبری از آن پروژه نشد. Linq to SQL به شما اجازه می دهد که کوئری های LINQ را روی دیتابیس های SQL Server اجرا کنید. علاوه بر این از یک Mapping Framework بهره می برد که به برنامه نویسان اجازه Map کردن جدول های یک دیتابیس را به کلاس ها و بالعکس می دهد. این کار در ویژوال استادیو می تواند به صورت ویژوال یا کدنویسی انجام گیرد. به این صورت که برای هر جدول از دیتابیس یک کلاس تعریف می شود که هر ستون از یک جدول به عنوان یک Property درون آن کلاس تعریف می شود.

نمایی از ابزار طراحی ویژوال Linq to SQL

به مثال زیر توجه کنید :
public class Customer
{
[Column(Name="CustomerID",IsPrimaryKey = true)]
public long ID
{
get { return _ID;}
set { _ID = value;}
}
[Column(Name = "CustomerName")]
public string Name
{
get { return _name; }
set { _name = value; }
}
}

کلاس بالا به جدول tblCustomers که دارای دو ستون CustomerID و CustomerName است Map می شود. قبل از اینکه بخواهید از Linq to SQL استفاده کنید باید این کلاس ها را تعریف کنید. ویژوال استادیو 2008 دارای ابزاری است که به صورت ویژوال به شما امکان Map کردن جدول های یک دیتابیس SQL Server را به کلاس های دات نت می دهد. این ابزار می تواند به صورت اتوماتیک کلاس های مورد نیاز شما را از روی مدل دیتابیس بسازد، و حتی اجازه تغییرات دستی و ایجاد Viewهای مختلف از دیتابیس را به شما می دهد. عملیات Mapping با استفاده از DataContext (که یک رشته اتصال به سرور نیاز دارد) پیاده سازی می شود. سپس شما قادر خواهید بود کوئری های LINQ خود را روی دیتابیس موجود در سرور اجرا کنید، که البته این کوئری ها ابتدا به دستوارت T-SQL متناظر ترجمه و سپس روی دیتابیس مورد نظر اجرا می شوند.

Entity Framework

Entity Framework یک فریم ورک ORM برای دات نت فریم ورک است که نسخه یک آن به همراه دات نت فریم ورک 3.5 سرویس پک 1 عرضه شد اما مورد استقبال توسعه دهندگان قرار نگرفت. نسخه 2 این فریم ورک به صورت بتا به عنوان بخشی از ویژوال استادیو 2010 قابل دسترس است. ADO.NET Entity Framework نام اصلی این فریم ورک است و جزئی از تکنولوژی ADO.NET است.

ابزار طراحی Entity Framework در ویژوال استادیو

ابزار طراحی Entity Framework در ویژوال استادیو

Entity Framework مدل رابطه ای موجود در یک دیتابیس را به مدل مفهمومی تبدیل می کند و آن را به اپلیکیشن ما تحویل می دهد. در مدل رابطه ای عناصر ترکیبی از جداول هستند، به همراه کلید های اصلی و خارجی که جدول ها را به هم مرتبط می سازند. برعکس آن، انواع موجودیت ها مدل مفهومی داده را تعریف می کنند. انواع موجودیت  اجتماعی از چند فیلد است (هر فیلد به یک ستون از دیتابیس Map می شود) و می تواند شامل اطلاعات از چند جدول فیزیکی باشد. انواع موجودیت می توانند به هم مرتبط باشند، مستقل از ارتباطاتی که در مدل فیزیکی دارند. شمای منطقی و نگاشت (mapping) آن به شمای فیزیکی به عنوان یک Entity Data Model یا EDM نمایش داده می شوند که مشخصات EDM در یک فایل XML ذخیره می شود. Entity Framework از EDM برای انجام عملیات نگاشت و دادن قابلیت کار با موجودیت ها به اپلیکیشن استفاده می کند. Entity Framework اطلاعات مورد نیاز هر موجودیت را با Join کردن چندین جدول از مدل فیزیکی (دیتابیس) بدست می آورد. هنگامی که اطلاعات یک موجودیت آپدیت می شود، Entity Framework بررسی می کند که داده ها مربوط به کدام یک از جدول های موجود در دیتابیس هستند، سپس آن ها را با دستور SQL مناسب آپدیت می کند.

هر چند Entity Framework و Linq to SQL بسیار شبیه به هم به نظر می رسند، هر دو ابزارهایی برای طراحی گرافیکی و ویزاردی برای نگاشت یک دیتابیس به مدل شیء گرا دارند و هر دو می توانند از کوئری های LINQ برای مقصود خاصی استفاده کنند، اما با هم تفاوت هایی هم دارند. بیان تفاوت های این دو در این مطلب جایی ندارد.

NHibernate

نمی توان در مورد ORMها در دات نت صحبت کرد اما نام NHiernate را ذکر نکرد. NH یک فریم ورک ORM اوپن سورس برای دات نت فریم ورک است که از روی پروژه موفق Hibernate جاوا وارد دنیای دات نت شد. توضیحات بیشتر در مورد NHibernate توضیحات اضافی است، زیرا این فریم ورک هم وظیفه ORMهای دیگر را انجام می دهد. اکثر برنامه نویسانی که از NH برای نگاشت استفاده می کنند، ابتدا کلاس های خود را تعریف می کنند و سپس با استفاده از یک فایل XML آن ها را به جدول های دیتابیس Map می کنند. Linq to SQL و Entity Framework برخلاف NHibernate از روش Model-first یا مبتنی در دیتابیس استفاده می کنند، به این معنی که هر دو ORM تصور می کنند شما دیتابیسی در اختیار دارید که می خواهید آن به تعدادی آبجکت Map کنید.

در مورد Nhibernate بیش از این صحبت نمی کنم، آقای وحید نصیری در اینجا به صورت کامل در مورد این ORM محبوب نوشته است.

farasun.wordpress.com

انتخاب از میان روش های بالا به عهده خود شماست. در این مطلب کوتاه نمی توان به بررسی تمام زوایا و تفاوت های میان آن ها پرداخت. در مطالب آینده سعی میکنم در مورد نحوه استفاده از هر کدام یک مثال عملی بزنم (البته به جز NHibernate).