12/08/2018, 15:33

Refactoring - How to do with Large Class?

Như phần trước tôi đã trình bày Refactoring là gì, các khái niệm liên quan và khi nào cần phải Refactoring. Trong bài viết này tôi sẽ trình bày các phương pháp có thể áp dụng để refactor. Tôi sẽ trình bày trong phần này những thứ mà khiến cho code trở nên không được clean và các phương pháp mà ...

Như phần trước tôi đã trình bày Refactoring là gì, các khái niệm liên quan và khi nào cần phải Refactoring. Trong bài viết này tôi sẽ trình bày các phương pháp có thể áp dụng để refactor.

Tôi sẽ trình bày trong phần này những thứ mà khiến cho code trở nên không được clean và các phương pháp mà chúng ta làm để loại bỏ chúng. Trước tiên tôi sẽ trình bày về Bloaters.

Bloaters (tạm dịch là những thứ cồng kềnh) là những đoạn code, các phương thức và lớp mà được tăng lên, dài ra và làm cho đoạn code trở nên khó hiểu, khó sử dụng lại. Thông thường, những cái này không xuất hiện ngay lập tức mà nó tích lũy theo thời gian trong quá trình phát triển phần mềm, khi nhiều người cùng thêm vào nhưng không ai cố refactor chúng.

Dấu hiệu và triệu chứng

Một class mà chứng nhiều trường/phương thức hay quá nhiều dòng code.

Lý do

Các class bắt đầu thì thường nhỏ, không có vấn đề gì. Nhưng theo thời gian, chúng trở nên cồng kềnh cùng với sự phát triển của phần mềm.

Cũng giống như vấn đề về Long Methods, các lập trình viên thường nghĩ rằng cái giá, công sức bỏ ra cho việc thêm tính năng (thêm code) mới cho class hiện tại ít hơn là việc tạo ra một lớp mới cho tính năng đó, đương nhiên là nó đúng trong một số trường hợp.

Xử lý

Khi một class chứa quá nhiều chức năng, hãy nghĩ đến việc chia nhỏ nó ra:

Extract Class

Phương pháp này có thể giúp khi mà một phần hành vi của class có thể được tách nhỏ ra thành một thành phần riêng biệt. Problem Khi một class làm công việc đáng nhẽ ra là của lớp khác. Solution Thay vào đó, ta tạo một class mới và thêm vào những chức năng, thuộc tính liên quan đến chức năng của lớp đó. How to do it? Trước khi ta bắt đầu tiến hành tách class, hãy quyết định chính xác cách bạn muốn chia nhỏ chức năng của lớp.

  • Tạo một lớp mới chứa những chức năng có liên quan.
  • Tạo quan hệ giữa class cũ và class vừa mới tạo. Thường thường, quan hệ này là một chiều, tức là việc tái sự dụng class thứ hai không có bất cứ vấn đề gì mà ảnh hưởng đến class ban đầu. Tuy nhiên nếu bạn nghĩ việc tạo một quan hệ hai chiều là thực sự cần thiết, just do it             </div>
            
            <div class=
0