2010-06-08 25 views
8

Tôi có một lớp học di sản đó là khá phức tạp để duy trì:Tái cấu trúc. theo cách của bạn để giảm mã phức tạp của lớp lớn với các phương pháp lớn

class OldClass { 
    method1(arg1, arg2) { 
     ... 200 lines of code ... 
    } 

    method2(arg1) { 
     ... 200 lines of code ... 
    } 

    ... 

    method20(arg1, arg2, arg3) { 
     ... 200 lines of code ... 
    }  
} 

Các phương pháp là rất lớn, không có cấu trúc, và lặp đi lặp lại (nhà phát triển yêu copy/paste aprroach) . Tôi muốn chia từng phương pháp thành 3-5 chức năng nhỏ, với một phương pháp pulic và một số người trợ giúp.

Bạn sẽ đề xuất điều gì? Một số ý tưởng đến với tâm trí tôi:

  • Thêm một số phương pháp helper riêng cho từng phương pháp và tham gia cùng họ trong #region (thẳng về phía trước refactoring)

  • Sử dụng lệnh mẫu (một lớp lệnh mỗi phương pháp OldClass trong một tệp riêng biệt).

  • Tạo lớp tĩnh trợ giúp cho mỗi phương thức bằng một phương pháp công khai & một số phương thức trợ giúp riêng tư. Các phương thức OldClass ủy quyền thực thi cho lớp tĩnh thích hợp (rất giống với các lệnh).

  • ?

Cảm ơn bạn trước!

Trả lời

3

SRP - Độc responsibilty nguyên tắc và DRY - Do not Repeat mình

1

Tôi sẽ bắt đầu bằng cách tìm các bit lặp lại và trích xuất chúng thành các hàm trợ giúp. Một khi bạn đã thu hẹp mã cơ sở xuống theo cách này, bạn có thể xem xét các cách khác để cấu trúc lại, và mã sẽ dễ dàng hơn nhiều để quấn đầu của bạn xung quanh.

+0

Vâng, đó là chính xác những gì tôi đang làm ngay bây giờ :) –

0

KHÔ - Không lặp lại chính mình.

Điều đầu tiên tôi luôn làm là xóa (lặp lại) tất cả. Ngay cả một dòng duy nhất là sự lặp lại.

Điều đó sẽ bình thường hóa mã cộng với cũng cung cấp cho bạn một loạt các cải tiến, chẳng hạn như chung hóa mã.

1

Xem SD CloneDR để biết công cụ có thể cho bạn biết mã nào chặn từng phương pháp của bạn có điểm chung, bao gồm các tham số có thể có.

+0

Thật công cụ đáng tiếc không có phiên bản đánh giá cho C# :( –

+0

Có một câu hỏi tại trang web. –

0
  1. Bắt đầu bằng cách ánh xạ các chức năng hiện tại và làm cho một sơ đồ lớp UML. Bằng cách đó bạn có thể đạt được hiệu quả DRY.

  2. Thay đổi thiết kế để có hiệu quả và DRY, trong khi vẫn giữ giao diện của hệ thống của bạn nhiều như bạn có thể. Sau đó, bạn viết các bài kiểm tra đơn vị cho hệ thống mới, tốt hơn bạn nên viết chúng cho hệ thống cũ như wel, nhưng vì bạn có thể thay đổi tên và đối số của phương thức, các bài kiểm tra đơn vị có thể không hoạt động trên cả hai hệ thống.

  3. Hãy hỏi ý kiến ​​phản hồi của người quản lý của bạn về bài kiểm tra đơn vị, bạn có hiểu chức năng chính xác không?Không triển khai bất kỳ tính năng mới nào, điều này sẽ gây ra sự cố với hệ thống hiện tại bằng mã và nếu bạn nhận được thiết kế mới, hãy thêm các tính năng mới

  4. Triển khai hệ thống được phê duyệt.

  5. Sử dụng các giá trị mặc định như các đối số để giảm quá tải: SelectUser(int userId = 0) có thể được gọi với SelectUser();

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