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.
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ó. :( –
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 –
Trên thực tế, "Grammars" của chúng bao gồm một cho Delphi 7 cụ thể –