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!