2012-02-29 39 views
5

Bạn có nghĩ đó là một ý tưởng hay không?Cập nhật cơ sở dữ liệu trên __destruct()?

Giả sử bạn có thành phần ứng dụng được các thành phần khác sử dụng để truy xuất/cập nhật dữ liệu trong db. Về cơ bản nó là một lớp với các phương thức get(), set(), update().

Một ý tưởng hay là thành phần đó chỉ cập nhật (hoặc đặt) dữ liệu trong thuộc tính của nó khi được gọi và trên __destruct để cập nhật db? Hoặc nó nên cập nhật trực tiếp db trên mỗi cuộc gọi thiết lập/cập nhật?

Trả lời

5

Cập nhật cơ sở dữ liệu về phá hủy đối tượng có mùi với tôi một chút giống như phần mềm side effect. Đó là, một hành động diễn ra ở một nơi bất ngờ và không rõ ràng. Nó sẽ không được rõ ràng từ xem mã của bạn rằng một hành động cơ sở dữ liệu đang xảy ra khi __destruct() được gọi là, ngay cả khi bạn gọi nó một cách rõ ràng. Các nhà bảo trì mã trong tương lai (bao gồm cả chính bạn) có thể dễ dàng nhầm lẫn khi cố tìm kiếm lỗi liên quan đến dữ liệu không nhất quán, nhưng không thấy bất kỳ cuộc gọi nào tới cơ sở dữ liệu hoặc các cuộc gọi phương thức tương tự như tương tác dữ liệu khi xem mã.

Tôi khuyên bạn nên chống lại nó.

2

Cố gắng ném ngoại lệ từ trình phá hủy (được gọi trong thời gian chấm dứt tập lệnh) gây ra lỗi nghiêm trọng.

Vì vậy, khi bạn có ngoại lệ thì sao? Bất kỳ cách nào, tôi nghĩ rằng đây không phải là một ý tưởng tốt, bạn không thể kiểm soát dòng chảy công việc, và nó rất dễ dàng để dẫn một địa ngục gỡ lỗi.

Các vấn đề liên quan