2010-08-02 32 views
11

Điều này có vẻ như nó khá thẳng về phía trước, nhưng tôi không thể thấy bất cứ điều gì rõ ràng. Những gì tôi về cơ bản muốn làm điều đó để chỉ vào một phương thức và refactor-> extract class. Điều này sẽ đưa phương thức được đề cập đến một lớp mới với phương thức đó là API công khai cấp cao nhất. Việc tái cấu trúc cũng sẽ kéo bất kỳ phương thức và biến nào được yêu cầu cùng với nó vào lớp mới, xóa chúng khỏi lớp cũ nếu không có gì khác trong lớp cũ đang sử dụng nó.eclipse có thể chuyển đổi/refactor một phương pháp cho một lớp học?

Đây là tác vụ lặp đi lặp lại mà tôi thường gặp phải khi tái cấu trúc mã cũ. Dù sao, tôi hiện đang sử dụng Eclipse 3.0.2, nhưng vẫn sẽ được quan tâm trong câu trả lời nếu nó có sẵn trong một phiên bản mới hơn của nhật thực. Cảm ơn!

+0

Rõ ràng là không thực sự, ít nhất là không phải của 6 tháng trước - http://stackoverflow.com/questions/1806393/is-there-a-way-to-extract-a-class-with-methods-in- eclipse Xin lỗi! – Stephen

Trả lời

10

Tôi không nghĩ loại này đang tồn tại.

Bug 225716 đã đăng nhập cho loại tính năng đó (kể từ đầu năm 2008).
Bug 312347 cũng sẽ là một triển khai tốt về việc tái cấu trúc như vậy.

"Tạo lớp mới và di chuyển các trường có liên quan và phương thức từ lớp cũ sang lớp mới".

Tôi đề cập đến giải pháp thay thế trong số SO answer này.

+0

+1 để tham khảo lỗi. Hy vọng họ sẽ sớm thực hiện một trong số họ. Lỗi 312347, đặc biệt, cung cấp một đối số tốt cho tính năng này. –

1

Bạn đã thử tính năng Move của nhóm Refactor? Bạn có thể tạo một lớp học helper và di chuyển đến bất kỳ thứ gì bạn muốn.

+0

Hmm, có lẽ điều này hoạt động tốt hơn với các phiên bản sau của nhật thực, nhưng tôi chỉ nhận được các loại ngẫu nhiên có nguồn gốc từ các biến khi nhận các loại phương thức Move của tôi. Nhờ đề nghị mặc dù. –

3

Điều này có vẻ như nó nên được khá thẳng về phía trước ...

Trên thực tế, Extract Class là một trong những phép tái cấu trúc khó khăn hơn. Ngay cả trong ví dụ đơn giản của bạn về việc di chuyển một phương thức đơn lẻ và các phụ thuộc của nó, có thể có các biến chứng:

  1. Nếu phương pháp di chuyển có thể được sử dụng trong mã mà bạn không biết, bạn cần có phương pháp proxy lớp gốc sẽ ủy nhiệm (gọi) phương thức di chuyển. (Nếu ứng dụng của bạn là khép kín hoặc nếu bạn biết tất cả các khách hàng của phương thức di chuyển, thì mã tái cấu trúc có thể cập nhật mã gọi.)
  2. Nếu phương pháp di chuyển là một phần của giao diện hoặc nếu phương pháp di chuyển được thừa hưởng , sau đó bạn cũng sẽ cần phải có một "phương pháp proxy".
  3. Phương pháp của bạn có thể gọi phương thức/trường riêng tư mà một số phương thức khác gọi. Bạn cần chọn một lớp cho thành viên được gọi (có thể trong lớp sử dụng nó nhiều nhất). Bạn sẽ cần phải thay đổi quyền truy cập từ "riêng tư" sang một cái gì đó tổng quát hơn.
  4. Tùy thuộc vào số lượng lớp gốc và lớp được trích xuất cần biết về nhau, một hoặc cả hai có thể cần phải có các trường được khởi tạo từ điểm đó đến điểm khác.
  5. vv

Đây là lý do tại sao tôi khuyến khích tất cả mọi người bỏ phiếu cho lỗi 312347 để cố định.

+0

Điểm tuyệt vời. Liên quan đến các điểm 1 và 2, chúng áp dụng cho các phương thức không riêng tư, trong khi tôi chủ yếu tìm kiếm việc tái cấu trúc lớp trích xuất riêng (mà tôi mong đợi là trường hợp thông thường?). Tôi cũng đã không nghĩ đến những thách thức của việc tái cấu trúc các phương pháp riêng tư có nhiều tác dụng phụ. Đó sẽ là một con giun! –

7

Trong Eclipse 3.7.1 có một tùy chọn để di chuyển các phương thức và trường ra khỏi một lớp.Để làm như vậy:

  1. Đảm bảo lớp đích tồn tại (lớp trống là tốt, miễn là nó tồn tại trong dự án).
  2. Trong lớp nguồn, chọn các phương pháp mà bạn muốn loại bỏ (quan điểm đề cương hoạt động tuyệt vời cho việc này), nhấp chuột phải vào việc lựa chọn, và chọn Move
  3. Chọn lớp đích trong danh sách thả xuống/Duyệt

Các thành viên của bạn hiện đã được trích xuất. Khắc phục mọi sự cố hiển thị (Nguồn> Tạo Getters và Setters rất hữu ích cho việc này) và bạn đã sẵn sàng.

+0

Ngọt, tôi sẽ thử. –

Các vấn đề liên quan