Tìm hiểu về Hanami Framework

1. Giới thiệu

-Hanami (hay trước đây còn được gọi là Lotus) là một Ruby web framework khá mới, được giới thiệu trong khoảng 2 năm gần đây, nó có câú trúc đớn giản và vì sinh sau đẻ muộn so với Rails nên nó có những điểm mới cải thiện những điều nhiều người không thích ở Rails.Sau đây, chúng ta sẽ cùng cài đặt và tìm hiểu một vài điều cơ bản về web framework này.

2.cài đặt

-Cài đặt Hanami rất đơn giản, chúng ta chỉ cần chạy lên sau:

gem install hanami

hanami_install.png

-Để bắt đầu một chương trình Hanami, chúng ta chạy lệnh:

hanami new my-app

hanami_new_app.png

-Để chạy ứng dụng vừa cài đặt, chúng ta chạy:

cd my_app && bundle

ở đây một số gem cần thiết của Hanami sẽ được cài đặt giống như khi chúng ta chạy bundle trong Rails.

  • Chạy lệnh:
bundle exec hanami server

để khởi động server cho ứng dụng. Đây là hình ảnh của ứng dụng, chạy trên cổng 2300 :

hanami_server.png

3.Cấu trúc cơ bản của một ứng dụng Hanami

Đây là cấu trúc thư mục của ứng dụng my_app chúng ta vừa cài đặt ở trên:

hanami_folder_structure.png

-Folder apps: trong folder apps là folder web được khởi tạo bởi Hanami, một ứng dụng Hanami có thể chứa nhiều web apps bằng cách tạo thêm các web apps mới.

-Folder lib: lib sẽ là nơi chứa các bussiness logic của ứng dụng, kể cả model.Ở đây, entity là nơi chúng ta định nghĩa đối tượng và tạo ra bảng trong cơ sở dữ liệu cho đối tượng.Responsitory là nơi quản lý các query tới database.

-Một số file/thư mục khác như:

  • .env, .env.development, .env.test sẽ được export khi bạn chạy ứng dụng ở các môi trường tương ứng.
  • Gemfile: là file quản lí Ruby gem, nó cũng có thể quản lí các gem với các môi trường khác nhau như test, development, production như Gemfile của Rails.
  • Rakefile: miêu tả các Rake tasks.
  • Config: chưa các cấu hình của ứng dụng.
  • db: chứa file db schema và các file migration.
  • spec: thư mục test.

4.Một số điểm đáng quan tâm của Hanami

-Hanami::Action: đối với Hanami, mỗi action tương ứng với một class chứ không còn là method giống như trong Rails, điều này giúp ta tránh được việc làm phình to controller và việc testing trở nên đơn giản hơn.

  • View là một class, tất cả các method của class có thể khả dụng trong template, ở đây view giống như một lớp presenter.Điều này cũng giúp ích cho việc testing khá nhiều.Như ta có thể thấy trong Rails, view và template là một, ta có thể sử dụng logic trong Rails, và khi viết một method helper thì ta có thể sử dụng ở bất kỳ view nào, điều này nên cẩn thận khi xây dựng một hệ thống lớn khi mà code có thể chồng chéo nhau.
  • Rails sử dụng cấu trúc monolithic, một ứng dụng Rails khó để chia ra thành từng mảng nhỏ.Trong khi đó, Hanami sử dụng cấu trúc microservices, tức là có thể chia một wungs dụng lớn thành các ứng dụng nhỏ hơn kết nối với nhau.Điều này rất được quan tâm khi phát triển các ứng dụng có quy mô lớn.
  • codebase của Hanami rất rõ ràng và đơn giản, điều này giúp cho việc tìm hiểu và phát triển ứng dụng nhanh hơn.Performance của ứng dụng cũng tốt hơn khi không phải giải tự quyết quá nhiều vấn đề
  • Như đã nói ở trên bussiness logic của Hanami được đặt ở trong thư mục lib và được phân chia thành 2 khối rõ ràng và được chia sẻ với các app.Điều này giúp chúng ta dễ dàng nhìn thấy các logic ở cùng một nơi.So sánh với Rails, ta có thể thấy được bussiness có thể được đặt ở cả trong controller, models.Khi ứng dụng lớn lên thì ngay cả việc nhét code vào model để làm nhỏ controller lại thì lại gây ra tình trạng phình to quá mức, khiến cho chúng ta phải dùng đến các hình thức khác như dùng service object, ...
  • Do sinh sau đẻ muộn nên Hanami được phát triển dựa trên việc tránh các nhược điểm của một số framework khác, ví dụ như việc phát triển bám theo các pattern tốt, không sử dụng monkey-path để tránh việc làm ảnh hưởng tới ứng dụng, ...

5.Nhược điểm

  • Chưa hoàn toàn hoàn thiện: Hanami vẫn đang còn trong quá trình phát triển, vì vậy nên nó chưa phát triển toàn diện và hỗ trợ tốt cho người lập trình.Ví dụ như Hanami model còn thiếu nhiều chức năng cửa ActiveRecord gây trở ngại cho việc phát triển.
  • Hỗ trợ ít: cộng đồng còn quá nhỏ cũng là một trở ngại khi tìm hiểu một công nghệ mới, muốn xây dựng gì thì cũng cần phải tự mày mò rất nhiều.Nhưng ở đây nó cũng mang lại lợi ích cho người lập trình đó là : khi tự mày mò vào code base thì ta hiểu hơn về công nghệ mà mình sử dụng.

Một số tài liệu tham khảo


All Rights Reserved