Tôi sẽ cung cấp cho bạn kinh nghiệm tái cấu trúc LedgerSMB. Chúng tôi đã đưa ra quyết định thực hiện những điều khác biệt từ sớm và vẫn đang làm chính xác những gì bạn mô tả nhưng không có nhiều phương pháp keo (chúng tôi có một vài phương pháp keo btw, chỉ là không nhiều).
Cuộc sống với hai Codebase
LedgerSMB đã tồn tại với hai cơ sở mã hóa trong khoảng 5 năm và nó sẽ còn nhiều lần nữa trước khi cơ sở mã cũ bị loại bỏ. Codebase cũ là một nỗi kinh hoàng thực sự đáng chú ý. Thiết kế db xấu, các cấu trúc Perl giống như IS->some_func(\%$some_object);
cùng với mã cho thấy chính xác lý do tại sao ẩn dụ spaghetti đôi khi được sử dụng (đường dẫn thực hiện uốn khúc giữa các mô-đun và ngược lại, và giữa các ngôn ngữ, không có vần điệu hoặc lý do). Cơ sở mã mới tránh điều này bằng cách di chuyển các truy vấn db vào các thủ tục được lưu trữ, có một khung công tác sạch hơn để xử lý yêu cầu và hơn thế nữa.
Điều đầu tiên chúng tôi quyết định làm là cố gắng cấu trúc lại mô-đun bằng mô-đun. Điều này có nghĩa là di chuyển tất cả các chức năng trong một khu vực cụ thể vào một mô-đun mới và sau đó nối mã cũ vào mô-đun mới. Nếu API mới sạch, đây không phải là vấn đề lớn. Nếu API mới không phải là thứ có nhiều lông và đó là lời mời làm việc chăm chỉ hơn một chút với API mới ....
Điều thứ hai là có rất nhiều lần mã mới phải truy cập logic trong mã cũ. Điều này cần tránh ở mức độ có thể bởi vì nó dẫn đến các phương pháp keo xấu xí nhưng người ta không thể luôn luôn tránh nó. Trong trường hợp này, các phương pháp keo nên được giảm thiểu và tránh đến mức có thể nhưng được sử dụng khi cần thiết.
Để thực hiện công việc này, bạn phải cam kết viết lại tất cả các chức năng trong một khu vực cụ thể. Ví dụ, nếu bạn có thể viết lại tất cả mã theo dõi thông tin khách hàng, điều đó có nghĩa là mã gọi mã này từ mã cũ không khó để xử lý và việc gửi đến mã cũ từ mã mới được giảm thiểu.
Điều thứ hai là nếu bạn có sự trừu tượng hợp lý ở vị trí của mình, bạn sẽ có thể chọn mức API nào sẽ gọi và cách giữ sạch sẽ. Tuy nhiên, bạn nên suy nghĩ về việc viết lại các phần đang gọi API của bạn để chúng cũng sạch hơn một chút.
Có nhiều lĩnh vực công cụ kinh doanh phức tạp không thể tưởng tượng được. Bạn không thể thoát khỏi mọi sự phức tạp. Nhưng bạn có thể quản lý nó bằng cách tập trung vào API sạch, cụ thể là những gì bạn cần làm và các mô-đun sử dụng API đó một cách xây dựng. Keo chỉ nên là giải pháp cuối cùng sau khi xem xét rằng việc viết lại phần còn lại của mã gọi có thể nhanh hơn.