Computer >> Máy Tính >  >> Lập trình >> Ruby

Tôi đã làm khô mã của mình và bây giờ nó khó làm việc với nó. Chuyện gì đã xảy ra?

“Đừng lặp lại chính mình” là một trong những ý tưởng có giá trị nhất từ ​​một trong những cuốn sách giá trị nhất mà tôi đã đọc trong sự nghiệp phát triển phần mềm của mình. Nếu bạn có thể cấu trúc lại mã trùng lặp, bạn sẽ tạo ra mã tổng quát hơn, ổn định hơn. Tuy nhiên, khi bắt đầu nhập mã KHÔ, bạn sẽ bắt đầu gặp phải một số vấn đề:mã không xử lý tốt các trường hợp phức tạp, mã quá tổng quát và khó đọc hoặc mã khó tìm. Nếu việc tái cấu trúc theo hướng KHÔ không hoạt động liên tục, làm cách nào để bạn biết khi nào bạn nên cấu trúc lại?

Mã quá KHÔ xuất phát từ sự hiểu lầm về loại trùng lặp mà bạn nên cố gắng cấu trúc lại. Bạn cần xác định được sự khác biệt giữa thiết yếu trùng lặp và tình cờ sao chép.

Cần thiết trùng lặp là mã giải quyết lớp vấn đề mà bạn đang giải quyết. Đây là loại trùng lặp mà bạn nên loại bỏ ngay lập tức.

Tình cờ Tuy nhiên, trùng lặp là sự trùng lặp không liên quan đến vấn đề hiện tại, "trùng lặp do trùng hợp". Nếu bạn dọn dẹp trùng lặp ngẫu nhiên quá mạnh tay, bạn sẽ nhận được nhiều mã giòn hơn phải được hủy cấu trúc lại khi thêm các trường hợp mới.

Nhưng làm thế nào bạn có thể nhận ra sự khác biệt? Với kinh nghiệm, bạn có thể làm tốt hơn điều này, nhưng ngay cả sau nhiều thập kỷ lập trình, tôi vẫn không thể làm điều này ngay cả một nửa thời gian. May mắn thay, có một quy tắc chung hữu ích rất nhiều:Three Strikes và You Refactor.

Lần đầu tiên bạn làm điều gì đó, bạn chỉ cần làm điều đó.

Lần thứ hai khi bạn làm điều gì đó tương tự, bạn sẽ nhăn mặt vì sự trùng lặp, nhưng bạn vẫn thực hiện điều trùng lặp.

Lần thứ ba bạn làm điều gì đó tương tự, bạn tái cấu trúc.

Bạn có thể thấy lý do tại sao điều này giúp ích? Đến lần thứ ba, bạn nên bắt đầu xem các mẫu ở đâu. Bạn nên có ý tưởng về mã trùng lặp nào là cần thiết để giải quyết vấn đề của bạn và mã nào trông giống nhau một cách trùng hợp. Bạn có thể bắt đầu khái quát hóa (và KHÔ) chỉ mã về cơ bản giống nhau trong tất cả các trường hợp của vấn đề mà bạn đang cố gắng giải quyết.

Hãy dành một chút thời gian và nghĩ về lần cuối cùng việc tái cấu trúc lại khiến bạn đau đớn. Có phải bạn đang cố gắng KHÔ thứ gì đó được sao chép giữa hai bản sao của sự cố, nhưng bản sao thứ ba chỉ khác một chút?

Và lần tới khi bạn cảm thấy phải sao chép mã nào đó, hãy thử đợi cho đến bản sao thứ ba trước khi bạn cấu trúc lại. (Nó thực sự khó và cảm thấy khủng khiếp, nhưng hãy nhắm mắt lại và thử nó). Sau đó, hãy nghĩ về nó khi bạn KHÔ mã. Bạn có tái cấu trúc khác với bạn sẽ cấu trúc lại ngay sau khi viết bản sao thứ hai không?