Tôi hiện đang hiểu rõ về khung Reactive Extensions cho .NET và tôi đang làm việc theo cách của mình thông qua các tài nguyên giới thiệu khác nhau mà tôi đã tìm thấy (chủ yếu là http://www.introtorx.com )
Ứng dụng của chúng tôi liên quan đến một số giao diện phần cứng phát hiện các khung mạng, đây sẽ là IObservables của tôi, sau đó tôi có nhiều thành phần sẽ sử dụng các khung đó hoặc thực hiện một số cách biến đổi trên dữ liệu và tạo ra một loại khung mới. Cũng sẽ có các thành phần khác cần hiển thị mọi khung hình thứ n chẳng hạn. Tôi tin rằng Rx sẽ hữu ích cho ứng dụng của chúng tôi, tuy nhiên tôi đang gặp khó khăn với các chi tiết triển khai cho giao diện IObserver.
Hầu hết (nếu không phải tất cả) các tài nguyên tôi đã đọc đều nói rằng tôi không nên tự triển khai giao diện IObservable mà hãy sử dụng một trong các hàm hoặc lớp được cung cấp. Từ nghiên cứu của tôi, có vẻ như việc tạo một Subject<IBaseFrame>
sẽ cung cấp cho tôi những gì tôi cần, tôi sẽ có một luồng duy nhất của mình đọc dữ liệu từ giao diện phần cứng và sau đó gọi hàm OnNext của phiên bản của tôi Subject<IBaseFrame>
. Sau đó, các thành phần IObserver khác nhau sẽ nhận được thông báo từ Chủ thể đó.
Sự bối rối của tôi đến từ lời khuyên đưa ra trong phụ lục của hướng dẫn này , nơi nó nói:
Tránh sử dụng các loại chủ đề. Rx thực sự là một mô hình lập trình chức năng. Sử dụng các chủ thể có nghĩa là chúng ta hiện đang quản lý trạng thái, trạng thái có khả năng thay đổi. Việc đối phó với cả trạng thái đột biến và lập trình không đồng bộ cùng một lúc là rất khó để làm đúng. Hơn nữa, nhiều toán tử (phương thức gia hạn) đã được viết cẩn thận để đảm bảo duy trì thời gian tồn tại chính xác và nhất quán của các đăng ký và trình tự; khi bạn giới thiệu các môn học, bạn có thể phá vỡ điều này. Các bản phát hành trong tương lai cũng có thể bị giảm hiệu suất đáng kể nếu bạn sử dụng các đối tượng một cách rõ ràng.
Ứng dụng của tôi khá quan trọng về hiệu suất, rõ ràng là tôi sẽ kiểm tra hiệu suất của việc sử dụng các mẫu Rx trước khi nó đi vào mã sản xuất; tuy nhiên, tôi lo lắng rằng tôi đang làm điều gì đó đi ngược lại tinh thần của khung Rx bằng cách sử dụng lớp Chủ đề và phiên bản trong tương lai của khung sẽ ảnh hưởng đến hiệu suất.
Có cách nào tốt hơn để làm những gì tôi muốn không? Chuỗi thăm dò phần cứng sẽ chạy liên tục cho dù có bất kỳ người quan sát nào hay không (bộ đệm HW sẽ sao lưu ngược lại), vì vậy đây là một chuỗi rất nóng. Sau đó, tôi cần chuyển các khung đã nhận được cho nhiều người quan sát.
Bất kỳ lời khuyên sẽ được đánh giá rất cao.