2009-11-25 26 views
14

Chúng tôi đang giới thiệu bộ đệm giao thức là phương tiện mới cho một số dịch vụ RPC cuối. Bởi vì có khả năng chống chuyển dữ liệu theo cách thủ công giữa các dạng khác nhau của các đối tượng tương tự nhau, tôi có thể giám sát các cá thể Protocol Buffer được truyền lên stack cao hơn một chút so với giao diện máy chủ RPC.Sử dụng bộ đệm Giao thức làm đối tượng Dữ liệu chung?

Đây có phải là điều mà tôi nên cố gắng tránh không? Có an toàn khi xử lý một đối tượng đệm giao thức giống như một trình giữ dữ liệu thuần túy, với sự tiện lợi tốt đẹp mà nó có thể nhanh chóng và hiệu quả được chuyển vào và ra khỏi nhị phân không?

Lý do khác tôi thấy nó là một cách hay để tạo các đối tượng dữ liệu là khái niệm về các trường bắt buộc/tùy chọn và giao diện trình tạo tự động được tạo.

Trả lời

9

Vâng, chúng không phải là terribly thuận tiện để sử dụng theo cách đó vì chúng không thay đổi - bạn có thể chuyển các nhà xây dựng xung quanh, nhưng điều đó tạo nên tên loại khá dài. Nó cũng có nghĩa là bạn bị giới hạn trong các kiểu dữ liệu được hỗ trợ bởi các bộ đệm giao thức (và các thông báo của riêng bạn).

Đó là an toàn để thực hiện việc này nhưng không phải lúc nào cũng tạo ra thiết kế đẹp nhất. Mặt khác, đôi khi nó chỉ là những gì bác sĩ đã ra lệnh :)

Tôi đề nghị bạn thử nghiệm - không có "một kích thước phù hợp với tất cả" ở đây.

+0

Tôi nghĩ rằng thực tế là chúng không thay đổi thực sự giúp ích, không đau, khi nói đến việc sử dụng bộ đệm giao thức như thế này. Chúng là những đối tượng có giá trị bất biến giống như String. –

+0

Nó chắc chắn sẽ giúp trong một số trường hợp, khi bạn có thể viết mã theo kiểu chức năng. Điều này một phần phụ thuộc vào vấn đề và một phần trên các nhà phát triển :) –

+0

Không thể thay đổi thực sự giúp trong một số trường hợp, không rõ lý do tại sao có một số công trình công cộng với hàng chục tham số, tất cả được gán cho các trường cuối cùng. Một người xây dựng là tuyệt vời nhưng tẻ nhạt và sôi nổi để viết mỗi lần. Nó cũng phức tạp để có được logic của quyền yêu cầu so với quyền tùy chọn, chẳng hạn phương thức build() sẽ phát sinh nếu các trường bắt buộc đã bị bỏ qua. –

0

Nói chung, tôi thiết kế các lớp hệ thống của mình để chi tiết triển khai từ một lớp không bị rò rỉ vào nhau. Tôi không có kinh nghiệm trực tiếp về Bộ đệm giao thức của Google, nhưng có vẻ như bạn muốn sử dụng cùng một biểu diễn cho việc truyền tải và ở các lớp cao hơn trong hệ thống của bạn.

Nếu bạn quyết định muốn ngừng sử dụng Bộ đệm giao thức làm biểu diễn truyền tải, việc sử dụng cái gì khác dễ dàng như thế nào?

+0

Đây thực sự là một bước hướng tới chính xác điều đó. Ngay bây giờ một tập hợp các giao diện ra lệnh cho lớp dữ liệu của chúng ta, kết thúc RPC * và * để mở rộng một lớp dịch vụ web RESTful. *ĐAU ĐỚN*. BướC# 1 là để thay thế kết thúc trở lại với bộ đệm giao thức để decouple rằng từ phần còn lại. Nhưng đó là một điểm tuyệt vời. Nếu tôi chỉ chuyển mọi thứ sang protobuf, điều duy nhất tôi đã tách ra là liên kết giữa các dịch vụ máy khách và RPC trong khi tất cả các lớp khác sẽ phụ thuộc vào các đối tượng Message ... BAD. –

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