Tìm hiểu về Play Framework

Tổng quan

  • Play framework giúp xây dựng web application với Java và Scala dễ dàng hơn. Play đi theo hướng phát triển web nhẹ và thân thiện với người dùng. Được xây dựng trên Akka, Play cung cấp resource tiêu thụ dự đoán và tối thiểu (CPU, bộ nhớ, các threads) cho các ứng dụng có khả năng mở rộng cao.
  • Play thân thiện với developer: workflow tốt, tools để build và console quyền lực, an toàn, được xây dựng trên testing tools và hỗ trợ IDE cho Eclipse và IntelliJ
  • Quy mô có thể dự đoán được. Tầng dưới lớp bảo phủ Play sử dụng mô hình không đồng bộ hóa hoàn toàn được xây dựng trên tầng đầu của Akka. Kết hợp với stateless, quy mô hoạt động của Play đơn giản và dễ nhận biết được.
  • Tạo ra các ứng dụng web và mobile hiện đại và hợp xu thế. Play được xây dựng dựa trên các nhu cầu tạp ra các ứng dụng web và mobile hiện đại.

Kiến trúc và vòng đời

Mô hình MVC

Mội ứng dụng Play tuân theo mô hình MVC thường áp dụng cho kiến trúc Web. Có 3 layer được định nghĩa trong folder app, mỗi layer đều ở trong một package riêng biệt.

  • app/controllers Một Controller là một Java class nơi mà mỗi phương thức là một action. Một action được gọi khi một HTTP request được gọi. Code Java từ class Controller không thực sự là hướng đối tượng, nó phần lớn là code procedural. Method action lấy ra các data liên quan từ HTTP request, đọc và update model object, and gửi lại kết quả được đóng gói trong một HTTP response.
  • app/models Lớp đối tượng model í một thiết lập các Java class sử dụng tất cả các tính năng hướng đối tượng sẵn có từ ngôn ngữ Java. Nó chứa các cấu trúc dữ liệu và phương thức hoạt động trong ứng dụng. Bất cứ khi nào đối tượng model cần save vào bộ lưu trữ liên tục, chúng có thể sử dụng các glue artifacts giống như JPA annotations joawjc SQL statements.
  • app/views Phần lớn views của appication được tạo ra dựa theo một templating cung cấp bởi Play. Controller lấy ra data cần thiết từ model layer, sau đó apply 1 template để trang trí các object đó. Những packages này chứa các file template như HTML, XML, JSON với các chỉ thị đặc biệt sử dụng để generate các model đại diện.

Vòng đời

Play framework hoàn toàn là stateless và chỉ định hướng Request/Response. Tất cả HTTP request đều tuân theo các con đường tương tự nhau.

  • Một HTTP Request được nhận bởi framework.
  • Thành phần Router cố gắng tìm các lộ trình xác định để chấp nhận request này. Các phương thức action tương ứng sẽ được gọi tới.
  • Application code được thực thi.
  • Nếu một view phức tập cần được generate, một file template được render.
  • Kết quả của một phương thức action (HTTP Response code, Content) sau đó được viết thành một HTTP Response.

Bố cục của một Play application

Bố cục của một Play application được chuẩn hóa để giữ mọi thứ đơn giản nhất có thể. Sau lần compile thành công đầu tiên, một Play application có bố cục như sau:

app/ directory

app directory chứa tất cả artifacts thực thi: Java và Scala source code, template và compiled assets' sources. Có ba packages trong app directory, mỗi package là một thành phần trong mô hình kiến trúc MVC:

  • app/controllers
  • app/models
  • app/views Bạn có thể thêm một package của riêng bạn như package app/utils. Ngoài ra, có một directory tùy chọn là app/assets cho việc compiled assets như LESS source và CoffeeScript sources.

conf/ directory

conf directory chứa các file config của app. Có hai file config chính là:

  • application.conf : file config chính của app, nơi chứa cái parameter config
  • routes: file định nghĩa các đường dẫn của app Nếu bạn cần thêm các option config cụ thể cho app của bạn, bạn nên thêm các option đó vào file application.conf Nếu một thư viện cần một file config cụ thể, hãy thêm file đó vào trong folder conf

lib/ directory

lib directory là tùy chọn và chứa các dependencies library, tất cả các files JAR bạn muốn quản lý bằng tay ngoài hệ thống. Chỉ cần thêm bất kì file JAR vào đây, chúng sẽ được thêm vào classpath của application của bạn.

build.sbt file

Các khai báo build chính của project được đặt ở trong file build.sbt tại thư mục gốc của project. Các file .scala trong đường dẫn project/ cũng có thể sử dụng để khai báo bản build của project.

project/ directory

project directory chứa các định nghĩa build sbt:

  • plugins.sbt: định nghĩa các plugins sbt sử dụng trong project
  • build.properties: chứa các version sbt sử dụng để build app

target/ directory

target directory chứa mọi thứ được gen bởi hệ thống. Bao gồm:

  • classes/ chứa tất cả các compiled class (từ cả Hava và Scala source)
  • classes_managed/ chứa các class được quản lý bởi framework (ví dụ như các classes gen bở router hoặc template của hệ thống)
  • resource_managed/ chứa các resource được gen ra, các kết quả compile của LESS CSS và CoffeeScript,...
  • src_managed/ chứa các sources được gen ra như Scala sources được gen bởi template của hệ thống
  • web/ chứa các assets xử lý bởi sbt.web

Các loại .gitignore file

Các folders đã được gen ra bị ignore bởi hệ thống kiểm soát version. Đây là các file .gitignore điển hình của một Play application.

  • log
  • project/project
  • project/target
  • target
  • tmp
  • dist
  • .cache

Trên đây là giới thiệu sơ lược về kiến trúc và cách thức hoạt động của Play Framework. Hi vọng bài viết này sẽ đem lại chút kiến thức bổ ích cho các bạn.

Tham khảo:

https://www.playframework.com/documentation/1.0/main https://www.playframework.com/documentation/2.6.x/Anatomy#anatomy-of-a-play-application


All Rights Reserved