2014-05-02 29 views
5

RAII (Mua lại tài nguyên là khởi tạo) là một trong những cách được đề xuất để xây dựng các đối tượng. Làm thế nào nó liên quan đến các nguyên tắc kiểm thử đơn vị đang nói: không có công việc phức tạp nào được thực hiện trong hàm tạo? Và đặc biệt là không có sự sáng tạo rõ ràng các đối tượng bằng toán tử "mới"? Tuy nhiên, việc tạo ra một số đối tượng đòi hỏi một số bước phức tạp hơn đôi khi, và chuyển một nhà máy tới một nhà xây dựng làm cho API "bẩn" trong ý nghĩa làm giảm mức độ dễ đọc. Các cách chung để đáp ứng cả hai nguyên tắc cùng một lúc là gì?RAII và các nguyên tắc kiểm tra đơn vị

Tôi đã tìm thấy chủ đề khác về SO: Stack allocated RAII objects vs DI principle, tuy nhiên nó trông giống như một vấn đề chung chung hơn và nó không được giải thích tốt.

+0

@MartinJames tại sao? Nghe có vẻ giống như một câu hỏi thiết kế phần mềm hợp pháp đối với tôi. Hơn nữa, tôi không thể nghĩ ra bất cứ lớp nào hỏi điều này như bài tập về nhà. –

+0

Nếu đây là câu hỏi chuyển nhượng thì tôi muốn học ở đó! Tuy nhiên đó là một vấn đề mà tôi gặp trong công việc hàng ngày. Tôi muốn gặp các ý kiến ​​và cách thức mà các nhà phát triển khác xử lý nó. – thatsme

Trả lời

3

Có, việc tạo lớp bê tông trong một hàm tạo phức tạp với lớp làm như vậy, thêm một phụ thuộc vào lớp và làm cho việc kiểm tra trở nên khó khăn hơn.

Nhưng, RAII không phải là cách xây dựng các đối tượng, mà là giải phóng tài nguyên. Lớp có destructor giải phóng tài nguyên không phải xây dựng đối tượng, mặc dù nó thường làm: xem What is meant by Resource Acquisition is Initialization (RAII)?.

Vì vậy, hãy tạo tài nguyên bên ngoài lớp sử dụng nó nếu bạn muốn, sử dụng một nhà máy để làm như vậy nếu bạn muốn, v.v., nhưng sau đó để cho lớp sử dụng tài nguyên làm sạch nó với RAII.

+0

Thực ra tại thời điểm nhất định tôi đã hối tiếc tôi hỏi câu hỏi này là ví dụ hoàn hảo về hành vi như vậy là shared_ptr. – thatsme