ساخت اپلیکیشن مقیاس بزرگ با Jooby

13 خرداد 1398, خواندن در 3 دقیقه

Jooby یک میکرو فریمورک ماژولار برای ساخت اپلیکیشن ها در جاوا و Kotlin هست. اگر این اولین باره که درمورد Jooby می شونید, میتونید این لینک رو مطالعه کنید تا دلایل انتخاب Jooby رو متوجه بشید. 

میکرو فریمورک های برای ساخت اپلیکیشن های کوچک مناسب هستند, اما آیا اونها برای اپلیکیشن های متوسط یا پیچیده هم خوب هستند؟

در این مقاله ما یاد میگیریم که Jooby امکان ساخت اپلیکیشن هایی با مقیاس بزرگ رو بهمراه نگهداری منظم و maintainable کدها فراهم میکنه.

پیاده سازی توسعه اپلیکیشن

بیایید فرض کنیم می خواهیم یک HTTP API برای کاربران بسازیم. یک پیاده سازی اپلیکیشن شبیه کد زیر میشه :

//App.java
import org.jooby.Jooby;

public class App extends Jooby {

  {
    /** User API: */
    use("/api/users")
      /** List all users. */
      .get(() -> {
        UserDao dao = require(UserDao.class);
        return dao.list();
      })
      /** Find user by ID. */
      .get("/:id", req -> {
        String id = req.param("id").value();
        UserDao dao = require(UserDao.class);
        return dao.get(id);
      })
      /** Create new user. */
      .post(req-> {
        User user = req.body(User.class);
        UserDao dao = require(UserDao.class);
        return dao.create(user);
      })
      /** Delete by ID. */
      .delete(req-> {
        String id = req.param("id").value();
        UserDao dao = require(UserDao.class);
        return dao.delete(id);
      });
  }

  public static void main(String[] args) {
    run(App::new, args);
  }
}

حالا اپلیکیشن شما آمادست. فهم این بسیار تمیز و راحته. سادگی یکی از اهداف Jooby هست.

توسعه اپلیکیشن مقیاس بزرگ

فرض کنید شما میخواهید با انجام کارهای زیر اپلیکیشن خودتون رو گسترش بدید :

  • یک HTTP API برای بلاگ ها
  • یک HTTP API برای دیدگاه ها
  • رابط کاربری برای کاربران, بلاگ ها و دیدگاه ها

ما میتونیم کدی که نوشتیم رو نگه داریم و تعداد خط کدهای فایل App.java رو زیاد کنیم. این روش کار بسیار مناسبه. 

اما اگر شما بخواهید سورس کدتون رو بهتر سازماندهی کنید, چطور؟ این کار رو چطور باید انجام بدیم؟ این یکی از عیب های اکثر میکرو فریمورک هاست, اما در مورد Jooby اینطور نیست!

Jooby تعدادی قابلیت و الگو فراهم میکنه که به شما اجازه میده اپلیکیشن خودتون رو بسازید و به شکلی که می خواهید سازماندهی کنید.

مسیر های a.k.a Controller) MVC)

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

//UserController.java
import javax.inject.Inject;
import org.jooby.mvc.Path;
import org.jooby.mvc.GET;

@Path("/api/pets")
public class UserController {

  private UserDAO dao;

  @Inject
  public UserController(UserDAO dao) {
    this.dao = dao;
  }

  @Path("/:id")
  @GET
  public Pet get(String id) {
    return dao.get(id);
  }

  @GET
  public List<Pet> list() {
    return dao.list();
  }
}

ما میتونیم مسیرهای اسکریپت رو با کنترلر جدیدمون عوض کنیم. حالا اپلیکیشن ما بصورت زیر در میاد :

//App.java

import org.jooby.Jooby;

public class App extends Jooby {

  {
    use(UserController.class);
  }

  public static void main(String[] args) {
    run(App::new, args);
  }
}

شما میتونید همین الگو رو برای بلاگ ها, دیدگاه ها و کنترلرهای UI پیاده سازی کنید :

import org.jooby.Jooby;

public class App extends Jooby {

  {
    /** UI: */
    use(WebPageController.class);
    /** User API: */
    use(UserController.class);
    /** Blog API: */
    use(BlogController.class);
    /** Comment API: */
    use(CommentController.class);
  }

  public static void main(String[] args) {
    run(App::new, args);
  }
}

با این روش معمولا اپلیکیشن توسط کلاس های کنترلر و annotation ها به کامپوننت های مختلف تقسیم میشه.

بهتر نبود اگر ما بتونیم مسیرهای اسکریپت و سورس کد رو سازماندهی شده داشته باشیم؟

اپلیکیشن های Embedded

این الگو به شما اجازه میده یک یا چند اپلیکیشن رو در یک اپلیکیشن بسازید.

ما اپلیکیشن خودمون رو به 4 کامپوننت تقسیم کردیم, مثل کاری که قبلا با کنترلرها کردیم. اما اینبار هر کامپوننت خودش یک اپلیکیشن هست :

وقت اینه که طبق مثال کنترلرها این رو embedded (جاسازی) کنیم :

//Users.java
import org.jooby.Jooby;

public class Users extends Jooby {

  {
    /** User API: */
    use("/api/users")
      /** List all users. */
      .get(() -> {
        UserDao dao = require(UserDao.class);
        return dao.list();
      })
      /** Find user by ID. */
      .get("/:id", req -> {
        String id = req.param("id").value();
        UserDao dao = require(UserDao.class);
        return dao.get(id);
      })
      /** Create new user. */
      .post(req-> {
        User user = req.body(User.class);
        UserDao dao = require(UserDao.class);
        return dao.create(dao);
      })
      /** Delete by ID. */
      .delete(req-> {
        String id = req.param("id").value();
        UserDao dao = require(UserDao.class);
        return dao.delete(id);
      });
  }
}

نتیجه گیری

در این مقاله در مورد ساخت اپلیکیشن هایی با مقیاس بالا و توسط Jooby صحبت کردیم که با دو روش MVC یا مسیرهای اسکریپت ممکن بود.

بعضی کاربران مسیرهای MVC و بعضی ها مسیرهای اسکریپت رو ترجیح می دهند اما شما میتونید از هردو یا ترکیبی از آنها استفاده کنیم. 

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
امیررضا سیستانه ای @reza.sys
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو