Tôi đã chơi với các chương trình chức năng gần đây và có phương pháp điều trị khá tốt về chủ đề tác dụng phụ, tại sao chúng nên được chứa, vv Trong các dự án mà OOP được sử dụng, tôi đang tìm kiếm một số tài nguyên các chiến lược để giảm thiểu tác dụng phụ và/hoặc tiểu bang.Các nguồn lực tốt nhất để học cách tránh các tác dụng phụ và tình trạng trong OOP là gì?
Ví dụ điển hình về việc này là sách Dịch vụ web RESTful cung cấp cho bạn các chiến lược để giảm thiểu trạng thái trong ứng dụng web. Những gì người khác tồn tại?
Hãy nhớ rằng tôi không tìm kiếm một nhà phân tích OOP/mẫu thiết kế khác (mặc dù đóng gói tốt và khớp nối lỏng giúp tránh tác dụng phụ) mà là tài nguyên mà chủ đề chính là tác dụng phụ/trạng thái.
Một số câu trả lời biên soạn
- lập trình OOP người chủ yếu quan tâm đến trạng thái làm như vậy vì đồng thời, vì vậy đọc Java Concurrency in Practice. [chính xác những gì tôi đang tìm kiếm]
- Sử dụng TDD để làm cho các hiệu ứng phụ hiển thị rõ hơn [Tôi thích nó, ví dụ: setUps càng lớn, bạn cần có nhiều trạng thái hơn để chạy thử nghiệm = cảnh báo tốt]
- Command-query separation[Tốt thứ, ngăn ngừa tác dụng phụ của việc thay đổi một đối số chức năng mà thường là khó hiểu]
- Phương pháp làm chỉ có một điều, có lẽ sử dụng tên mô tả nếu họ thay đổi trạng thái của đối tượng của họ do đó, nó đơn giản và thông thoáng.
- Make objects immutable[Tôi thực sự thích điều này]
- Chuyển giá trị làm thông số thay vì lưu trữ chúng trong các biến thành viên. [Tôi không liên kết điều này; nó làm lộn xộn lên nguyên mẫu chức năng và được khuyến khích bởi Clean Code và các sách khác, mặc dù tôi thừa nhận nó sẽ giúp vấn đề nhà nước]
- Giá trị tính toán thay vì lưu trữ và cập nhật chúng [Tôi cũng thực sự thích điều này; trong các ứng dụng tôi làm việc về hiệu suất là một mối quan tâm nhỏ]
- Tương tự, đừng sao chép trạng thái xung quanh nếu bạn có thể tránh nó. Làm cho một đối tượng chịu trách nhiệm giữ nó và cho phép người khác truy cập nó ở đó. [nguyên tắc OOP cơ bản, lời khuyên tốt]
Tôi không hiểu chính xác các loại tác dụng phụ mà bạn muốn nói và ý bạn là gì với trạng thái (trong trạng thái REST thuộc về giao thức chứ không phải là mô hình lập trình) trong ngữ cảnh đó. – Daff
"Tránh" tác dụng phụ và nhà nước không thực sự là những gì bạn có nghĩa là, tôi nghĩ. – Benjol
Bạn có ý nghĩa gì bởi "trạng thái", chính xác? Các giá trị của các thành viên instance của một đối tượng tại bất kỳ điểm nào, cộng với các giá trị của bất kỳ thành viên tĩnh nào của lớp của đối tượng? Bởi vì đó là một phần rất quan trọng của OOP, trừ khi bạn dự định lưu trữ tất cả dữ liệu của bạn trong các biến toàn cục. – JAB