قبلا یه مطلبی درباره Ninja Framework خونده بودم و همیشه دوست داشتم یه سرکی توش بکشم ببینم چه حرفی برای گفتن داره. تا اینکه بالاخره Ninja Framework منو طلبید و دیشبو با اون گذروندم.

به نظر میرسه Ninja Framework توسط یکسری جاوا developer خفن که هیچ کدوم از فریم ورک های وب جاوا موجود مثل Spring MVC یا Play Framework کارشونو برای پروژه هاشون بخوبی راه ننداخته توسعه داده شده و به همین دلیل از کلی best practice های توی فریم ورک های قبلی در Ninja Framework هم استفاده شده.

Ninja Framework خیلی بیش از حد شبیه Play Framework ولی بر خلاف Play کاملا با جاوا نوشته شده و هیچ وابستگی در هیچ سطحی با اسکالا نداره. یجورایی Ninja Framework اومده کلی از library ها و ابزار های بالغ در دنیای جاوا مثل Maven, Freemarker, Google Guice, JPA و ... رو با استفاده از best practice های development و معماری در فریم ورک های وب جاوا مثل Spring MVC یا Play Framework ترکیب کرده و یک فریم ورک وب ایده آل برای عاشقان جاوا درست کرده.

 

مزایای Ninja Framework:

  • یادگیری سریع برای توسعه دهندگان جاوا: چون برای کار باهاش فقط باید جاوا بلد باشی حتی دانش Java EE لازم نداره و از همه مهمتر نیومده چرخ رو از اول اختراع کنه و هر جا شده از library ها و ابزار های استاندارد و بالغ دنیای جاوا استفاده کرده که خیلی از توسعه دهندگان جاوا باهاش آشنا هستند.
  • Stateless بودن: درسته که Ninja Framework بر روی servlet container jetty بالا میاد ولی از servlet container فقط بعنوان وب سرور استفاده می کنه و از استاندارد های servlet container در Java EE تبعیت نمی کنه و بر خلاف اون مثل Play Framework کاملا stateless است که کمک می کنه به راحتی scale بشه.
  • کتابخانه تست حاضر و آماده: Ninja Framework هم شبیه Play برای نوشتن تست های اتوماتیک در هر سطحی (unit، functional و integration) کلاس های و کتابخانه های حاضر و آماده داره و کلی کار آدم رو راحت میکنه.
  • سازگاری با تمام IDE های دنیای جاوا: چون Ninja Framework از Maven بعنوان build tools استفاده کرده و حتی برای ایجاد یک پروژه Ninja باید از maven archetype استفاده کرد تقریبا با تمام IDE های موجود در دنیای جاوا سازگاری داره و به راحتی میشه با هر IDE باهاش کار کرد.

معایب Ninja Framework (بیشتر در مقایسه با Play Framework):

  • اگر توی web application تون بخاین از websocket استفاده کنید، Ninja Framework هیچ امکاناتی برای این کار نداره.
  • مباحث سیستم های Reactive مثل non blocking و async بودن در Ninja Framework وجود نداره.
  • هیچکدام از API های Ninja بر پایه Java 8 طراحی نشدند.
  • community فوق العاده کوچک.
  • قابلیت SuperDevMode که قراره امکان hot code reloading رو برای ما بیاره کاملا به IDE وابستس و در اکثر موارد کار نمی کنه (حداقل تو Intellij).

به نظرم Ninja Framework تلاشی بوده برای آوردن بهترین تجربیات فریم ورک های وب مثل Play یا Ruby on Rails در کنار جاوا و استاندارد های Java EE. کاری که در Play هم اتفاق افتاده ولی در بسیاری از موارد جاوا و استاندارد های Java EE با اسکالا و استاندارد های اون جا بجا شده که این کمی به مذاق توسعه دهندگان جاوا خوش نیومده. Ninja Framework با هدف داشتن یک فریم ورک مدرن و کاملا بر پایه استاندارد های جاوا و Java EE وارد میدان شده.

اگر بخام مقایسه نهایی رو با Play انجام بدم، از نظر فرآیند توسعه و مدرن بودن، Ninja Framework خودشو از Java EE جدا کرده و می تونه با Play در این زمینه رقابت کنه هر چند در مواردی مثل hot code reloading یا websocket عقبتره. از نظر معماری ولی Play چون بر پایه مفاهیم Reactive بنا شده و کاملا non blocking و async است در مبحث scalability بر روی یک ماشین خیلی جلوتر از Ninja Framework است که برای این موارد به servlet container اعتماد می کنه.

در کل با Ninja Framework خیلی حال کردم و یه application باهاش بالا آوردم و ازش ممنونم که باعث شد علاقم و اعتقادم به Play بیشتر از پیش بشه.