Một người bạn của tôi đang làm việc cho một công ty nhỏ trong một dự án mà mọi nhà phát triển đều ghét: anh ta bị áp lực phải phát hành càng nhanh càng tốt, anh ta là người duy nhất quan tâm đến nợ kỹ thuật, khách hàng không có nền tảng kỹ thuật, v.v.
Anh ấy kể cho tôi một câu chuyện khiến tôi suy nghĩ về sự phù hợp của các mẫu thiết kế trong các dự án như thế này. Đây là câu chuyện.
Chúng tôi đã phải hiển thị các sản phẩm tại các địa điểm khác nhau trên trang web. Ví dụ: người quản lý nội dung có thể xem các sản phẩm, nhưng cả người dùng cuối hoặc đối tác thông qua API.
Đôi khi, thông tin bị thiếu trong các sản phẩm: ví dụ, một loạt trong số họ không có bất kỳ giá nào khi sản phẩm vừa được tạo, nhưng giá chưa được chỉ định. Một số không có mô tả (mô tả là một đối tượng phức tạp với lịch sử sửa đổi, nội dung được bản địa hóa, v.v.). Một số thiếu thông tin lô hàng.
Lấy cảm hứng từ các bài đọc gần đây của tôi về các mẫu thiết kế, tôi nghĩ rằng đây là một cơ hội tuyệt vời để sử dụng mẫu Null Object huyền diệu . Vì vậy, tôi đã làm điều đó, và mọi thứ đều trơn tru và sạch sẽ. Người ta chỉ cần gọi
product.Price.ToString("c")
để hiển thị giá, hoặcproduct.Description.Current
để hiển thị mô tả; không có công cụ có điều kiện cần thiết. Cho đến một ngày, các bên liên quan đã yêu cầu hiển thị nó khác nhau trong API, bằng cách có mộtnull
JSON. Và cũng khác nhau đối với người quản lý nội dung bằng cách hiển thị "Giá không xác định [Thay đổi]". Và tôi đã phải giết chết mẫu Null Object yêu quý của mình, bởi vì không cần nó nữa.Theo cách tương tự, tôi đã phải loại bỏ một vài nhà máy trừu tượng và một vài nhà xây dựng, cuối cùng tôi đã thay thế mẫu Mặt tiền đẹp đẽ của mình bằng các cuộc gọi trực tiếp và xấu xí, bởi vì các giao diện cơ bản đã thay đổi hai lần mỗi ngày trong ba tháng và thậm chí Singleton đã rời bỏ tôi khi các yêu cầu nói rằng đối tượng liên quan phải khác nhau tùy theo ngữ cảnh.
Hơn ba tuần làm việc bao gồm thêm các mẫu thiết kế, sau đó xé chúng ra một tháng sau đó, và mã của tôi cuối cùng đã trở thành spaghetti đủ để không ai có thể duy trì, kể cả bản thân tôi. Sẽ không tốt hơn nếu không bao giờ sử dụng các mẫu đó ở nơi đầu tiên?
Thật vậy, tôi đã phải tự mình làm việc với những loại dự án mà các yêu cầu thay đổi liên tục và bị quyết định bởi những người không thực sự có ý định về sự gắn kết hoặc sự gắn kết của sản phẩm. Trong bối cảnh này, không quan trọng bạn nhanh nhẹn đến mức nào, bạn sẽ đưa ra một giải pháp tao nhã cho một vấn đề và khi cuối cùng bạn thực hiện nó, bạn biết rằng các yêu cầu thay đổi rất lớn, rằng giải pháp thanh lịch của bạn không phù hợp còn nữa
Điều gì sẽ là giải pháp trong trường hợp này?
Không sử dụng bất kỳ mẫu thiết kế nào, ngừng suy nghĩ và viết mã trực tiếp?
Thật thú vị khi thực hiện trải nghiệm khi một nhóm viết mã trực tiếp, trong khi một nhóm khác đang suy nghĩ hai lần trước khi gõ, có nguy cơ phải vứt bỏ thiết kế ban đầu vài ngày sau: ai biết được, có thể cả hai đội sẽ có cùng nợ kỹ thuật. Trong sự vắng mặt của dữ liệu như vậy, tôi sẽ chỉ khẳng định rằng nó không cảm thấy đúng phải gõ mã mà không suy nghĩ trước khi làm việc trên một dự án 20 người đàn ông tháng.
Giữ mẫu thiết kế không còn ý nghĩa nữa và cố gắng thêm nhiều mẫu cho tình huống mới được tạo?
Điều này có vẻ không đúng. Các mẫu được sử dụng để đơn giản hóa sự hiểu biết về mã; đặt quá nhiều mẫu và mã sẽ trở thành một mớ hỗn độn.
Bắt đầu nghĩ về một thiết kế mới bao gồm các yêu cầu mới, sau đó từ từ cấu trúc lại thiết kế cũ thành một thiết kế mới?
Là một nhà lý luận và là người ủng hộ Agile, tôi hoàn toàn thích nó. Trong thực tế, khi bạn biết rằng bạn sẽ phải quay lại bảng trắng mỗi tuần và làm lại phần lớn của thiết kế trước đó và khách hàng sẽ không có đủ tiền để trả cho bạn, cũng không đủ thời gian để chờ đợi , điều này có lẽ sẽ không hoạt động.
Vì vậy, bất kỳ đề nghị?