2012-10-11 24 views
6

Tôi thấy rằng một số loại làm sạch mã và tái cấu trúc được thực hiện RẤT khó khăn bởi sự khó khăn của việc thêm một đơn vị vào các điều khoản sử dụng của một dự án lớn.Thêm đơn vị vào các mệnh đề sử dụng của tất cả các đơn vị trong một dự án?

Tôi muốn thêm đơn vị vào mệnh đề giao diện sử dụng của tất cả các đơn vị .pas delphi trong một dự án duy nhất và điều đó có nghĩa là thực hiện thủ công việc đó ở hơn 500 địa điểm. Mỗi lần tôi tái cấu trúc một đơn vị khổng lồ và chia nó thành một đơn vị, tôi có thể tìm kiếm và thay thế bằng cách sử dụng một cái gì đó như "notepad ++" để thay đổi "MyOldUnit" thành "MyOldUnit, MyNewUnit", nhưng đôi khi, điều đó không an toàn . Nó cũng bỏ lỡ các trường hợp mà "MyOldUnit" là điều cuối cùng trong mệnh đề uses ("sử dụng MyOldUnit;").

Dù sao, tìm kiếm và thay thế trong tệp là hoạt động kinh doanh nguy hiểm. Nếu không có công cụ như vậy tồn tại, tôi đang dự tính viết một, bằng cách sử dụng phân tích cú pháp Castalia delphi. Tôi đã kiểm tra GExperts, Castalia, ModelMakerCodeExplorer và không ai trong số họ có một cách để chèn hàng loạt các đơn vị vào tất cả các mệnh đề sử dụng trong một dự án. Tôi hy vọng một công cụ để làm điều này tồn tại. Thứ hai, trong nhiều trường hợp, tôi đang di chuyển một chức năng từ một đơn vị mà nó không thuộc về một đơn vị khác, nhưng điều này có nghĩa là tôi cần thêm đơn vị đó vào 30% đơn vị của dự án, nhưng không phải đơn vị khác 70 % nơi nó đã được thêm. Điều đó có nghĩa là một cách tiếp cận phân tích cú pháp là bắt buộc, không phải là một cách tiếp cận regex.

+2

Có (rất cũ) 'JclUsesWizard' trong JCL \ chuyên gia \ useswizard, có lẽ nó có thể phục vụ bạn như là một điểm khởi đầu. –

+0

Bạn không cần một trình phân tích cú pháp thực để làm điều này. Chỉ cần một kịch bản dựa trên regex khó chịu bằng cách sử dụng Perl hoặc Python hoặc bất cứ điều gì bạn thích cho kịch bản regex. Bạn sẽ cần một trình phân tích cú pháp thực nếu bạn muốn một cái gì đó mạnh mẽ, nhưng đối với một ứng dụng một shot đến cơ sở mã của riêng bạn, bạn không. –

+4

Bạn đã thử CnPack chưa? – kobik

Trả lời

3

Vì tất cả chúng ta viết mã chúng tôi chắc chắn sẽ sử dụng trong các dự án khác. Nếu bạn di chuyển các phần giao diện từ một đơn vị này sang đơn vị khác, bạn sẽ phá vỡ các dự án của mình. Tương tự với các đơn vị cũ và mới.

Nhưng bạn có thể cấu trúc lại mà không phá vỡ dự án của mình. Chỉ cần đánh dấu các phần (đơn vị, lớp, phương pháp, thủ tục) như không được chấp nhận. Mã của bạn đang hoạt động, nhưng bạn sẽ được trình biên dịch cảnh báo.

Dưới đây là một ví dụ về di chuyển một thủ tục từ một đơn vị khác:

unit Foo; 

interface 

procedure FooProc; deprecated; // new location in unit FooNew 

implementation 

uses 
    FooNew; 

procedure FooProc; 
begin 
    FooNew.FooProc; 
end; 

end. 
+0

Đây là một ý tưởng rất thiết thực. +1. –

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