2012-06-19 15 views
10

Tôi có một codebase lớn mà tôi đang làm việc mà có các đơn vị như thế này:Có công cụ hay bổ trợ nào cho Delphi mà tôi có thể sử dụng để giúp mã refactor không định hướng đối tượng không?

unit myformunit; 

interface 
type 
    TMyForm = class(Form) 
    end; 

    procedure not_a_method1; 

    procedure not_a_method2; 

    var 
    global1,global2,global3:Integer; 
    ... 

Nói tóm lại, các tác giả của mã không viết phương pháp, họ đã viết thủ tục toàn cầu. Có hàng chục ngàn người trong số họ. Bên trong các thủ tục này, họ tham chiếu một phiên bản MyForm:TMyForm.

Tôi đang xem xét viết tiện ích phân tích cú pháp/ghi đè sẽ biến mã này thành "ít nhất là mã hướng đối tượng tối thiểu". Chiến lược này là để di chuyển phần giao diện và phần thực hiện thành dạng, như là một sự khởi đầu. Tôi nhận ra đó là hầu như không thanh lịch OOP. Nhưng đó là một bước tiến từ globals.

Nếu tôi có thể thực hiện việc này trên một đơn vị tại một thời điểm, tôi có thể sửa chữa vỡ trong phần còn lại của dự án, nếu tôi chỉ thực hiện nó trên một biểu mẫu tại một thời điểm. Nhưng tôi muốn giảm lượng thời gian cần thiết để viết lại các đơn vị, thay vì thực hiện nó bằng tay. Một số biểu mẫu có hơn 500 thủ tục và hơn 500 giao diện và thực hiện các biến toàn cầu, thực tế, cụ thể cho trạng thái của một cá thể đơn lẻ của biểu mẫu mà chúng nằm trong cùng một đơn vị với.

Về cơ bản, tôi sẽ làm gì nếu không có gì như thế này tồn tại là viết một trình phân tích cú pháp dựa trên trình phân tích cú pháp Castalia Delphi. Tôi hy vọng rằng có lẽ ModelMakerCodeExplorer, hoặc castalia, hoặc một số công cụ tương tự khác có cái gì đó ít nhất sẽ làm một phần của những gì tôi cần cho tôi, vì vậy tôi không phải tự mình xây dựng tiện ích này. Ngay cả khi tôi phải tự mình xây dựng nó, tôi ước tính nó có thể tự động hóa khoảng một nghìn đến hai nghìn giờ làm việc cừ khôi cho tôi. Tôi ít nhất có thể chạy nó, và sau đó xem có bao nhiêu sự phá vỡ, và sau đó trở lại hoặc cam kết sau khi tôi đã quyết định về một mức độ nỗ lực để cấu trúc lại mã này.

Chiến lược thay thế hoàn thành cùng một mục tiêu (đi từ đóng gói bằng 0 và không OOP, để đóng gói nhiều hơn, và nhiều hơn 0 OOP, theo cách gia tăng, trên một khối mã delphi lớn không có cấu trúc chỉ sử dụng các đối tượng khi nó được không thể tránh khỏi, và không bao giờ có bất kỳ ý tưởng về OOP thực) được hoan nghênh.

+5

Có được thông qua một cái gì đó tương tự, tất cả những gì tôi có thể nói là, chúc may mắn, bạn sẽ cần đến nó. :( –

+0

Câu hỏi và kịch bản tuyệt vời, chỉ cần tôi nghĩ 1-2K giờ (khoảng 40 ngày không ngừng) có lẽ là nhiều hơn một chút so với nó có thể có thể mất.Tôi đã thực hiện * một số * pascal/dfm phân tích cú pháp trước và bên phải Tôi đang cố gắng tìm thấy những gì tôi đã sử dụng cho điều đó ngay bây giờ, nhưng tôi tin rằng nó nằm dọc theo dòng "Gold Parser" có thể có một add-on rõ ràng cho Pascal ... http: //www.goldparser.org/engine/1/delphi/index.htm –

+0

Trên thực tế, "Grammars" của chúng bao gồm một cho Delphi 7 cụ thể –

Trả lời

1

Thay đổi hình cầu để tạo thành các trường có vẻ như chỉ cần cắt và dán chúng. Bạn có thể xem xét di chuyển chúng trong một thủ tục giả và sử dụng MMX để bình thường hóa các khai báo đầu tiên.

Sau đó, sử dụng Trình tạo mã ModelMaker để di chuyển các thủ tục và chức năng vào biểu mẫu, chỉ được cắt và dán trong Chế độ xem thành viên.

Không cần thiết, nhưng là bước tiếp theo, hãy xóa các tham chiếu đến cá thể biểu mẫu khỏi các thân phương pháp. Điều này có thể đạt được bằng cách tìm và thay thế.

Hay tôi đã bỏ lỡ điều gì đó?

+0

Nó không phải là cắt và dán Tôi cần giúp đỡ với quá nhiều như tái cấu trúc mà sẽ phải xảy ra. Hãy tưởng tượng rằng 10.000 hình cầu được di chuyển từ unitnamespace.globalname thành unitnamespace.GlobalInstance.globalname. Bây giờ thực hiện chỉnh sửa đồng bộ hóa thông qua toàn bộ dự án và cập nhật tất cả các tham chiếu được sử dụng để biên dịch tốt. Nếu nhà làm mẫu MMX sẽ thực hiện một bản sửa lỗi toàn cầu về những tham chiếu toàn cục thì đó là vị cứu tinh của tôi. –

0

Các Delphi Sonar plugin (mã nguồn mở) không sửa chữa được mã nhưng có thể được sử dụng và cấu hình để tìm kiếm cho 'mã xấu':

Plugin Delphi Sonar cho phép phân tích các dự án viết bằng Delphi hoặc Pascal. Nó đã được thử nghiệm với các dự án được viết trong Delphi 6, 7, 2006 và XE. Plugin này là sự quyên góp của Saber Airline Solutions.Các thử nghiệm của nó bao gồm: Đếm các dòng mã, báo cáo, số lượng tệp, các lớp, gói, phương thức, người truy cập, API công cộng (phương pháp, lớp và trường), tỷ lệ nhận xét, CPD (sao chép mã, số dòng, khối và số lượng tệp), Độ phức tạp mã (theo phương thức, lớp, tệp; phân phối phức tạp trên phương thức, lớp và tệp), LCOM4 và RFC, báo cáo kiểm tra đơn vị, quy tắc, báo cáo phạm vi mã, mã nguồn làm nổi bật cho đơn vị kiểm tra, nhận dạng mã “Chết”, Các tệp chưa sử dụng nhận dạng.

+2

Tôi chỉ có thể báo cáo độ dài của tệp và nói "175.000 dòng trong tệp .pas, 175.000 dòng mã xấu", trong trường hợp này. :-) –