برگزاری دوره جدید ASP .NET MVC و ASP .NET Web API در موسسه آموزشی آرینا

بدون نظر

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

 

دوستانی که تمایل دارند می توانند با شماره های موسسه آموزشی آرینا ۸۸۳۲۲۵۰۴ تماس بگیرند و از موسسه سیلابس دوره، هزینه ها و ساعت برگزاری را مطلع بگیرند.

خوشحال میشم نظراتتون را از طریق ایمیل و همینجا در کامنت ها بگیرم.


مدیر باید در کنار تیمش باشد

بدون نظر

مدیر باید در کنار تیمش باشد

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

برخی از این قواعد مشترک از خصیصه‌های مدیریتی می‌آیند؛ یعنی از ذات و شخصیتی که یک مدیر در کار خود نشان می‌دهد نشات می‌گیرند. اینکه شما چگونه مدیری هستید نقشی تعیین‌کننده و تاثیری حیاتی دارد در اینکه سرنوشت آینده شرکت شما چگونه خواهد بود. ردپای بسیاری از شکست‌ها را می‌توان در ویژگی‌های شخصیتی مدیران ارشد شرکت‌ها و کسب‌وکارها پیدا کرد، خصیصه‌هایی که برخی از آن‌ها را وقتی مرور می‌کنیم آشنا به نظر می‌آیند.

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

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

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

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

پانویس: این یادداشت تو ستون “سنگ آزمایی” هفته نامه آتیه نو تاریخ پانزده شهریور میتونید چاپ شده، نسخه Pdf را می تونین از اینجا دانلود کنید.

دانلود نسخه منتشر شده در هفته نامه آتیه نو – ۱۵ شهریور


جزو آموزشی سی شارپ و برنامه نویسی شی گرا

۴ نظر

چند سال پیش شروع کردم به نوشتن مجموعه مقالاتی که طی آن سی شارپ و برنامه نویسی شی گرا را به زبان خیلی ساده آموزش می دادم. متاسفانه نشد که به جایی که من می خواستم برسه ولی خوب حدود ۱۰۵ صفحه مطالب شد که یه موقعی به نظرم رسید برای اینکه بهتر بشه استفاده کرد خوبه که در قالب یه فایل Pdf هم قابل دانلود باشه. از اونجایی که Domain قبلی را از دست دادم و لینک های مربوط به دانلود این سری آموزشی تو وبلاگ قبلیم دیگه کار نمیکنه، فایل را روی دامین جدید Upload کردم تا دوستانی که درخواست کرده بودند بتون به سادگی دانلود کنند.

این لینک جدید جزو آموزش سی شارپ و برنامه نویسی شی گرا است، اگر دوست داشتید دانلود کنید و نظراتتون را هم به من بگید.


سوال احمقانه شماره ده – فرق Session با Cache چیست؟

۵ نظر

امروز جایی بودم و یکی از دوستانم داشت یک مصاحبه فنی برای استخدام نیروی جدید انجام می داد. یکی از سوالاتی که پرسید این بود که از Caching چی میدونید؟ و در وب چطور از Cache استفاده می کنید؟ در پاسخ فردی که قصد استخدام شدن داشت گفت که از Session برای ذخیره سازی اطلاعات استفاده می کنیم و به جای اینکه اطلاعات را دوباره از بانک اطلاعاتی بخوانیم از Session می خوانیم و در نتیجه Performance سایت یا نرم افزار تحت وبمان بهتر می شود.

همانطور که می دونید کلاس Cache در System.Web.Caching برای ذخیره سازی اطلاعات به صورت موقت (معمولا بعد از بازیابی از بانک اطلاعاتی یا هرجایی که بازیابی داده برایمان سرباردارد) استفاده می شود. خیلی از افراد به جای استفاده از این کلاس وقتی بار اول داده خود را بازیابی می کنند آن را در Session نگهداری می کنند تا در دفعات بعد از Session بازیابی کنند و در نتیجه Performance بهتری داشته باشند. اما چند نکته در استفاده از Cache هست که باید در نظر داشت:

  1. وقتی شی را در Cache نگهداریم امکان مشخص کردن زمان ازبین رفتن آن (Expire Date) را داریم. این زمان می تواند یک تاریخ و ساعت مشخص باشد (DateTime.Now.AddSeconds(2d) یا یک مدت زمان از آخرین دسترسی به شی که به صورت اتوماتیک در هر دسترسی دوباره ست می شود (Sliding) مثلا – TimeSpan.FromSeconds(120d)
  2. وقتی شی را در Cache نگهداریم امکان ست کردن اشیا وابسطه (Dependecy) ها را داریم. به این ترتیب که مثلا وقتی فایل Result.txt در مسیر مشخصی تغییر کردن مقدار مورد نظر ما را از Cache پاک کن. Dependency های پیش فرض در دات نت FileDependecy و SqlDependency هستند که البته امکان توسعه اشیا وابسطه توسط شما نیز وجود دارد.
  3. شما می توانید در زمان ست کردن مقادیر خود در Cache به آن ها اولویت دهید. به این ترتیب وقتی دات نت تشخیص داد که حافظه سیستم شما کم آورده است و شروع به پاک کردن اشیا از حافظه Cache نمود اشیا با اولویت کمتر زودتر حذف و در انتها و در صورت لزوم اشیا با اولویت بیشتر حذف خواهند شد.
البته نکات بیشتر در رابطه با Cache وجود دارد که سعی می کنم در پست های بعدی بیشتر توضیح بدم.
راستی شما چه ویژگی های از Cache را میشناسید که در Session نیست؟

 


سوال احمقانه شماره نه – HTTP Method چیست؟

۷ نظر

همانطور که میدانید پروتکل HTTP ارتباط به کلاینت و سرور را امکان پذیر می کند. این پروتکل با استفاده از مکانیزم درخواست-پاسخ (request-response) بین کلاینت و سرور عمل میکند. در واقع در این پروتکل درخواست های مختلفی برای سرور ارسال و سرور در پاسخ به آن درخواست ها عملیاتی را انجام و نتیجه (پاسخ) را ارسال می نماید. یک مرورگر به عنوان کلاینت و یک وب سایت مستقر در یک کامپیوتر به عنوان سرور در نظر بگیرید. من درخواست نمایش یک صفحه با یک آدرس مشخص را به آن وب سایت ارسال و وب سایت موجود بر روی آن کامپیوتر پاسخ که یک صفحه شامل تصاویر، متون و … است را برایم ارسال میکند، بدین ترتیب صفحات وب برای من قابل استفاده خواهند بود.

HTTP Request

هر درخواست می تواند شامل چهار بخش باشد:

  1. Request Line: نوع درخواست و مسیر و پروتکل آن را مشخص می کند
  2. Request Header: این بخش شامل اطلاعات جانبی درخواست می باشد، اطلاعاتی مثل زبان، اطلاعات کاربری، کوکی ها و … (لیست Request Header ها)
  3. یک خطا خالی
  4. Request Body: این بخش بدنه درخواست می باشد که می تواند وجود نداشته باشد (اختیاری است). در برخی از درخواست ها این بخش شامل اطلاعات می باشد (مثلا در درخواست های نوع POST)
به این درخواست توجه کنید که برای باز کردن صفحه اول گوگل ارسال شده است:
GET / HTTP/1.1
Host: google.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

HTTP Response

پاسخ های ارسالی از سوی سرور نیز دارای چهار بخش می باشند:

  1. Status Line: در این بخش پروتکل و یک کد (که مشخص کننده نتیجه بررسی درخواست کلاینت از سوی سرور است) وجود دارد.
  2. Response Headers: این بخش شامل اطلاعات اضافی (Metadata) راجع به پاسخ ارسال از سوی سرور می باشد. مثلا سرور اعلام می کند که پاسخ ارسال از نوع text/html است یا اینکه مکانیزم Caching این پاسخ به چه صورتی است (لیست Response Header ها)
  3. یک خط خالی
  4. Response Body: که بخش انتخابی (Optional) پاسخ است. این بخش محتویات اصلی پاسخ را ارائه می دهد. (مثلا کد HTML صفحه درخواستی یا محتویات باینری تصویر درخواست)
یک نمونه از پاسخ سرور را می توانید اینجا ببینید:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Etag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Connection: close

<html>
<head>
  <title>An Example Page</title>
</head>
<body>
  Hello World, this is a very simple HTML document.
</body>
</html>

HTTP Methods

در ساختار HTTP متدهای مختلفی برای مشخص کردن نوع درخواست های وجود دارد. متد های GET, POST, Head, PUT, DELETE معروف ترین و پر استفاده ترین این متدها هستند. اما هریک از این متدها به چه دلیلی ایجاد شدن و هرکدام در چه مواقعی استفاده می شوند؟

GET

متد GET معمولا برای درخواست یک صفحه یا اطلاعات می باشد. با ارسال این نوع درخواست شما صرفا درخواست خواندن و دریافت اطلاعات را دارید و معمولا این درخواست نباید تاثیر دیگری در منبع درخواست شده بگذارد.

HEAD

متد HEAD شبیه درخواست GET برای دریافت اطلاعات یک صفحه یا Resource می باشد. تفاوت بین درخواست GET و Head در این است که در این نوع درخواست شما محتویات صفحه یا Resource را دریافت نمی کنید بلکه صرفا اطلاعات جانبی (Metadata) آن را در قابل Response Header ها دریافت می کنید.

POST

این نوع درخواست در واقع برای ارسال اطلاعاتی (مثلا فرم پرشده توسط کاربر یا اطلاعات ارسال شده توسط یک درخواست AJAX) به سرور به منظور دریافت اطلاعات و ذخیره سازی آن توسط سرور می باشد. معمولا این نوع درخواست برای تکمیل فرم های ورود اطلاعات و یا آپلود کردن فایل بر روی سرور استفاده می شود.

PUT

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

DELETE

همانطور که از اسم این متد مشخص است برای درخواست حذف یک منبع (Resource) استفاده می شود.

 


دوره آموزشی MongoDb برای برنامه نویسان

بدون نظر

حتما راجع به بانک های اطلاعاتی NoSQL شنیدید. MongoDb یه محصول Open Source است و البته یکی از معروف ترین و محبوب ترین بانک های اطلاعاتی NoSQL هست که این روزها برای بسیاری از برنامه نویسان انتخاب خوبی است.

10Gen

شرکت ۱۰Gen که پشتیبانی کننده این بانک اطلاعاتی است که طی یک سری دوره آموزشی آنلاین مفاهیم NoSQL و استفاده از این بانک های اطلاعاتی بر مبنای MongoDb را آموزش می دهد. در صورتیکه تمایل دارید با بانک های اطلاعاتی NoSQL بیشتر آشنا بشوید و روش استفاده از یکی از قدرتمندترین ابزارهای NoSQL را بشناسید به وب سایت ۱۰Gen سری بزنید و ثبت نام کنید.

10Gen

دوره MongoDB for Developers امروز شروع میشه. دوره خوبی است که در آن علاوه بر آشنایی با مفاهیم NoSQL شما را برای استفاده از MongoDb در زبان برنامه نویسی Phyton آموزش می دهد. من بعد اتمام یکی از همین دوره ها تصمیم گرفتم بخش مهمی از یکی از پروژه های جاری ام را که حجم اطلاعات بسیاری داشت و Performance برامون خیلی مهم بود روی MongoDb ببرم و الان پس از چند ماه کاملا راضی هستم (پروژه من ASP .NET MVC بود).

پس شما هم فرصت را از دست ندید و از خدمات رایگان آموزشی ۱۰Gen نهایت استفاده را ببرید:

https://education.10gen.com/courses/10gen/M101P/2013_June/about


آراد بهانه شش ماهه من

۲ نظر

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

آراد پسرم

مهمترین اتفاق که خیلی مهم و میمون بود، به دنیا اومدن آراد پسرم بود. من پدر شدم و خانواده کوچک ما یه عضو عزیز جدید داره. همیشه یه جمله از مرحوم استفان کاوی (Stephen Covey) را که توی CD صوتی کارگاه Seven Habit of Highly Effective People صحبت میکنه، تو ذهنم داشتم که در مورد پدر شدن میپرسید:

Did you see the world differently? I mean entirely different?!!

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

آراد پسر من

حالا بعد از شش ماه ، میخوام کم کم دوباره شروع کنم و از دنیای برنامه نویسی، استارت آپ ها و دیدگاه هام بیشتر براتون بنویسم. با نظرات و سوالاتتون همراه من باشید.


اولین دوره ASP .NET MVC 4 در موسسه آرینا پیشرو

۵ نظر

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

همانطور که حتما می دونید تیم ASP .NET در مایکروسافت طی سال های اخیر چرخش بسیار خوبی در جهت دنیای Open Source داشتن به همین دلیل در طول دوره سعی کردم با معرفی ابزارها و تکنولوژی های Open Source ، افراد را بیشتر با این دنیا آشنا کنم. به نظرم این  موضوع باعث شد،  این دوره جذاب تر از سایر دوره ها باشه.

واقعیت این است ASP .NET MVC به عنوان یک روش جدید در ASP .NET به سرعت جایگاه خودش را پیدا کرده و هر روز بیش از پیش در پروژه های گوناگون استفاده می شود و انصافا هم در بسیاری از موارد عملکرد بهتری نسبت به Web Form ها دارد (برای مقایسه ASP .NET Web Form و ASP .NET MVC به این پست مراجعه کنید).

با معرفی سری جدید مدارک مایکروسافت و امتحان ۴۸۶-۷۰ که Developing ASP.NET MVC 4 Web Applications  می باشد، اگر قصد گرفتن مدرک MCSD: Web Applications را دارید، باید حتما با MVC بیشتر سر و کله بزنید و زودتر مسلط بشید.

صحبت هایی که با موسسه آرینا پیشرو شده و قرار شده یک دوره جدید ASP .NET MVC 4 را طی روزهای دوشنبه و چهارشنبه طی ۳۵ ساعت برگزار کنیم. در دوره جدید سعی خواهم کرد علاوه بر پوشش دادن MVC به معرفی دقیقتر ابزار هایی مثل SignalR و Knockout – که در دوره پیش اشاره ای مختصر به آن ها شد – بپردازم.


دریاچه ارومیه برگی از خاطرات کودکی

۲ نظر
دریاچه ارومیه

دریاچه اُرومیه با نام سابق دریاچه رضاییه در شمال غربی ایران و در منطقهٔ آذربایجان واقع شده‌است. این دریاچه طبق آخرین تقسیمات کشوری، بین دو استان آذربایجان شرقی و آذربایجان غربی تقسیم شده‌است. دریاچهٔ ارومیه، بزرگ‌ترین دریاچهٔ داخلی ایران و دومین دریاچهٔ آب‌شور دنیا است. آب این دریاچه بسیار شور بوده و عمدتاً از رودخانه‌های زرینه‌رود، سیمینه‌رود، تلخه رود، گادر، باراندوز، شهرچای، نازلو و زولا تغذیه می‌شود.

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

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

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

چند باری هم به همراه خانواده وقتی می خواستیم به ارومیه بریم، به جای دور زدن دریاچه با ماشین، ماشین را سوار کشتی (کشتی که نه ولی نمی دونم چیه اسم درستش!) می کردیم و حدود یک تا دو ساعتی روی دریاچه ارومیه بودیم تا از تبریز به ارومیه می رسیدیم. تجربه خیلی جالبی بود، یادش بخیر.

دریاچه ارومیه - جزیره مشت عثمان

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

امروز خوندم که سازمان ملل ۱۳۵ میلیون دلار برای احیای دریاچه کمک کرده و اینکه بیش از دو سوم دریاچه خشک شده! واقعا آیا دولت مردان ما هم به فکر هستند؟ آیا حاضرند ۱۳۵ میلیون دلار هم آن ها کمک کنند! امیدوارم که تا دیر نشده فکری کنند.

خاطرات کودکی را دریابید، لطفا…


ASP .NET MVC یا ASP .NET WebForm

۵ نظر
ASP .NET MVC vs ASP .NET WebForms
همواره بحث های بسیاری در بین معماران نرم افزار در رابطه با استفاده از تکنولوژی های مختلف در توسعه نرم افزار داشته و دارد. بحث هایی در استفاده از ORM ها یا Stored Procedures ، مقایسه SOAP با REST و …. با ارائه Microsoft ASP .NET MVC شبه هایی در رابطه با استفاده از ASP .NET Web Form در مقایسه با ASP .NET MVC بوجود آمده است. بسیاری از افراد تصور می کنند که MVC به عنوان جایگزین Web Form ها ارائه شده است. آیا واقعا این چنین است؟
در واقع این طور نیست و MVC به عنوان یک گزینه جدید در اختیار برنامه نویسان وب قرار گرفته است و هیچ یک از این دو دیدگاه جایگزین یکدیگر نخواهند شد. افراد در انتخاب بین این دو می توانند به صورت آزادانه عمل کنند و هریک از این دو روش که با آن راحتر هستند را انتخاب کنند.

مشکلات ASP .NET Web Forms

اما مشکلات ASP .NET Web Form چیست؟ چرا مایکروسافت به ارائه گزینه جدیدی در توسعه نرم افزارهای تحت وب روی آورده است؟ در واقع مایکروسافت با ارائه Web Form ها سعی در تطبیق دادن مدل توسعه سیستم های تحت ویندوز به سیستم های تحت وب را دارد. به همین جهت بسیاری از برنامه نویسان که پیش از این برنامه های تحت ویندوز تولید می کردند (به ویژه برنامه نویسان VB6) به سادگی و بدون نیاز به کسب دانش فنی بالا در خصوص ساختارهای وب و HTTP شروع به توسعه سیستم های تحت وب کردند. برنامه نویسانی که تا قبل از ASP .NET Web Form به استفاده از کنترل ها ، مدیریت رویدادها و ساختار نرم افزارهای تحت ویندوز عادت کرده بودند، حالا برنامه نویس وب بودند و سیستم های تحت وب تولید می کردند.
مایکروسافت برای شبیه سازی توسعه سیستم تحت ویندوز در وب ، وب فرم ها ساختاری برپایه رویدادها (Event-Driven) را معرفی و دو مفهوم View State و Post Back را ارائه کردند. در نتیجه وب فرم ها ساختار طبیعی Stateless وب را شکستند. هر دو ماهیت View State و Post Back باعث به وجود آمدن بسیاری از مشکلات و افزودن پیچیدگی توسعه نرم افزارهایی تحت وب شدند. تولید بسیاری از صفحات وب که دارای صدها کیلوبایت از View State که باعث افت بازدهی و سنگین شدن عملکرد نرم افزارهایی تحت وب شد. برنامه نویسان دیگر کنترلی بر خروجی HTML تولید شده از سوی صفحات نداشتند و عملا کنترل های تحت سرور (Server Controls) به تولید تگ های غیر استاندارد و استفاده از In-line Style ها می پرداختند. همچنین تولید کدهای JavaScript با توجه به ساختار نامگذاری نامناسب Server Control ها بسیار سخت و پیچیده می شد. همچنین به جهت پیچیدگی این ساختار و ترکیب شدن خروجی نمایشی صفحات با پیچیدگی های کد نرم افزار عملا امکان Unit Test غیر ممکن شد.
امروزه با مشخص ترشدن اهمیت Unit Test در توسعه نرم افزار به ویژه با ارائه متدلوژهایی همچون Agile مشکلات بسیار برای تهیه و استفاده از Unit Test ها بیشتر احساس میشد. امروزه بسیاری از توسعه دهندگان وب به دلیل ماهیت Stateless وب در تعامل با ساختارهای نامناسب رویدادگرای Web Form ها به مشکلات بسیاری در توسعه سیستم های تحت وب ، علی الخصوص با ارائه مرورگرهای مدرن برخورده اند. و به همین دلایل و دلایل بسیار دیگر مایکروسافت به ارائه ASP .NET MVC اقدام کرد.

روش کار ASP .NET MVC

ASP .NET MVC
ASP .NET MVC با حذف کردن انعطاف پذیری Web Formها و ساده سازی آن عملکرد بسیار مناسبی ایجاد می کند. این روش که با پیاده سازی الگوی Model-View-Controller که طی سالهای متمادی یکی از بهترین روش های پیاده سازی UI بوده است ، امکان توسعه نرم افزارهای تحت وب با ساختار کاملا مستقل از هم را فراهم می نماید. الگوی MVC نرم افزار را به سه بخش Model، View و Controller تقسیم می نماید.
ASP .NET MVC - View

View مسئولیت ارائه ساختار نمایشی نرم افزار را به عهده دارد و با استفاده از ساختارهای HTML و اطلاعات پاس شده از طریق Controller به ارائه صفحات نمایش اقدام می نماید.

ASP .NET MVC - Model
Model به پیاده سازی منطق نگهداری داده های سیستم می پردازد و مسئولیت نگهداری اطلاعات را به عهده دارد.
ASP .NET MVC - Controller
Controller ها هم وظیفه کنترل کردن درخواست ها و تعامل های کاربران را به عهده دارند. تمامی درخواست هایی که از Client به سرور منتقل می شوند توسط Controller بررسی و با کنترل نسبت به استفاده از Model مربوطه و نمایش View مرتبط تصمیم گیری می نماید.
در MVC استفاده از رویدادها با Action های یک Controller جایگزین می شود. در واقع مهمترین مزیت استفاده از MVC جدا سازی بخش های مختلف سیستم از یکدیگر و امکان انجام Unit Test ها با توجه به این ساختار می باشد. همچنین مدیریت بهینه URL ها و خروجی های تولید شده HTML توسط View ها و کمک به بهینه سازی خروجی وب سایت برای موتورهای جستجو گر می باشد. در ساختار MVC دیگر مفهومی به نام View State ، Post Back و Server Control وجود ندارد و به همین جهت برنامه نویس به طور کامل بر روی خروجی تولید شده از صفحات مسلط می باشد.

مقایسه

مزایای ASP .NET MVC
  • مجزا سازی بخش های مختلف نرم افزار
  • کنترل کامل بر روی خروجی های تولید شده HTML
  • امکان توسعه نرم افزار به صورت TTD
  • مدیریت بهینه URL ها
  • امکان یکپارچه سازی مناسب با فریم ورک های جاوا اسکریپت
  • امکان استفاده از View Engine ها مختلف
  • عدم وجود View State و Post Back
  • استفاده از استانداردهای وب
  • قابلیت توسعه پذیری بالا
  • ایده آل برای سیستم های Web 2.0

مزایای ASP .NET Web Form

  • ساختار شبیه به نرم افزارهای تحت ویندوز
  • توسعه سریع نرم افزار
  • امکان استفاده از کنترل های غنی تحت سرور

نتیجه گیری

در واقع انتخاب هریک از این دو گزینه می تواند برای شما و تیم تان مناسب باشد. اگر شما به دنبال مدیریت کامل بر روی خروجی های صفحات خود هستید ، اگر به دنبال توسعه نرم افزار به روش TDD هستید ، اگر آدرس های تولید شده صفحات و بهینه سازی موتورهای جستجو برای شما دارای اهمیت است و البته اگر به دنبال استفاده از فریم ورک های جاوا اسکریپ هستید ، ASP .NET MVC گزینه مورد نظر شماست.
در سوی دیگر اگر شما از ساختارهای نرم افزارهای تحت وب، استانداردهای وب و HTTP اطلاعاتی ندارید ، ویا اگر به دنبال استفاده از کنترل های مختلف و توسعه نرم افزار به روش رویدادگرا هستید قطعا استفاده از ASP .NET MVC برای شما مناسب نمی باشد و بهتر است از ASP .NET Web Form استفاده کنید.

برگرفته از وبلاگ Shiju Varghese