Tôi thường trải qua một vài bước với vấn đề này, dừng lại khi không thể tìm ra cách đi xa hơn.
Đầu tiên, làm những gì bạn đã làm. Đi khó với DRY. Nếu bạn không kết thúc với một mớ lông lớn, bạn đã hoàn thành. Nếu, như trong trường hợp của bạn, bạn không có mã trùng lặp nhưng mỗi boolean có giá trị được kiểm tra ở 20 vị trí khác nhau, hãy chuyển sang bước tiếp theo.
Thứ hai, chia mã thành các khối. Các booleans mỗi tham chiếu chỉ một lần (tốt, đôi khi có thể hai lần) để thực hiện trực tiếp đến khối bên phải. Với hai booleans, bạn kết thúc với bốn khối. Mỗi khối gần như giống hệt nhau. DRY đã biến mất Đừng biến mỗi khối thành một phương thức riêng biệt. Điều đó sẽ thanh lịch hơn, nhưng đặt tất cả mã vào một phương thức sẽ giúp dễ dàng hơn, hoặc thậm chí có thể, cho bất kỳ ai đang bảo trì để thấy rằng họ phải thực hiện mỗi thay đổi ở bốn nơi. Với mã được tổ chức tốt và một màn hình cao, sự khác biệt và sai lầm sẽ gần như rõ ràng. Bây giờ bạn có mã duy trì và nó sẽ chạy nhanh hơn mớ hỗn độn ban đầu.
Thứ ba, cố gắng lấy các dòng mã trùng lặp từ mỗi khối của bạn và biến chúng thành các phương thức đơn giản, đẹp mắt. Đôi khi bạn không thể làm gì. Đôi khi bạn không thể làm gì nhiều. Nhưng mỗi một chút bạn làm sẽ đưa bạn trở lại DRY và làm cho mã dễ theo dõi hơn một chút và an toàn hơn để duy trì. Lý tưởng nhất là phương pháp ban đầu của bạn có thể không có mã trùng lặp. Tại thời điểm đó, bạn có thể muốn chia nó thành nhiều phương thức mà không có các tham số boolean hoặc bạn có thể không. Sự tiện lợi của mã gọi hiện đang là mối quan tâm chính.
Tôi đã thêm câu trả lời của mình vào số lượng lớn đã có ở đây vì bước thứ hai. Tôi ghét mã trùng lặp, nhưng nếu đó là cách dễ hiểu duy nhất để giải quyết vấn đề, hãy thực hiện theo cách mà bất kỳ ai cũng sẽ biết trong nháy mắt những gì bạn đang làm. Sử dụng nhiều khối và chỉ một phương thức. Làm cho các khối giống hệt nhau nhất có thể trong tên, khoảng cách, sắp xếp, ... tất cả mọi thứ. Sự khác biệt sau đó nên nhảy ra ở người đọc. Nó có thể làm cho nó rõ ràng làm thế nào để viết lại nó theo cách DRY, và nếu không, việc duy trì nó sẽ đơn giản hợp lý.
createTrajectory...
hàm công khai khác nhau đều gọi không?