12/08/2018, 17:16

Làm thế nào để Refactor code Ruby on Rails đúng nhất

Việc tái cấu trúc mã của bạn không kém phần quan trọng so với việc viết ra chính nó. Và viết về Ruby on Rails không là ngoại lệ ở đây, mặc dù bạn có thể đối mặt với một số thách thức cho việc bổ sung ở đây. Hôm nay chúng tôi sẽ giới thiệu cách refactor đúng, nếu bạn sử dụng Ruby on Rails cho dự án ...

Việc tái cấu trúc mã của bạn không kém phần quan trọng so với việc viết ra chính nó. Và viết về Ruby on Rails không là ngoại lệ ở đây, mặc dù bạn có thể đối mặt với một số thách thức cho việc bổ sung ở đây. Hôm nay chúng tôi sẽ giới thiệu cách refactor đúng, nếu bạn sử dụng Ruby on Rails cho dự án của mình.

Vậy, những gì về refactoring Ruby on Rails là thách thức?

Tái cấu trúc lại rất quan trọng cho các doanh nghiệp phát triển và sự thoải mái cá nhân bạn với tư cách là một nhà phát triển. Chúng ta đã nói về tất cả các lý do tại sao refactoring là điều cần thiết, nhưng bây giờ là lúc để biết làm sao để thực hiện công việc đó.

Ruby on Rails được biết đến không phải là sự lựa chọn dễ dàng nhất cho tái cấu trúc. Có vài lý do cho điều đó.

Một vấn đề là ứng dụng Ruby on Rails không phải là quá tốt để mở rộng quy mô. Phù hợp nhất cho loại ứng dụng CRUD hoặc ứng dụng với logic kinh doanh đơn giản. Nếu bạn từng nghe nói về một ứng dụng lớn được viết bằng Ruby on Rails, thì xác suất cao nhất là logic của nó khá đơn giản. Những khác biệt khác là các nhà phát triển đã nỗ lực rất lớn để làm cho mọi việc trở nên đúng và đơn gianr hơn.

Một vấn đề khác là mặc dù có một số đá quý sẽ giúp bạn tự động tái cấu trúc một chút, tất cả những thay đổi nhỏ này vẫn chưa đủ. Và hãy nhớ rằng mã Ruby on Rails không phải là dễ dàng để refactor, trước khi bạn bắt đầu bạn cần phải phát triển một kế hoạch tốt của tất cả các thay đổi được giới thiệu.

Để ngăn bạn khỏi hoảng sợ và cổ vũ bạn một chút, chúng tôi đã thu thập được một loạt mẹo, làm thế nào để đạt được thành công trong việc tái cấu trúc mã Ruby on Rails.

Kiểm soát bộ điều khiển của bạn

Bộ điều khiển là một thứ mà tạo hóa ban phước cho nhà phát triển Ruby on Rails: nó sắp xếp các mô hình của bạn, theo dõi các tham số yêu cầu HTTP và làm nhiều công cụ hữu ích khác. Thật dễ dàng để rơi vào sự cám dỗ ở đây và sắp xếp tất cả các logic sản phẩm của bạn trong dự án. Điều tốt nhất bạn có thể làm ở đây là để thoát khỏi sự ghép nối này. Có logic sản phẩm của bạn phải tách nhỏ ra để giữ cho ứng dụng cân bằng. Thoát ra khỏi các phần hỗ trợ của một vài gem làm cho mọi thứ hoạt động theo cách riêng của bạn. Để đạt được hình thức này và các đối tượng dịch vụ cần phải được hiểu và mở rộng.

Cách sử dụng đối tượng Biểu mẫu

Loại vật thể này được sử dụng để làm cho vòng đời của bộ điều khiển dễ dàng hơn và có trách nhiệm xử lý params ra khỏi nó. Tạo đối tượng dạng cơ bản có nghĩa là thực hiện việc ép buộc kiểu thích hợp và giới thiệu các xác nhận đơn giản.

Để sử dụng một đối tượng form đơn giản chỉ cần gói các đối tượng params từ bộ điều khiển với nó:

class SubmitArticleForm
include ActiveRecord::Validations
include Virtus.model
 
attribute :title, String
attribute :content, String
 
validates :title, :content, presence: true
validates :title, length: { minimum: 5 }
 
def persisted?
false
end
 
def validate!
raise ValidationError.new(errors: errors) unless valid?
end
end

Sau đó bạn có thể sử dụng nó trong bộ điều khiển:

class ArticlesController < ApplicationController
def create
form = SubmitArticleForm.new(params[:article])
form.validate! # your logic here.
rescue ValidationError => err
# …
end
end

Có vẻ khá hữu ích, phải không? Nhưng bạn có thể thực hiện một bước chuyển tiếp và refactor mã của bạn thậm chí tốt hơn bằng cách sử dụng các đối tượng dịch vụ.

Cách sử dụng các đối tượng Dịch vụ

Các đối tượng dịch vụ chỉ sử dụng là trích xuất logic nghiệp vụ từ bộ điều khiển. Không có công nghệ bổ sung yêu cầu ở đây - chúng là các đối tượng Ruby cũ.

class SubmitArticle
def initialize(article_mailer)
@article_mailer = article_mailer
end
 
def call(form)
Article.create!(form.attributes).tap do |article|
article_mailer.published_article_mail(article).deliver_later
end
end
 
private
 
attr_reader :article_mailer
end

Sau khi bạn có chúng, bạn có thể thay thế trong hành vi điều khiển như thế này:

class ArticlesController < ApplicationController
def create
form = SubmitArticleForm.new(params[:article])
form.validate!
@article = Article.create!(form.attributes)
ArticleMailer.published_article_mail(article).deliver_later
end
end

Với cái này:

class ArticlesController < ApplicationController
def create
form = SubmitArticleForm.new(params[:article])
submit_article = SubmitArticle.new(ArticleMailer)
@article = submit_article.(form)
end
end

Kể từ khi SubmitArticle là một đối tượng đơn giản, bạn có thể dễ dàng thêm các thuộc tính, điều này rất lý tưởng cho việc kiểm tra.

Sau hai mẫu này mô tả ở trên, bạn có thể đi dặm với refactoring bạn Ruby on Rails đang. Và các mẫu và hacks bạn đang sử dụng? Chia sẻ với chúng tôi trong các ý kiến!

0