Bài viết này đã được dịch sang tiếng Nga, nhờ Leonid Suschev.
Bạn vừa chuyển team, hoặc mới bắt đầu việc mới. Hoặc tìm thấy bug trong ứng dụng open-source yêu thích, muốn viết pull request đầu tiên. Nhưng sau khi git clone và mở app/models, bạn hoàn toàn lạc lối. Dù cấu trúc Rails giống y hệt những gì bạn quen, nhưng không thể tìm đường trong code. Vậy cách nhanh nhất để học ứng dụng Rails lạ này là gì?
Xây dựng từ vựng dự án
Player là gì, Session là gì? Account vs User vs Provider thì sao?
Mỗi app dùng thuật ngữ và metaphor khác nhau. Nếu không hiểu từ vựng của app, bạn sẽ lãng phí thời gian lướt app/models mỗi khi thấy tên class mới. Hoặc tệ hơn, bạn sẽ làm giả định sai về cách tính năng hoạt động.
Vì vậy, điều đầu tiên là xây dựng từ vựng đó. Hiểu app được cấu thành từ gì. Muốn nhanh, hãy bắt đầu đọc db/schema.rb. Bạn sẽ biết thuật ngữ app dùng, và cách dữ liệu liên kết. Chú ý đặc biệt các cột *_id để thấy model kết nối nhau như thế nào.
Nếu bạn tư duy hình ảnh, thử gem rails-erd. Nó sinh diagram từ model Rails, hiển thị tất cả bảng, cột và tương tác. In ra để trên bàn, bạn sẽ dễ hiểu phần còn lại của app.
Tiếp tục với models và plain Ruby objects
Trong Rails app thiết kế tốt, không phải mọi thứ đều backed bởi bảng database. Để tiếp tục xây dựng từ vựng dự án, hãy nhìn vào app/models tìm các class và attribute thêm mà không thấy trong db/schema.rb.
Đừng dành quá nhiều thời gian ở đây. Dễ bị cuốn vào chi tiết hoạt động. Bạn chỉ ở đây để bổ sung từ vựng.
Khi hiểu hơn về các thành phần cấu thành app, bạn có thể thắc mắc tại sao object nào tồn tại, hoặc tại sao chúng kết nối như vậy. Đó chính là mục đích giai đoạn tiếp theo.
Thử app, và tìm hiểu "tại sao"
Khi đã thoải mái với các object app sử dụng, hãy chạy app. Click khám phá. Nếu có tài liệu, nó hướng dẫn. Không thì chỉ xem các thuật ngữ bạn vừa học hiện lên.
Khi dùng app, bạn bắt đầu thấy nó từ góc độ cao hơn. Bạn nhận ra có lý do model có association như vậy. Tại sao chúng nhóm lại. Tại sao tên class được chọn như vậy. Có thể chúng cùng xuất hiện trên trang, hoặc được xây từ cùng form.
Khi bắt đầu hiểu các bộ phận cấu thành app và tại sao chúng tồn tại, bạn sẵn sàng tìm hiểu cách nó hoạt động.
Tìm hiểu "cách thức"
Lúc này, bạn đã biết đủ về app để học chi tiết. Bạn không bị phân tâm bởi thuật ngữ và tương tác mới. Bạn chọn một thứ muốn học, và đi sâu đến cùng.
Có nhiều cách tiếp cận. Dưới đây là vài cách tôi thích:
- Duyệt UI, và suy nghĩ: Tính năng này có thể xây như thế nào, dựa trên những gì bạn biết về các bộ phận? Bạn đoán được không? Dùng debugger để xác nhận đoán, hoặc khám phá cách thực sự hoạt động.
- Chọn một test case và theo dõi nó xuyên suốt app. Đọc code, hoặc khám phá bằng debugger.
- Chọn một route hoặc controller action. Bạn có thể tìm ra cách truy cập controller action đó từ UI không?
Đây cũng là lúc tốt để quay lại models và plain Ruby objects. Lần này bạn có thể đi sâu vào chi tiết cách model hoạt động.
Hãy tò mò về app. Tìm khoảng trống trong kiến thức và lấp đầy chúng bằng debugger và code.
Tại sao không bắt đầu từ test?
Tôi luôn nghe người ta nói, "Muốn hiểu codebase, hãy bắt đầu từ test! Test là tài liệu có thể chạy!"
Nhưng cách này chưa bao giờ hiệu quả với tôi. Test case quá hẹp, quá chi tiết. Nếu học từ test, tôi cảm thấy bỏ lỡ bức tranh lớn của app.
Để hiểu cái lớn như Rails app, hoặc hầu hết gem, tôi luôn cần cái nhìn tổng quan trước. Phải biết thành phần nào cấu thành app, và tại sao chúng tồn tại.
Tuyệt đối, hãy chắc chắn test chạy được. Nếu không chạy, bạn làm việc với hệ thống hỏng. Và không thể tin vào phát hiện từ hệ thống hỏng.
Từ "gì", đến "tại sao", đến "cách"
Để hiểu Rails app mới, hãy trải qua ba giai đoạn, theo thứ tự:
- Gì các bộ phận cấu thành app?
- Tại sao các bộ phận đó tồn tại? Tại sao chúng được gộp lại như vậy?
- Cách mỗi mảnh hoạt động như thế nào?
Điều này cho bạn cả góc nhìn rộng và kiến thức sâu cần thiết để làm chủ app mới đó.
P.S. Tôi sẽ phát hành Practicing Rails tuần sau. Nếu muốn giảm 25% early access, hãy đặt hàng sớm!