Article:
Ruby vs. Java - Chuyện hoang đường #4: Sao chép ý tưởng hay của Rails là việc đơn giản
1264
nguoitapdich.myopenid.com 35Updated over 3 years ago |
Những người tâm huyết và cả những người chẳng ưa gì Ruby có vẻ đồng ý với nhau ở một điểm: Rails có rất nhiều ý tường hay về lập trình Web, và rất nhiều framework khác đang thay đổi để giống Rails. Nếu framework Java tôi yêu thích sẽ có tính năng giống Rails, thì tại sao tôi lại mất công tìm hiểu về Rails?
Chuyện hoang đường này hơi khó phá vỡ, vì nó đúng một phần. Có thể sao chép nhiều ý tưởng hay của Rails sang bất kì ngôn ngữ nào. Nhưng một số ý tưởng hay của Rails đòi hỏi một ngôn ngữ mở như Ruby thì mới thực hiện được - vì thế nhiều khi ý tưởng hay của Ruby lại trở thành những ý tưởng tồi khi áp dụng ở ngôn ngữ khác. Nếu bạn sao chép ý tưởng hay của Rails sang Java thì chỉ đạt chưa được một nửa giá trị. Và thậm chí nếu bạn không hiểu Ruby thì bạn không biết bạn đang thiếu cái gì. Hãy xem xét vài ví dụ.
Có thể sao chép một số ý tưởng hay của Rails sang hầu hết các framework. Ví dụ dùng qui ước thay cho cấu hình (convention over configuration). Ý tưởng này không phụ thuộc ngôn ngữ, và thật tuyệt khi thấy các framework khác theo hướng này.
Những ý tưởng hay khác phụ thuộc tính năng riêng của Ruby. Rails dùng class mở để tạo nên mô hình object tốt hơn và dễ đọc hơn. Ví dụ, có thể viết x.blank? thay vì StringUtilities.isBlank(x). 1, 2 câu lệnh thì sự khác biệt hầu như không có mấy. Nhưng đơn vị câu lại giúp dễ đọc hơn nhiều.
Ứng dụng quan trọng nữa của class mở là tạo ra ngôn ngữ đơn giản, dùng riêng cho miền vấn đề nào đó (DSL, Domain Specific Language). Khai báo quan hệ và kiểm chứng (validation) của ActiveRecord là một ví dụ.
class Poet < ActiveRecord::Base
has_many :poems
validates_presence_of :name
end
DSL thường dùng class mở 2 lần: lần đầu để tạo ra class method hợp lệ dùng khi định nghĩa class, lần hai để thêm method mới dựa vào tham số truyền cho class method. Có thể mô phỏng bằng Java annotation, nhưng tốn công hơn. Thế tốn bao nhiêu? Hãy so sánh mã nguồn phần kiểm chứng của Rails với cái tương ứng của Hibernate và Spring.
Một vài ý tưởng hay, gây tranh cãi của Rails chỉ hay trong phạm vi của Ruby, và rất dở khi áp dụng cho Java. Chẳng hạn nhiều ứng dụng web viết bằng Java phân tách bussiness logic và persistence thành các tầng rõ ràng. Đó là ý tưởng hay của Java, trong trường hợp ứng dụng phải thay đổi theo thời gian. Ứng dụng Rails có vẻ không phân tách rõ như trên, thày vào đó nhấn mạnh việc đơn giản hóa và dễ dàng phát triển ứng dụng. Đây ý tưởng hay trong phạm vi Ruby, bởi vì chẳng khó khăn gì cả khi cần thêm phân tách vào. (Tôi sẽ trình bày thêm sau trong bài viết khác.)
Cuối cùng, ý tưởng hay nhất của Rails là: ngôn ngữ mở và mềm dẻo sẽ cho phép thực hiện sáng kiến và khám phá mới cực kì nhanh chóng. Bạn định suy nghĩ bằng ngôn ngữ gì trong năm tới?
Nguồn: Ruby vs. Java Myth #4: It is easy to copy Rails' good ideas
35