Những người khác đã liệt kê rất nhiều lý do có thể (và giải thích đúng về lý do tại sao hầu hết những điều này thường không phải là một ý tưởng hay). Hãy để tôi đăng một ví dụ về một (nhiều hoặc ít hơn) sử dụng hợp lệ các phương thức init, mà thực sự phải làm với thời gian.
Trong một dự án trước, chúng tôi có nhiều lớp và đối tượng dịch vụ, mỗi lớp là một phần của cấu trúc phân cấp và tham chiếu chéo lẫn nhau theo nhiều cách khác nhau. Vì vậy, thông thường, để tạo ServiceA, bạn cần một đối tượng dịch vụ cha mẹ, do đó cần một thùng chứa dịch vụ, đã phụ thuộc vào sự hiện diện của một số dịch vụ cụ thể (có thể bao gồm ServiceA) tại thời điểm khởi tạo. Lý do là trong quá trình khởi tạo, hầu hết các dịch vụ đã đăng ký chính nó với các dịch vụ khác như người nghe đến các sự kiện cụ thể và/hoặc thông báo cho các dịch vụ khác về sự kiện khởi tạo thành công. Nếu dịch vụ khác không tồn tại tại thời điểm thông báo, đăng ký đã không xảy ra, do đó dịch vụ này sẽ không nhận được thông báo quan trọng sau này, trong quá trình sử dụng ứng dụng. Để phá vỡ chuỗi phụ thuộc vòng tròn, chúng tôi đã phải sử dụng các phương thức khởi tạo rõ ràng tách biệt với các nhà xây dựng, do đó hiệu quả làm cho dịch vụ toàn cầu khởi tạo một quy trình hai pha.
Vì vậy, mặc dù thành ngữ này không nên được theo sau nói chung, IMHO nó có một số sử dụng hợp lệ. Tuy nhiên, tốt nhất là giới hạn mức sử dụng của nó ở mức tối thiểu, sử dụng các hàm tạo bất cứ khi nào có thể. Trong trường hợp của chúng tôi, đây là một dự án kế thừa, và chúng tôi chưa hoàn toàn hiểu được kiến trúc của nó. Ít nhất việc sử dụng các phương thức init được giới hạn trong các lớp dịch vụ - các lớp thông thường được khởi tạo thông qua các nhà xây dựng. Tôi tin rằng có thể có một cách để cấu trúc lại kiến trúc đó để loại bỏ sự cần thiết cho các phương pháp init dịch vụ, nhưng ít nhất tôi không thấy làm thế nào để thực hiện nó (và thành thật mà nói, chúng tôi có nhiều vấn đề khẩn cấp hơn để giải quyết tại thời điểm đó một phần của dự án).
Nguồn
2010-09-24 12:23:33
Nếu công ty của riêng bạn thậm chí không thể giải thích nó, tôi ngửi thấy mùi mã xấu. – Mike
Có vẻ như thiếu 'void'. – sellibitze
Tôi đồng ý với Mike. Bắt đầu tìm việc làm. – sbi