Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Làm chủ các giao dịch Ruby on Rails:5 phương pháp thiết kế thiết yếu

Các vấn đề về tính toàn vẹn dữ liệu là một trong những vấn đề cơ sở dữ liệu phổ biến nhất mà các nhà phát triển Rails gặp phải. Ngoài việc cho phép xác thực hợp lệ, các khối giao dịch được thiết kế chính xác còn đảm bảo rằng dữ liệu của bạn không bị tạo hoặc cập nhật một phần.

Tuy nhiên, các giao dịch cũng có thể gây hại cho ứng dụng của bạn — hoặc thậm chí phá hủy toàn bộ cơ sở dữ liệu của bạn — khi không được thiết kế phù hợp.

Bài viết này cung cấp một tập hợp các phương pháp hay để làm việc với các giao dịch. Các mẹo này khá đơn giản nhưng sẽ giúp giao dịch của bạn trở nên dễ hiểu, dễ đọc và tương đối an toàn.

Hãy cùng đi sâu vào!

1. Sử dụng các phương thức Bang trong Rails khi có thể

Trong Rails, các phiên bản phương thức có ! có thể giúp bạn tin tưởng rằng lỗi sẽ xuất hiện khi có sự cố xảy ra.

Ví dụ:#save phương thức này cũng tồn tại trong save! phiên bản. Bạn có thể muốn sử dụng phiên bản này trong bộ điều khiển nếu bạn không muốn phát sinh bất kỳ lỗi nào:

 

Cách tiếp cận trên sẽ không hoạt động tốt trong các giao dịch. Bằng cách sử dụng save , chúng tôi không thể khôi phục quy trình khi lỗi xuất hiện. Đó là lý do tại sao việc sử dụng ! lại rất quan trọng phiên bản của phương pháp:

 

Ở trên, giao dịch thành công ngay cả khi bản ghi thành viên không được tạo và kết quả là chúng ta có cấu trúc dữ liệu lộn xộn trong cơ sở dữ liệu.

Nếu bạn sử dụng phiên bản sau, giao dịch sẽ hoàn nguyên do ActiveRecord::RecordNotSaved lỗi:

 

2. Xử lý lỗi trong giao dịch Rails đúng cách

Khi nói đến sai sót trong giao dịch, có một số quy tắc mà bạn nên tôn trọng. Bằng cách tuân theo các quy tắc này, bạn sẽ có mã dễ đọc và hoạt động tốt, không gây nhầm lẫn cho các nhà phát triển khác hoặc hành vi kỳ lạ khó gỡ lỗi.

Không giải cứu khỏi ActiveRecord::StatementInvalid

ActiveRecord::StatementInvalid là một lỗi đặc biệt được nêu ra khi có sự cố ở cấp cơ sở dữ liệu. Không bao giờ giải cứu khỏi lỗi này. Bạn phải luôn được thông báo rõ ràng khi có sự cố xảy ra với truy vấn cơ sở dữ liệu.

Tránh đoạn mã sau:

 

Sử dụng giải cứu ở cấp độ phù hợp

Nếu bạn sử dụng tính năng cứu hộ ở cấp độ sau, bạn sẽ gặp lỗi:

 

Giao dịch không được khôi phục vì bạn đã gặp lỗi. Để lỗi phát sinh và bắt lỗi bên ngoài khối giao dịch:

 

Theo cách tiếp cận trên, giao dịch sẽ quay trở lại trong trường hợp có lỗi và bạn sẽ gặp lỗi. Đây là cách tiếp cận phù hợp để phát hiện lỗi phát sinh trong giao dịch mà không ghi đè hành vi giao dịch.

Không bắt lỗi chung

Bạn nên tránh mắc các lỗi chung chung như StandardError hoặc ArgumentError . Đây giống như một quy tắc chung cho mã dễ đọc và dễ kiểm tra hơn, nhưng nó đáng được đề cập.

Việc phát hiện những lỗi này có thể khiến việc gỡ lỗi trở nên khó khăn hơn vì những vị trí khác trong mã có thể gây ra lỗi. Điều này có thể làm im lặng một số vấn đề nghiêm trọng trong ứng dụng của bạn mà không nhất thiết liên quan đến nơi bạn giải quyết chúng.

Sử dụng lỗi khôi phục mặc định của ActiveRecord một cách khôn ngoan

ActiveRecord cung cấp một lớp lỗi cụ thể mà bạn có thể sử dụng trong giao dịch để thực hiện khôi phục im lặng. Bạn khôi phục giao dịch bằng cách tăng ActiveRecord::Rollback lỗi, nhưng lỗi không xuất hiện bên ngoài, như xảy ra với các lỗi khác. Hãy ghi nhớ hành vi này và sử dụng nó một cách khôn ngoan.

3. Biết khi nào nên tránh sử dụng giao dịch trong Rails

Như với bất kỳ điều gì, bạn không nên lạm dụng các giao dịch trong mã của mình. Ví dụ:một lỗi phổ biến là chỉ đưa một truy vấn vào giao dịch của bạn. Điều này vô nghĩa vì nếu truy vấn không thành công thì không cần phải khôi phục bất cứ điều gì.

Một lỗi phổ biến khác là bọc mã không liên quan đến lệnh gọi cơ sở dữ liệu của bạn vào một giao dịch. Bạn nên tránh cách tiếp cận như vậy vì giao dịch sẽ giữ kết nối trừ khi mã bên trong khối thực thi. Giới hạn mã bên trong khối để chỉ gọi cơ sở dữ liệu của bạn, nếu có thể.

4. Hiểu được nhược điểm của giao dịch

Giao dịch giúp duy trì tính toàn vẹn dữ liệu bên trong cơ sở dữ liệu, nhưng bạn cũng nên lưu ý những nhược điểm của chúng. Ví dụ:các truy vấn được bao bọc trong một khối giao dịch sẽ chiếm nhiều tài nguyên DB hơn các truy vấn đơn lẻ.

Một nhược điểm khác của việc sử dụng giao dịch là nó dẫn đến mã phức tạp hơn. Các giao dịch có thể làm cho mã của bạn khó đọc hơn khi sử dụng không đúng cách.

5. Sử dụng Khối giao dịch trong bối cảnh phù hợp

Bạn có thể sử dụng phương thức giao dịch khi một lớp kế thừa từ ActiveRecord lớp học. Điều này không có nghĩa là phiên bản bạn sử dụng không quan trọng. Mặc dù nó có thể không quan trọng từ góc độ chức năng, nhưng nó quan trọng ở việc đảm bảo mã của bạn có thể đọc được.

Ba phiên bản phổ biến sử dụng phương thức giao dịch:

 

Khi bạn sử dụng nhiều mô hình và kết hợp các lệnh gọi phương thức phiên bản với các lớp bên trong một khối, bạn nên sử dụng ActiveRecord::Base.transaction :

 

Nếu bạn chủ yếu xử lý mã thuộc về một mô hình nhất định, hãy gọi phương thức giao dịch trên một lớp:

 

Khi bạn thao tác trên một phiên bản mô hình, việc gọi phương thức giao dịch ở cấp phiên bản là điều hợp lý:

 

Tất nhiên, những quy tắc này không phải là chính thức. Chúng chỉ là những gợi ý để làm cho mã dễ đọc hơn.

Các bước tiếp theo:Xem lại các giao dịch trong Dự án Ruby on Rails của bạn

Tôi hy vọng bạn thấy những mẹo này hữu ích khi làm việc với các giao dịch trong Ruby on Rails.

Chúng tôi đã đề cập đến tầm quan trọng của việc thiết kế các giao dịch Rails đúng cách để cải thiện tính toàn vẹn của dữ liệu và đảm bảo rằng các quy trình của bạn hoạt động mà không có tác dụng phụ đáng ngạc nhiên.

Tuy nhiên, chính sách xử lý lỗi thích hợp không chỉ có lợi khi sử dụng giao dịch — nó còn sẽ cải thiện toàn bộ cơ sở mã của bạn. Hãy ghi nhớ điều đó vào lần tới khi bạn dự đoán mã của mình sẽ mắc một số lỗi.

Bây giờ là thời điểm tuyệt vời để xem lại các giao dịch trong thiết kế dự án Ruby on Rails của bạn để tránh lỗi. Thiết kế để giao tiếp hiệu quả và đáng tin cậy với cơ sở dữ liệu của bạn nhằm giúp ứng dụng của bạn ổn định hơn.

Chúc bạn viết mã vui vẻ!

Tái bút. Nếu bạn muốn đọc các bài đăng của Ruby Magic ngay khi chúng được đăng tải, hãy đăng ký nhận bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ một bài đăng nào!

Làm chủ các giao dịch Ruby on Rails:5 phương pháp thiết kế thiết yếu

Paweł Dąbrowski

Tác giả khách mời Paweł của chúng tôi là một người hâm mộ mã nguồn mở và là người tìm kiếm sự phát triển với hơn một thập kỷ kinh nghiệm viết cho cả con người và máy tính. Anh kết nối các dấu chấm để tạo ra phần mềm chất lượng cao và xây dựng mối quan hệ có giá trị với mọi người và doanh nghiệp.

Tất cả bài viết của Paweł Dąbrowski