فریم ورک Ruby On Rails چیست؟

اگر یادتان باشد، زبان PHP که حدوداً سال ۱۹۹۷ به وجود آمد، تقریباً پنج سال بعد توانست خود را نشان دهد و برنامه‌نویسان زیادی‌ را به خود جلب کند. به نظر می‌آید چنین اتفاقی برای RoR یا Roby on Rails نیز خواهد افتاد و تا مدتی دیگر تعداد برنامه‌نویسان این فریم‌ورک به سرعت زیاد، خواهد شد.

RoR تقریباً سه سال پیش از پروژه‌ای به نام Basecamp که برای مدیریت پروژه‌های طراحی وب بود، اقتباس شد.RoR در واقع فریم‌ورکی رایگان برای برنامه‌های تحت وب است که با هدف سرعت بخشیدن و آسان‌ترشدن کدها به وجود آمد. زبان اصلی این فریم‌ورک، Ruby است که تقریباً هفده سال قبل در ژاپن تولید شده بود ولی تا قبل از Rails قدرت زیادی نداشت.

 

الگوی طراحی برنامه‌های این فریم‌ورک نیز MVC یا Model View Controller است. (شکل۱)

RoR بر اساس دو اصل مهم استوار است:

اول، اصل؛ DRY یا Don’t Repeat Yourself به این معنا که اطلاعات، در یک مکان مشخص و منفرد قرار دارد و نیازی نیست که مثلاً برنامه‌نویس، نام ستون اطلاعات را مشخص کند و به جای آن Ruby می‌تواند این اطلاعات را از پایگاه داده استخراج کند.

دوم، CoC یا Convention over Configuration به این‌معنا که فریم‌ورک هوشمند است و برنامه‌نویس فقط باید جنبه‌های نامشخص برنامه را مشخص کند.

RoR از دو جزء اصلی تشکیل شده است: اول زبانی به نام Ruby با Syntax بسیار تمیز و کاملاً شیءگرا که شاید بتوان Ruby را ترکیبی از مزایای زبان‌های برنامه‌نویسی دیگر دانست؛ مثلاً سادگی Pythons، عملکرد Perl و ظرافت مفهمومی Smaltalk.

جزء دوم، Rails است؛ فریم‌ورکی با منبع باز برای Ruby جهت طراحی برنامه‌های تحت وب و برنامه‌هایی که به صورت مستقیم با پایگاه داده در ارتباطند یا به قول معروف Database-Driven هستند.

یکی از مزایای Rails نسبت به فریم‌ورک‌های دیگر این است که با آن می‌توان با سرعت بیشتر، تقریباً ده برابر، برنامه‌نویسی کرد. علت این سرعت بالا، شاید در استفاده از زبان Ruby و پشتیبانی از دو اصل مهمی است که قبلاً ذکر شد (CoC و DRY).

در RoR، با خطوط کمتری از کد، می‌توانیم برنامه تحت وب خود را بسازیم و طبیعتاً از آن‌جایی که کدهای ما کم است، برای آن به‌راحتی قابل درک خواهد بود و خطای کمتری را در خود خواهد داشت و Debugging آسان‌تر خواهد شد.

در حالت کلی RoR نسبت به دیگر فریم‌ورک‌های برنامه‌نویسی تحت وب چیز جدیدی ندارد و تنها فرق آن با دیگر فریم‌ورک‌ها، تعاملی است که بین Ruby و Rails در آن وجود دارد. تنها قابلیت RoR این نیست که سریع‌تر از فریم‌ورک‌های دیگر است، بلکه کدهای برنامه در آن بسیار واضح‌ترند و قابلیت تعمیرپذیری بالاتری نیز دارند.

Rails فریم‌ورکی است که از مدل MVC پیروی می‌کند و به صورت جامع، تمامی لایه‌های این مدل را پشتیبانی می‌کند. در صورتی که فریم‌ورک‌های دیگر معمولاً تنها قسمتی از این مدل را پشتیبانی می‌کنند و برنامه‌نویس را مجبور به هماهنگ کردن اجزای سیستم می‌کنند.

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

همچنین در Rails، تهیه برنامه‌ها بر خلاف فریم‌ورک‌های دیگر فقط یک مرحله دارد. در Rails کافی است برنامه خود را تغییر داده و نتیجه آن را مستقیماً مشاهده کنید.

یکی دیگر از امتیازات Rails درخصوص تهیه برنامه‌های تحت وب این است که عملیات CRUD یا Delete ،Create – Retrieve – Update ‌و نمایی از پایگاه داده به صورت خودکار آماده می‌شود.

Rails، خود از اجزایی تشکیل شده است که با همدیگر در ارتباط نزدیک هستند؛ البته این اجزا می‌توانند به صورت مستقل نصب شوند. برخی از این اجزا عبارتند از:

- ORM :Active Record و ارتباط‌دهنده مدل‌ (model) به جداول بانک اطلاعاتی‌

- Action Pack: سازنده View و Controller در معماری MVC

- Prototype سازنده اجزای داخل صفحه وب از جمله ای‌جکس‌

-Action Mailer: مسئول دریافت و ارسال ایمیل‌

- Action Web Service: پشتیبان SOAP ،XML و WSDL

قطعه کد زیر نمونه‌ای از کدهای RoR را نشان می‌دهد که عبارت Hello World را نمایش می‌دهند:

 

منابع: ماهنامه شبکه

کدامیک از Framework های PHP را برگزینیم؟

 

فریم ورک
های بسیار زیادی برای PHP نوشته شده است که هر کدام ویژگی‏ها و امکانات
خاص خودشان را دارد. برای برگزیدن یکی از آنها، نیاز به بررسی همه و
آشنایی نسبی با آنها دارد.
در این
نوشته پنج Framework مشهور را برگزیده  و بررسی شده است. این بررسی
می‏خواهد یک Overview کلی از هر کدام را نشان دهد تا برای دیگران، انتخاب
آسان‏تر شود.


http://www.dl.foxworld.ir/foxworld/picture/uploads/1306820548.png


طبیعتا Zend Framework سرشناس‏ترین و بالاترین گزینه ما است؛ چون که Zend،
شرکتی که پشت PHP است آن را طراحی و تولید کرده است. این Framework
امکانات زیادی داشته و بسیار قدرتمند است و هر آن چه که برای تولید یک
پروژه بزرگ لازم داشته باشید در خود دارد. License آن هم
BSD است که به شدت انعطاف پذیر بوده و شرط می‏کند که در صورت توسعه آن باید کد تولید شده کاملا انعطاف پذیر باشد.

همچنین این Framework از PHP 4 پشتیبانی نمی‏کند و تنها در PHP 5 اجرا می‏شود. با توجه به تلاشهای زیاد
اخیر برای ارتقاء به PHP 5 در سرورها شاید این مسئله کمتر به چشم بیاید
ولی به هر روی ناهماهنگی با یکی از گسترده‏ترین نسخه‏های PHP در این
Framework به چشم می‏خورد.

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

(یکی از مزایای Zend این است که شما فقط از کتابخانه های مورد نیازتان استفاده می کنید و این امر برنامه ها را سبک تر می کند)

بد نیست بدانید که در بین سایتهای ایرانی، سایت مشهور کلوب با کمک Zend Framework درست شده است.

http://www.dl.foxworld.ir/foxworld/picture/uploads/1308116438.png


یکی از مشهورترین و محبوب‏ترین Frameworkها و یکی از بهترین برابرهای
Rails
در PHP به شمار می‏آید. از MVC کامل پشتیبانی می‏کند. کاربران خیلی زیاد و
فعالی دارد که ویژگی مهمی به حساب می‏آید. اگر چه من اصلا از Mambo خوشم
نمی‏آید ولی این CMS محبوب
Mambo هم قرار است در نسخه‏های آینده از CakePHP استفاده کند.
اما این سیستم دو تا اشکال کوچک هم دارد. یکی این که بیش از اندازه کند
است (برای خواندن گزارش یک Benchmark خوب بین CakePHP، Zend Framework و
CodeIgniter
اینجا
را ببینید). این مساله در صورتی که هزینه سرور برای شما اهمیت داشته باشد،
خودش را بیشتر نشان می‏دهد. دوم این که اسامی کلاسهایی CakePHP خیلی عمومی
طراحی شده است. برای نمونه کلاس Database که اگر شما هم کلاس مشابهی داشته
باشید، سبب ایجاد ناهماهنگی در کد شما می‏شود و به طور کلی چنین اسم‏گذاری
و به کار نگرفتن پیشوند مناسب مانند Cake سبب بدبینی نسبی من به طراحی این
سیستم شده است.
همچنین ORMی که در CakePHP طراحی شده است، توارث را پشتیبانی نمی‏کند و به
باور من چندان استاندارد نیست. (با Hackهایی می‏توان مشکل توارث ORM در
CakePHP حل کرد. در این باره رک:
Kelnishi.com)

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


http://www.dl.foxworld.ir/foxworld/picture/uploads/1344862292.png


از همه گزینه‏های دیگر متفاوت است. بر پایه MVC درست نشده است. طراح Prado
این کار را برای پروژه دکترایش انجام داده است و در طراحی آن Delphi را مد
نظر داشته و تلاش کرده تا یک Framework کاملا Object Oriented و Event
Driven درست کند. اگر با ASP.NET کار کرده باشید، Prado را خیلی مشابه با
آن خواهید یافت. در Prado همه چیز حتی یک Label و Button هم Object است که
Propertyها و Eventهای خاص خودش را دارد. همچنین زبانی شبیه به HTML برای
طراحی ظاهر صفحات دارد (دقیقا شبیه به ASP.NET و Tagهای asp: این زبان)
من اگر چه ASP.NET را دوست دارم و باهاش کار هم می‏کنم و اگر چه فکر
می‏کنم Prado سیستم خیلی قشنگ و تمیزی است ولی Prado هم گزینه برگزیده من
نیست؛ چون پشتیبانی یک سیستم از MVC برایم اهمیت زیادی دارد.

http://www.dl.foxworld.ir/foxworld/picture/uploads/1356079111.png


این Framework خیلی شبیه به CakePHP و از آن ساده‏‎تر و کوچکتر است و به
همین خاطر هم از لحاظ سرعت از CakePHP خیلی بهتر است ولی خوب به همان
اندازه هم امکانات کمتری دارد. این Framework شما را مجبور به پیروی کامل
از MVC نمی‏کند، بنابراین برای یادگیری نوآموزان بهتر است. از Ajax هم
مستقیما پشتیبانی نمی‏کند. ولی Code Igniter ویژگی‏های خوبی هم دارد. این
Framework در PHP 4 هم کار می‏کند و از لحاظ سبک برنامه‏نویسی به سبک
برنامه‏نویسی PHP 4 نزدیک است. به همین خاطر برای Port کردن کدهای قدیمی
به یک Framework گزینه مناسبی است. همچنین دارای Community بزرگی است و
کامپوننتها و مثالهای فراوانی برایش پیدا می‏شود. این Framework هم همانند
CakePHP گزینش من نیست.

http://www.dl.foxworld.ir/foxworld/picture/uploads/1323194927.png


این Framework امکانات بسیار زیادی دارد و ماژول‏های جداگانه را برای
انجام کارهای خودش به کار می‏گیرد: مانند DB Layer که با امکانات زیاد
خودش واقعا لایه بانک اطلاعاتی شما را به بهترین شکل پشتیبانی می‏کند و
امکان نوشتن برنامه مستقل از بانک اطلاعاتی را به شما می‏دهد. (اگر چه این
ویژگی در Frameworkهای دیگر هم هست).
برای انجام پروژه‏های بزرگ symfony به خاطر امکانات زیادش، گزینه خیلی
خوبی است ولی با این حال، پیچیدگی‏های Zend Framework را هم ندارد. این
Framework هم تنها بر روی PHP 5 کار می‏کند. License آن هم MIT است که
License خوب و انعطاف‏پذیری به حساب می‏آید. همچنین این Framework به خوبی
AJAX را پشتیبانی می‏کند و امکاناتی برای ساختن صفحات Admin سایت دارد که
کار طراحی بخش مدیریتی سایت را خیلی آسان می‏کند.

سیمفونی از ORM مشهوری به نام Propel
بهره می‏گیرد که به باور من سیستم بسیار قدرتمندی است. اگر چه در CakePHP
هم ORM هست ولی در آن جا از یک سیستم داخلی استفاده شده است. به کار گیری
یک ORM بیرونی سبب افزایش سرعت توسعه سیمفونی شده است؛ چون که Propel
سیستم خیلی مشهوری بوده و به طور عادی خودش در حال توسعه هست. این مساله
همچنین هوشمندی طراحان سیمفونی را نشان می‏دهد.

خوب حدس
زدنش سخت نیست. Framework برگزیده من symfony است. طراحی دقیق و محکم،
سرعت مناسب، امکانات خیلی زیاد، مستندات و Community بزرگ آن، وجود ویژگی
Admin Generator و سیستم کنترل دسترسی که سبب می‏شود من بتوانم در زمان
طراحی صفحات سایت به مسائل مهمتر و افزودن ویژگی‏های اصلی بپردازم، از
دلایل این گزینش من است.

نگاهی گذرا بر برخی قابلیت های جدید در ASP.NET 4

 
از زمان asp.net 1 تا الان یکی از ویژگی های اصلی آن Web formها بودند. در
نسخه جدید ASP.NETقابلیت های خوبی به وب فرم ها و visual web developer
اضافه شده که در زیر بعضی از اونها رو بررسی میکنیم
۱- توانایی ست کرد Meta tag
2-کنتر بیشتر روی View state
3-کنترل بیشتر روی Id ایجاد شده برای کنترل ها
۴-کنترل بیشتر روی تگ های ایجاد شده برای بعضی کنترل های دیتابیسی
۵- تمپلیت های جدید برای پروژه ها
در قسمت بعدی چند نمونه از این تغییرات را با هم خواهیم دید.

قابلیت اولی که در باره آن بحث خواهیم کرد، کنترل بیشتر روی Viewstate
است. در asp.net 4 یک خاصیت جدید به نام ViewStateModeبه کنترل ها اضافه
شده که به کمک آن میتوانید عملکرد Viewstate هر کنترل را به طور جداگانه
تعیین نمایید. این خاصیت سه مقدار Desable,Enable,Inherit را میپذرد و
تعین میکند که Viewstate از صفحه به ارث برده شود، فعال باشد یا غیر فعال.
قابلیت بعدی کنترل روی ID ایجاد شده برای کنترل ها میباشد. در نسخه های
قبلی اگر کنترلی داخل یوزرکنترل قرار میگرفت یا کنترل درون صفحه ای قرار
میگرفت که درون یک مستر پیچ قرار داشت، به نام آن کنترل پیشوند هایی اضافه
میشد تا یکتا بودن نام آن کنترل را در صفحه تضمین کند. این نامها در بساری
از مواقع خوانایی کمی داشتند و مهم تر از همه هیچ کنترلی روی این نام ها
نداشتیم. در نسخه جدید ASP.NET این قابلیت برای برنامه نویس فراهم شده است
که کنترل دقیقی برو روی نام های ایجاد شده برای کنترل ها داشته باشد.
برای این منظور از خاصیت جدید ClientIDMode استفاده میکنیم که تعیین میکند
نام به صورت اتوماتیک ایجاد شود، ثابت باشد، به ارث برسد یا از قاعده ما
پیروی کند.
و در آخر تمپلیت های جدید نیز برای انواع جدید از پروژه ها به این نسخه
اضافه شده است. مانندDynamic Data, ASP.NET MVC,Entity Templatesو …
برای آشنایی کامل تری با این امکانات میتوانید به اینجا مراجعه کنید.
همین دیگه! تموم شد.