جوملا 4 مجموعه ای از ویژگی های جدید، پیشرفت ها و تغییرات بسیار مورد نیاز است. متأسفانه، پس از گذشت یک سال از انتشار آن، به سختی می توانید هر نوع سندی را در مورد اینکه اینها چه هستند و چگونه می توانند روی شیوه های توسعه نرم افزار شما تأثیر بگذارند، پیدا کنید. من سعی خواهم کرد نمای کلی 30000 فوتی را در مورد آنچه که به نظرم مهم ترین تغییرات است ارائه دهم.

Namespaces همانطور که ممکن است به خاطر داشته باشید، از زمان جوملا 3.3، نام کلاس های قدیمی (به عنوان مثال JUri) به یک معادل فضای نام (مانند Joomla\CMS\Uri\Uri) تغییر یافت. در جوملا 4 بسیاری از کلاس های قدیمی کار نمی کنند. می‌توانید این تغییرات را که به‌خوبی کدگذاری شده‌اند همراه با ابزارهایی برای تبدیل انبوه برنامه‌های افزودنی خود در مخزن جوملا نوع راهنمایی‌های من پیدا کنید. در جوملا 4 کار فاصله‌گذاری نام حتی عمیق‌تر شد، همه کلاس‌ها در مؤلفه‌ها، ماژول‌ها، افزونه‌ها و قالب‌ها نیز از فضای نام پشتیبانی می‌کنند – اگر از API جدید جوملا 4 برای توسعه برنامه‌های افزودنی استفاده می‌کنید. این یک مفهوم تغییر دهنده بازی است! کلاس های فضای نامی از مشخصات PSR-4 پیروی می کنند. جوملا نگاشت‌های PSR-4 را بین پیشوندهای فضای نام و دایرکتوری‌ها در سایت خود ذخیره و ثبت می‌کند، به این معنی که شما می‌توانید با خیال راحت از هر کلاسی از هر برنامه افزودنی در هر مکانی استفاده کنید، بدون اینکه نیازی به استفاده از include یا require دوباره باشد. این امر احتمال بروز باگ را تا حد زیادی کاهش می دهد و عملکرد جوملا و افزونه های آن را به شدت بهبود می بخشد.

Dependency Injection Container / Service Locator. جوملا 1.x تا 3.x شامل این God Object آزاردهنده به نام Joomla Factory ) JFactory یا \Joomla\CMS\Factory ) بود. این یک رویکرد بسیار موافق در نمونه سازی انواع خدمات مورد استفاده در سطح جهانی، از خود برنامه، پایگاه داده، اشیاء کاربر، تا شیء پستی داشت. اگر می خواستید برای برنامه افزودنی خود - یا خود جوملا - Unit Tests بنویسید - این بلای وجود شما بود. در جوملا 4 به جای آن یک Container داریم. این یک ظرف تزریق وابستگی واقعی نیست، به همان اندازه که یک سرویس یاب است، به این معنی که به طور جادویی یک شی را بر اساس تعاریف نوع در سازنده کلاس خود نمونه سازی نمی کند، اما به شما امکان می دهد خدماتی را که باید به آن تزریق کنید، بازیابی کنید. اشیاء شما هر برنامه افزودنی - جزء، ماژول، افزونه و قالب - یاب سرویس و شیء افزونه خود را دارد که از آن استفاده می کند. این کار نوشتن تست‌های واحد برای کد شما، به‌ویژه مدل‌های شما را بسیار آسان‌تر می‌کند (که بیشتر منطق کسب‌وکار شما، بنابراین کد شما که نیاز به آزمایش دارد، باید قبلاً باشد).

Web Asset Manager. در گذشته، هر زمان که می خواستیم یک فایل جاوا اسکریپت یا CSS را بارگذاری کنیم، باید وابستگی های آن و در نهایت فایل خود را بارگذاری کنیم. به عنوان مثال ممکن است بخواهیم jQuery را بارگیری کنیم، سپس تعدادی فایل جاوا اسکریپت هسته بوت استرپ و سپس فایل جاوا اسکریپت خود را بارگذاری کنیم. هر توسعه دهنده این کار را انجام می دهد و منجر به چندین مشکل مرغ و تخم مرغ می شود. اگر فایل A از پسوند X به فایل های B و C بستگی دارد و فایل B از پسوند Y به فایل های C و D بستگی دارد اما D باید قبل از C بارگذاری شود؟ آزاردهنده. Web Asset Manager وابستگی ها را به گونه ای کدگذاری می کند که به جوملا اجازه می دهد آنها را حل کند. همچنین به شما امکان می دهد وابستگی های جایگزین را تعریف کنید، به عنوان مثال. بسته به اینکه مرورگر کاربر از ماژول‌های جاوا اسکریپت پشتیبانی می‌کند یا نه، و گروه‌های دارایی، به عنوان مثال، یک فایل جاوا اسکریپت متفاوت برای بارگیری. مجموعه ای از CSS و جاوا اسکریپت که قرار است با هم بارگذاری شوند. این به شما امکان می دهد CSS و جاوا اسکریپت خود را به فایل های کوچکتر تقسیم کنید که به ترتیب صحیح بارگیری می شوند و عملکرد سایت کاربر شما را بهبود می بخشند.

یک MVC جدید. MVC در جوملا 1.5 تا 3.10 بسیار کمی تغییر کرده بود. تلاش‌های قبلی برای مدرن‌سازی آن به طرز مفتضحانه‌ای شکست خوردند، زیرا همزمان نتوانستند به اندازه کافی دور بروند و b/c را حفظ کنند (سازگاری با عقب). جوملا 4 دارای یک مدل MVC جدید است که مبتنی بر تزریق وابستگی و فضاهای نام است، دستوری تر، انعطاف پذیرتر و قدرتمندتر از نسخه های قبلی خود است. شما می توانید به راحتی یک مدل frontend را از یک مدل backend گسترش دهید به جای اینکه یک کد را دو بار بنویسید یا یک عمل انحرافی با PHP Traits انجام دهید. شما به راحتی می توانید کمک کننده های سفارشی HTML را بدون فراخوانی توابع استاتیک ایجاد کنید، از دسته بندی ها بدون نوشتن کد پایگاه داده نامطمئن استفاده کنید، مسیریاب های URL شی گرا ایجاد کنید و بسیاری موارد دیگر که در این کتاب به بررسی آنها خواهیم پرداخت.