Giới thiệu sớm sự phức tạp bằng cách thực hiện các mẫu thiết kế trước khi chúng là cần thiết không phải là thực hành tốt.
Nhưng nếu bạn tuân theo tất cả (hoặc thậm chí hầu hết) các nguyên tắc RẮN và sử dụng các mẫu thiết kế chung, bạn sẽ đưa ra một số phức tạp vì các tính năng và yêu cầu được thêm hoặc thay đổi để giữ cho thiết kế của bạn duy trì và linh hoạt khi cần.
Tuy nhiên, một khi sự phức tạp đó được giới thiệu và hoạt động như một nhà vô địch khi bạn loại bỏ nó?
Thí dụ. Tôi có một ứng dụng được viết cho một khách hàng. Khi ban đầu được tạo ra ở đó một số cách để tăng lương cho nhân viên. Tôi đã sử dụng mô hình chiến lược và nhà máy để giữ cho toàn bộ quá trình tốt đẹp và sạch sẽ. Theo thời gian các phương thức nâng nhất định trong đó được thêm hoặc xóa bởi chủ sở hữu ứng dụng.
Thời gian trôi qua và chủ sở hữu mới tiếp quản. Chủ sở hữu mới này là mũi cứng, giữ mọi thứ đơn giản và chỉ có một cách duy nhất để tăng lương.
Sự phức tạp cần thiết của mẫu chiến lược không còn cần thiết nữa. Nếu tôi mã hóa điều này từ các yêu cầu như hiện tại thì tôi sẽ không giới thiệu sự phức tạp thêm này (nhưng đảm bảo rằng tôi có thể giới thiệu nó với ít hoặc không có công việc nếu cần.
Vì vậy, tôi có loại bỏ việc thực hiện chiến lược bây giờ không? Tôi không nghĩ chủ sở hữu mới này sẽ thay đổi cách tăng giá. Nhưng chính ứng dụng đã chứng minh rằng điều này có thể xảy ra.
Tất nhiên đây chỉ là một ví dụ trong một ứng dụng mà chủ sở hữu mới tiếp quản và đã đơn giản hóa nhiều quy trình. Tôi có thể loại bỏ hàng tá lớp, giao diện và nhà máy và làm cho toàn bộ ứng dụng đơn giản hơn nhiều. Lưu ý rằng việc triển khai hiện tại chỉ hoạt động tốt và chủ sở hữu hài lòng với nó (và ngạc nhiên và thậm chí còn vui hơn khi tôi có thể thực hiện các thay đổi của cô ấy rất nhanh vì sự phức tạp được thảo luận).
Tôi thừa nhận rằng một phần nhỏ của sự nghi ngờ này là vì rất có thể chủ sở hữu mới sẽ không sử dụng tôi nữa. Tôi thực sự không quan tâm rằng ai đó sẽ đảm nhận việc này vì nó không phải là một công cụ tạo thu nhập lớn.
Nhưng tôi quan tâm đến 2 điều (liên quan)
Tôi quan tâm một chút rằng người bảo trì mới sẽ phải suy nghĩ kỹ hơn một chút khi cố gắng hiểu mã. Sự phức tạp là sự phức tạp và tôi không muốn chọc giận kẻ tâm thần đến sau tôi.
Nhưng thậm chí nhiều hơn tôi lo lắng về một đối thủ cạnh tranh nhìn thấy sự phức tạp này và nghĩ rằng tôi chỉ thực hiện các mẫu thiết kế để làm việc hàng giờ. Sau đó lan truyền tin đồn này để làm tổn thương doanh nghiệp khác của tôi. (Tôi đã nghe điều này được đề cập.)
Vì thế...
Nói chung, cần loại bỏ sự phức tạp trước đây mặc dù nó hoạt động và đã có một nhu cầu được chứng minh trong lịch sử về sự phức tạp nhưng bạn không có dấu hiệu nào cho thấy nó sẽ cần thiết trong tương lai?
Ngay cả khi câu hỏi trên thường được trả lời là "không", liệu có nên loại bỏ sự phức tạp "không cần thiết" này nếu giao dự án cho đối thủ cạnh tranh (hoặc người lạ) không?