مجنتو ۲

image00

یک سال و نیم پیش مجنتو ۲ نسخه Developer Beta منتشر شد و حالا هرچقدر بیشتر جلو می‌رویم، به نسخه‌ی نهایی که قرار است در دسترس عموم قرار بگیرد نزدیک‌تر می‌شویم. وبسایت مجنتو اعلام کرده که نسخه نهایی را در نیمه‌ی چهارم۲۰۱۵، یعنی پاییز۹۴، منتشر می‌کند. اما لازم نیست تا آن موقع صبر کنیم تا بفهمیم در مجنتو ۲ چه امکانات جدیدی اضافه شده است.

jQuery

اولین تغییر که برای تمام برنامه‌نویس‌ها خبر خوبی محسوب می‌شود پشتیبانی پیش‌فرض مجنتو ۲ از کتابخانه‌ی جاوااسکریپت jQuery است. نسخه‌های قبل از PrototypeJS استفاده می‌کردند که نسبت به jQuery امکانات کمتری داشت و به نسبت هم سخت‌تر بود. گرچه برای مهاجرت از مجنتو ۱ به مجنتو ۲ لازم است تا تقریباً تمام کدهای جاوااسکریپت را تغییر دهیم، اما به زحمتش می‌ارزد. چون jQuery سریع و راحت است. دو فاکتوری که برنامه‌نویس‌ها از هر کتابخانه‌ای انتظار دارند.

PHP

موضوع دیگر استفاده از PHP نسخه ۵.۵ به بعد است. گرچه مجنتو ۲ از این نسخه‌ی PHP بیشتر به خاطر افزونه‌ی OPcache و بهبودهای کتابخانه‌ی GD استفاده می‌کند، اما نسخه‌ی جدید PHP (بالاخره) امکانات هیجان‌انگیز خوبی معرفی کرده است که می‌توان از آنها در توسعه‌ی ماژول‌های مجنتو استفاده کرد. به طور مثال اضافه کردن finally در بلوک try…catch و استفاده از generatorها که بازگرداندن خروجی در متدها را بسیار ساده‌تر می‌کند.

Zend Framework

ایراد بزرگی که به مجنتو ۲ می‌گیرند این است که چرا با وجود ناسازگاری با نسخه‌های قبل، از چارچوب Zend نسخه‌ی ۲ استفاده نمی‌کند؟ Zend 2 حدود دو سال پیش منتشر شد و با وجود این که مجنتو ۲ از سه سال قبل کلید خورده بود (ایرادی دیگر) استفاده از Zend 2 پیش‌بینی دور از ذهنی به نظر نمی‌رسید. جواب‌های زیادی به این ایراد داده شده است که قانع‌کننده به نظر می‌رسند. مهاجرت از Zend 1 به Zend 2 بسیار پرهزینه است و نسبت به امکاناتی که به درد مجنتو می‌خورد، این مهاجرت مقرون به صرفه نیست. از طرف دیگر ماژول‌های مجنتو ۲ دیگر به هیچ‌وجه به طور مستقیم از Zend استفاده نمی‌کنند و برای همین برنامه‌نویس‌ها نباید نگران ابزاری که در لایه‌های پایین‌تر کار می‌کنند باشند. همچنین مساله این است که بالاخره توسعه‌دهندگان مجنتو به این نتیجه رسیده‌اند که به جای Zend می‌شود از چارچوب‌های به‌روزتر و بهینه‌تری هم استفاده کرد. آنها در حال بررسی ابزارهای دیگری هستند و در مجنتو ۲ از هر ابزار، کمی استفاده کرده‌اند. به طور مثال اتصال به پایگاه داده در مجنتو ۲ دیگر از کلاس‌های Zend استفاده نمی‌کند. بحث‌هایی برای استفاده از Doctrine در میان است اما به نظر نمی‌رسد با وجود تاخیر زیادی که مجنتو ۲ تا الان داشته به نسخه‌ی ۲.۰.۰ برسد. در مجنتو ۲ می‌توان از فایل‌های YML هم استفاده کرد که نشان‌دهنده‌ی استفاده از Symfony است. حتی در مورد استفاده از AngularJS هم شایعاتی وجود دارد.

به طور خلاصه، برنامه‌نویس‌ها در مجنتو ۲ حتماً باید از API رسمی خود مجنتو (و نه از چیزی دیگر) استفاده کنند. با رعایت این روش ماژول‌ها و تم‌ها در برابر تغییرات احتمالی ابزارهای لایه‌ی پایین‌تر در امان هستند و می‌توانند به راحتی در نسخه‌های آتی مجنتو ۲ به زندگی خود ادامه دهند.

Composer

Composer ابزار خوبی برای مدیریت پیش‌نیازهای نرم‌افزار است. در مجنتو ۱ ما با استفاده از modman و symlink کردن (یا کپی کردن) فایل‌های موجود در دایرکتوری vendor به دایرکتوری‌های مناسب، این کار را انجام می‌دادیم. اما مجنتو ۲ به طور پیش‌فرض از composer استفاده می‌کند و این حتی خیلی بیشتر از استفاده از jQuery ما را خوشحال می‌کند.

ساختار دایرکتوری‌ها

  • ساختار دایرکتوری‌ها به کلی در مجنتو ۲ تغییر کرده است. یک تم در مجنتو ۱ در شاخه‌ی app/design/frontend یا app/design/adminhtml جای می‌گرفت ولی حالا، هر پکیج برای خودش یک تم مستقل دارد. به طور مثال
app/themes/frontend/Magento/theme1

یا

app/themes/frontend/Package1/theme1
  • محتویات دایرکتوری app هم تغییر کرده است. پیش از این در دایرکتوری app/code سه دایرکتوری دیگر به نام‌های core، local و community وجود داشت اما در مجنتو ۲ این تقسیم‌بندی ماژول‌ها حذف شده و تمام پکیج‌های به طور مستقیم در شاخه‌ی app/code قرار می‌گیرند:
app/code/Magento/Module1
app/code/Package1/Module2
  • تمام assetهای ایستا (عکس‌ها، جاوااسکریپت‌ها، خطاها و skin) که در مجنتو ۱ شاخه‌ای جداگانه برای خود داشتند به دایرکتوری pub منتقل شده‌اند. skin با pub/static جابجا شده است.
  • قالب‌های ایمیل که در شاخه‌ی app/locale بودند حذف شده‌اند و در مجنتو ۲ هر ماژول قالب‌های ایمیل خود را در دایرکتوری خود تعریف و ترجمه می‌کند.
  • شاخه downloader به کلی حذف شده است. تغییر بسیار خوبی که از نصب شدن ناخواسته‌ی (!!) ماژول‌ها جلوگیری می‌کند.

Test

در مجنتو ۱ به صورت پیش‌فرض امکان تست وجود نداشت و برنامه‌نویس‌ها باید تلاشی ماورائی می‌کردند تا هیچ خطایی از زیر دست‌شان در نرود. اما حالا در مجنتو ۲ به صورت پیش‌فرض پشتیبانی از تست‌های زیر اضافه شده است:

  • Integration Tests
  • Unit Tests
  • Javascript Unit Tests
  • Static Tests
  • Legacy and Migration Tests
  • Performance Tests

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

 

نتیجه‌گیری

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

از سال ۸۵ برنامه‌نویسی را با نوشتن یک بازی ساده با ++C شروع کرد. به زبان PHP مسلط است و با سیستم‌های مدیریت محتوای زیادی مثل دروپال، وردپرس، بیتریکس و مجنتو آشنایی دارد. درحال حاضر در سارینا با Magento، Laravel و Ruby on Rails کار می‌کند. عاشق سرک کشیدن در تکنولوژی‌های جدید، خواندن کتاب و موسیقی راک است.