SSS Backend Sharing 23.06.2015

Backend Sharing 23.06.2015

Chủ đề Backend Sharing tuần này:

  1. Khái quát Go
  2. Cách thức hoạt động của Arel trong ActiveRecord
  3. Ruby Object Mapper (ROM)
  4. Encapsulation

1. Khái quát Go

Speaker: Đình Khôi

  • Go là ngôn ngữ concurrency và parallelism:
  • Go scalable.
  • Benchmark khi truy vấn dữ liệu từ database có tốc độ vào khoảng 200 microseconds.
  • Syntax Go hơi phức tạp củ chuối hơn Ruby :))
  • Code của go khi chạy phải compile
  • Khi chương trình đang chạy, có thể thay đổi code của chương trình. Sau khi lưu code thì chương trình sẽ tự động chạy với code đã thay đổi.
  • Một số thư viện ORM của Go là Gorm, Gorp
  • Một số framework của Go là Revel, Martini, Gorilla

Bài viết, liên kết tham khảo thêm:

2. Cách thức hoạt động của Arel trong ActiveRecord

Speaker: Đức Vinh

  • ActiveRecord sử dụng Arel để tạo ra các truy vấn (queries) và nhận lấy đoạn truy vấn SQL cuối cùng.
  • Để thực hiện được việc đó, Arel đầu tiên tạo ra một Abstract Syntax Tree (AST), sau đó Arel hoạt động dựa trên AST này.
  • Bằng việc đi qua từng node của AST mà Arel tạo ra truy vấn SQL cuối cùng.
  • Để tạo ra được đoạn truy vấn SQL, Arel sử dụng Visitor Patterns.
  • Tùy vào loại database khác nhau mà có các visitor khác nhau để tạo ra truy vấn thích hợp.

Bài viết, liên kết tham khảo thêm:

3. Ruby Object Mapper (ROM)

Speaker: Minh Hòa, Anh Duy

So sánh giữa ActiveRecord và ROM:

  • ActiveRecord: Đối tượng  (object) truy vấn dữ liệu đi cùng với CRUD. Các đối tượng này chính là model trong ứng dụng Rails.
    • Pros: Dễ sử dụng, mọi thứ đều đặt chung một chỗ (all in one place).
    • Cons: không tuân thủ SRP (Single Responsibility Principle), khó khăn để maintain và test khi app bắt đầu lớn hơn.
  • ROM: đối tượng truy vấn dữ liệu sẽ được tách riêng với các phương thức CRUD.
    • Pros: Business Logic được tách riêng ra, đảm bảo tính nhất quán và độc lập.
    • Cons: vẫn còn đang trong giai đoạn phát triển, do ROM tách model và phương thức ra các thư mục và file riêng rẽ nên sẽ dẫn đến việc khó kiểm soát khi số lượng file/folder nhiều lên.

Một cách giải thích khác về ROM và ActiveRecord, cho đối tượng dữ liệu User:

romar

ROM giúp Business logic ít phụ thuộc vào User Mapper và User Relation nhất.

Bài viết, liên kết tham khảo thêm:

4. Encapsulation

Speaker: Anh Duy

Bạn có biết sự khác nhau giữa:

Để giải thích được câu hỏi này, bạn hãy xem ví dụ sau:

Với phương thức User.wallet.add(money) thì ta phải thể hiện đối tượng wallet ra để thêm money vào. Trong khi đó, ta chưa biết người dùng sẽ muốn bỏ money này vào đâu. Ngoài ra, phương thức này làm đối tượng wallet “lộ” ra bên ngoài.

Phương thức User.add_money(money) thì đảm bảo tính encapsulation. Số tiền được thêm vào phụ thuộc vào user, user có thể cho nó vào wallet, bank, tiết kiệm…

Phương thức bên dưới sẽ giúp cho code dễ quản lý hơn khi chúng ta  sửa đổi gì đó bên trong đối tượng friends, vì ta chỉ cần thay đổi hàm add_friend để xử lý sự thay đổi đó.

Bài viết, liên kết tham khảo thêm:

Tổng kết

Sau buổi chia sẻ này, chúng ta biết được thêm thông tin khái quát về Go, cách Arel làm việc phía sau ActiveRecord để đưa ra các truy vấn dữ liệu, Ruby Object Mapper – công cụ có thể dùng để thay thế cho ActiveRecord và tính đóng gói (encapsulation) khi làm việc với dữ liệu. Nếu bạn cũng quan tâm về những chia sẻ trên, hãy tham gia đặt câu hỏi và thảo luận ở bên dưới cùng tụi mình nhé.

SSS Full-stack Engineer

Love Silicon Straits and want to know more about our company culture, working environment or job vacancies?
Find out more at careers.siliconstraits.vn.

Silicon Straits
Be Challenged. Be Inspired. Be Different.




Posted by

on June 29, 2015

in , ,

Comments

Follow us for more later

or subscribe with