Gần đây, một số đồng nghiệp và tôi đã thảo luận về việc liệu các dịch vụ AngularJS có nên có nhà nước hay không. Chúng tôi đã đưa ra một số lý lẽ cho và chống lại nó và tôi muốn nhận thêm suy nghĩ và phản hồi về chủ đề này. Trong tìm kiếm của tôi, tôi tìm thấy this nhưng dường như không có bất kỳ thực hành tốt nhất rõ ràng nào được đề cập. Trong thế giới phía máy khách không một dịch vụ nào không bao giờ nên giữ trạng thái, nhưng tôi bắt đầu nghĩ rằng nó có thể là phía máy khách được chấp nhận bởi vì nó là một vấn đề khác.Dịch vụ Góc có nên có trạng thái không?
Lý do cho các dịch vụ giữ nhà nước:
- Dịch vụ này sẽ không thể được truy cập bởi nhiều chủ đề. Mỗi trình duyệt sẽ có phiên bản dịch vụ riêng của mình.
- Cho phép dịch vụ chỉ giữ trạng thái mà nó quan tâm thay vì lưu trữ trong rootScope. đóng gói
Lý do cho các dịch vụ để không giữ trạng thái:
- Dịch vụ không còn idempotent. Các chức năng gọi có thể thay đổi trạng thái và do đó có thể có các kết quả khác nhau khi gọi nó dựa trên trạng thái của dịch vụ.
- Tôi nghĩ rằng tổng thể điều này sẽ dễ dàng hơn để kiểm tra.
Một cách có thể giải quyết # 2 trong phần "cho dịch vụ giữ trạng thái" sẽ là có đối tượng appState được đặt trên rootScope chứa trạng thái hiện tại của ứng dụng. Sau đó, tất cả các tiểu bang sẽ được thu thập tại một địa điểm và sau đó bạn chỉ cần kéo những gì bạn cần ra khỏi nó trong dịch vụ của bạn. Tôi tìm thấy điều này và tự hỏi
Điểm tốt về $ http và $ tài nguyên. Ngoài ra, tôi thích suy nghĩ của bạn về chỉ lưu trữ trạng thái mà sẽ không được sửa đổi bởi các chức năng được gọi trên dịch vụ (ngoại trừ có thể khi khởi tạo dịch vụ). – testing123