Đầu tiên, khi bạn thiết kế hãy giải quyết các vấn đề một cách đơn giản nhất. Mục tiêu của bạn nên đơn giản thay vì tự nghĩ “làm cách nào để ứng dụng một pattern vào bài toán.”. Đừng nghĩ bạn không phải là một lập trình viên xịn nếu bạn không sử dụng các pattern để giải quyết các vấn đề. Các lập trình viên khác sẽ rất tôn trọng và đánh giá cao sự đơn giản trong thiết kế của bạn. Thật sự thì, đôi lúc cách tốt nhất để giữ thiết kế của bạn đơn giản và hiệu quả là sử dụng pattern.Không ai nói lúc nào thì nên bỏ sử dụng pattern, bạn sẽ nghĩ rằng thật là báng bổ! Không, chúng ta đều đã trưởng thành, chúng ta phải chấp nhận nó. Thế thì khi nào bạn nên bỏ đi một pattern? Khi hệ thống của bạn trở nên rắc rối và sự mềm dẻo (scalable) mà bạn tạo nên là không cần thiết. Nói cách khác, một giải pháp đơn giản không cần pattern sẽ tốt hơn.Design patterns rất mạnh mẽ, và chúng ta có thể dễ dàng thấy cách chúng được sử dụng trong các thiết kế và lập trình viên thường sẽ thích tạo ra các kiến trúc thiết kế mà ở đó sẵn sàng cho các thay đổi trong mọi trường hợp.Nếu bạn không đồng ý với việc tạm bợ, nếu bạn cần hỗ trợ cho việc thiết kế, hãy sử dụng pattern để giải quyết các thay đổi. Tuy nhiên, nếu nguyên nhân chỉ là muốn giải quyết các giả định, đừng dùng pattern, điều đó chỉ làm hệ thống của bạn thêm rắc rối, và bạn có thể chẳng cần đến nó.
Các lập trình viên mới vào nghề nên sử dụng pattern ở mọi nơi, điều đó rất tốt, họ sẽ có rất nhiều kinh nghiệm với việc sử dụng các pattern trong thực tế. Họ cũng phải nghĩ rằng, dùng pattern càng nhiều, design của họ sẽ ngày một tốt. Người mới vào nghề sẽ học được rằng, tất cả các design nên đơn giản nhất có thể, sự phức tạp của pattern chỉ nên sử dụng ở nơi chúng cần ứng dụng để có thể mở rộng được.
- Design Patterns : Elements of Reusable Object-Oriented Software
- Patterns of Enterprise Application Architecture
- Design Patterns Explained
Sau đó áp dụng thử với công việc của mình và tiếp tục ngấm dần và ngộ dần :). Đây không phải là chuyện một hai ngày đâu, hãy cứ yên tâm là không vội được.
Vì chặng đường làm 1 software developer không hề đơn giản, và chặng đường để trở thành 1 software architect giỏi thậm chí còn gian nan hơn rất nhiều 🙂