CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này PHP Talk "Refactoring - Cải tiến thiết kế mã hiện có" Phần 2 nêu bật các tính năng di chuyển giữa các đối tượng được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
bản đồ tư duy

chỉ số:
Ø Phương pháp di chuyển(Chức năng di chuyển)
Ø Di chuyển trường (Phạm vi di chuyển)
Ø Trích xuất lớp (loại tinh tế)
Ø Lớp nội tuyến (Nội tuyến một lớp có nghĩa là sáp nhập lớp hiện tại vào các lớp khác)
Ø Ẩn đại biểu (ẩn mối quan hệ ủy quyền)
Ø Xóa bỏ người trung gian (loại bỏ người trung gian)
Ø Giới thiệu phương pháp nước ngoài (Giới thiệu các chức năng bổ sung)
Ø Giới thiệu Mở rộng địa phương (Giới thiệu tiện ích mở rộng cục bộ)
giới thiệu
Sau cuộc trò chuyện PHP ở trên "Tái cấu trúc - Cải thiện thiết kế mã hiện có" để sắp xếp lại các chức năng của bạn, chúng ta sẽ tiếp tục nói về việc tái cấu trúc.
Thuật ngữ chuyên môn
đại biểu:đại biểu
đóng gói: đóng gói
giới thiệu: giới thiệu
bao bọc: bìa
Lời nói đầu
"Quyết định đặt trách nhiệm ở đâu" - Sử dụng refactoring để thay đổi thiết kế ban đầu.

giải thích:
1. Lớp đảm nhiệm quá nhiều và cồng kềnh - Lớp trích xuất phân tách một số trách nhiệm.
2. Lớp không còn đủ trách nhiệm và không còn lý do để tồn tại một mình - Lớp nội tuyến tích hợp nó vào Lớp khác.
3. Lớp sử dụng Lớp khác - Ẩn đại biểu để ẩn mối quan hệ.
4. Theo (3), nếu Client gọi nhiều chức năng của Delegate Class thông qua Middle Man (ở đây chỉ là một cuộc gọi đơn giản, chỉ nhảy, và Middle Man không làm nhiều nghiệp vụ logic, chẳng hạn như các Method tương ứng trong 10 Lớp đại biểu) 10 Phương thức người trung gian) - Loại bỏ Người trung gian, sử dụng trực tiếp Lớp đại biểu và bạn có thể sử dụng một phần Phương thức đại biểu.
。
Phương pháp di chuyển
Nếu một phương thức trong một lớp giao tiếp nhiều với lớp khác thì chúng ta
Tạo một hàm mới có chức năng tương tự trong một lớp khác, biến hàm cũ thành Phương thức ủy quyền đơn giản hoặc loại bỏ hàm cũ.



。
Sơ đồ lớp

。
động lực:
1. Nếu một lớp có tính kết hợp cao với lớp khác, tôi sẽ Move Method. --Class đơn giản và sạch sẽ hơn để thực hiện các nhiệm vụ do hệ thống giao.
2. Để di chuyển một số phạm vi giá trị, bạn cần kiểm tra xem số lần sử dụng lớp khác có lớn hơn số lần đối tượng thường trú được sử dụng hay không.
Di chuyển trường
Tình huống: Các trường trong lớp của bạn được lớp khác sử dụng nhiều hơn. Sau đó tạo trường mới trong lớp khác và sửa đổi trường cũ.
Trích xuất lớp
Tình huống: Một lớp thực hiện những gì hai lớp làm, sau đó tạo Lớp mới và chuyển Trường và Phương thức liên quan từ Lớp cũ sang Lớp mới.
。

。
Lớp nội tuyến
Tình huống: Một trong các Lớp của bạn không làm gì nhiều (không đảm nhận đủ trách nhiệm), sau đó chuyển toàn bộ đặc tính của Lớp này sang Lớp khác, sau đó loại bỏ Lớp ban đầu.
Động lực: Lớp nội tuyến đối lập với Lớp trích xuất. --Đảo ngược ví dụ về Lớp trích xuất, vì Số điện thoại chỉ được sử dụng để đọc mã và số.
Tình huống: Khách hàng gọi trực tiếp Phương thức của Lớp đại biểu của Đối tượng máy chủ, sau đó tạo Phương thức hàm mà khách hàng yêu cầu ở phía máy chủ để ẩn mối quan hệ ủy quyền.
Bất cứ ai đã nghiên cứu công nghệ đối tượng đều biết rằng mặc dù PHP cho phép bạn khai báo các trường là công khai nhưng bạn cũng nên ẩn các trường (riêng tư). Khi kinh nghiệm phát triển, có nhiều thứ hơn để gói gọn.
Hãy xem xét ví dụ sau:
$person->getDepartment()->getManager() hiển nhiên tiết lộ rằng nếu muốn tìm ra thủ lĩnh của Xiaocai thì phải thông qua sở, vì vậy việc chúng ta phải làm là giấu sở. --Có thể giảm khớp nối.

。
Loại bỏ người trung gian
Tình huống: Nếu một Lớp thực hiện quá nhiều Đại biểu đơn giản thì chúng ta gọi trực tiếp Lớp đại biểu đó.
Động lực: Trong ví dụ về Ẩn Đại biểu, khi Phòng có thêm các phương thức mới, để Ẩn Đại biểu, chúng ta phải thêm các phương thức tương ứng vào Người để Đại biểu sử dụng. Lúc này Người đã hoàn toàn biến thành Người trung gian. Lúc này chúng ta nên gọi trực tiếp cho Phòng cấp ủy.
Mục đích của việc tái cấu trúc là: bạn không bao giờ phải nói lời xin lỗi, miễn là bạn khắc phục được vấn đề.

。
Giới thiệu phương pháp nước ngoài
Tình huống: Có một hàm bổ sung trong lớp PreviousEnd mà lớp Client cần sử dụng, nhưng bạn không thể sửa đổi lớp PreviousEnd này, do đó bạn tạo một hàm trong Client và lấy thực thể PreviousEnd làm tham số.


。
Giới thiệu phần mở rộng cục bộ
Tình huống: Lớp của bạn cần bổ sung thêm một số hàm, nhưng bạn không thể sửa đổi lớp hiện tại, sau đó tạo Lớp mới để nó chứa các hàm này. Sử dụng Lớp con hoặc Trình bao bọc. --Điều này thường được sử dụng khi bạn không thể sửa đổi mã nguồn.
Lấy ví dụ về Giới thiệu Phương pháp Nước ngoài ở trên.
Sử dụng phương thức lớp con

Hoặc sử dụng Trình bao bọc
Tóm tắt.
Cần lưu ý rằng "Trích xuất lớp" và "Lớp nội tuyến", "Ẩn đại biểu" và "Xóa người trung gian" đều là các quy trình ngược nhau, bạn có thể xem biểu đồ quy trình ở phần mở đầu.
"Ẩn đại biểu" thường được sử dụng khi sử dụng một số lượng nhỏ "Phương thức đại biểu" và "Xóa người trung gian" được sử dụng khi gọi nhiều "Phương thức đại biểu". Chúng ta có thể trực tiếp sử dụng Lớp đại biểu để gọi và một số Phương thức đại biểu mà chúng tôi bảo lưu. một phần cho phù hợp.
"Lớp trích xuất" và "Lớp nội tuyến", "Lớp trích xuất" thường được sử dụng trong các Lớp đảm nhận quá nhiều trách nhiệm và trở nên cồng kềnh, trong khi "Lớp nội tuyến" thường được sử dụng khi lớp hiện tại được sử dụng "quá vô trách nhiệm". ---Cá nhân tôi thích "Trích xuất lớp" hơn là "Lớp nội tuyến".
。
Cuối cùng, bài viết về các tính năng di chuyển giữa các đối tượng trong Phần 2 của Thảo luận PHP "Tái cấu trúc - Cải thiện thiết kế mã hiện có" kết thúc tại đây. Nếu bạn muốn biết thêm về Thảo luận PHP "Tái cấu trúc - Cải thiện thiết kế mã hiện có" cho nội dung “Thiết kế” Phần 2, đặc điểm chuyển giao giữa các đối tượng, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Mong các bạn sẽ ủng hộ blog của mình trong thời gian tới! .
Tôi là một lập trình viên xuất sắc, rất giỏi!