Hãy sử dụng builder khi khởi tạo đối tượng với nhiều tham số

Một cách đối phó với những hạn chế khi dùng static factory method

Tara
Coding For Fun
2 min readNov 8, 2019

--

Sử dụng static-factory-method và hàm khởi tạo public có nhiều hạn chế nhất định đã được tôi đề cập trong bài viết trước, bạn có thể đọc lại ở đây. Hôm nay chúng ta sẽ đối mặt với bài toán khác. Hãy xem xét trường hợp viết một lớp đại diện Person. Chúng có một vài trường bắt buộc như tên, năm sinh, giới tính và rất nhiều trường không bắt buộc như tình trạng hôn nhân, nghề nghiệp, trình độ giáo dục, v.v.

Các lập trình viên sẽ viết như thế nào …?

Hầu hết sẽ viết một hàm khởi tạo với chỉ các tham số bắt buộc, một số sẽ viết các hàm với tất cả tham số và đa phần viết các hàm với các tham số tăng dần, còn chúng ta thì sao…?

Quá nhiều vấn đề…

Tất nhiên cách viết trên hoàn toàn hoạt động, nhưng nó thực sự rất khó để viết và đọc, quá nhiều hàm khởi tạo với nhiều tham số khác nhau.

  • Người đọc sẽ phải đọc từng hàm và hiểu ý nghĩa của nó.
  • Cách viết dễ tạo các bugs nhầm lẫn.
  • Đảo ngược vị trí hai tham số chương trình chạy nhưng sai.

Xử lý như thế nào…?

Cách tiếp cận thay thế là sử dụng mẫu JavaBeans, nó cho phép bạn gọi hàm khởi tạo để sinh ra đối tượng và sau đó gọi phương thức setter tới các tham số bắt buộc hoặc tuỳ chọn.

Tiếp tục gặp phải những vấn đề mới…

Phương pháp JavaBeans đã giải quyết được các vấn đề của phương pháp trước tuy nhiên ngay lập tức nó lại tạo ra một số các vấn đề mới.

  • Do trong quá trình tạo đối tượng phải gọi nhiều hạm nên có thể xảy ra sự không nhất quán về cách khởi tạo giữa các đối tượng.
  • Phương pháp JavaBeans không chắc chắn tạo ra một lớp bất biến, và chúng ta phải thêm nỗ lực bằng việc sử dụng kỹ thuật thread safety.

Cách giải quyết triệt để…

Để xử lý vấn đề này một cách hữu hiệu nhất ý tưởng là chúng ta gọi hàm khởi tạo với tất cả tham số yêu cầu và sau đó gọi các hàm setter tương ứng với tham số muốn thay đổi.

Cảm ơn bạn đã đọc!

--

--