2009-07-24 4 views
5

Chúng tôi đang tạo một số dịch vụ WCF ban đầu sẽ được khách hàng .NET sử dụng nhưng trong tương lai sẽ được tiêu thụ cho các máy khách Java.Thay thế tốt nhất cho kiểu giá trị nullable .NET cho dịch vụ tiêu hao Java

Vì vậy, chúng tôi muốn tránh sử dụng bất kỳ loại dữ liệu nào trong giao diện mà Java không hỗ trợ.

Loại cụ thể mà chúng tôi biết là các loại giá trị không có giá trị.

Một gợi ý là chúng tôi có thể hỗ trợ những điều này bằng cách sử dụng một chuỗi để biểu diễn, ví dụ, một int vô giá trị. Và chuỗi rỗng do đó đại diện cho null, nếu không có một yêu cầu rằng chuỗi phải được phân tích cú pháp như một int.

Có ai có thể đề xuất giải pháp thay thế tốt hơn hay đây là những gì bạn sẽ làm?

+2

Đây là một câu hỏi thú vị. Tôi ngạc nhiên không có nhiều câu trả lời hơn. – RichardOD

Trả lời

3

Một cách tiếp cận được sử dụng trong một dự án mà tôi đã tham gia vào một vài năm trước (cũng là kết hợp .NET/Java) là thêm thuộc tính chỉ số: NumPropertyNumPropertyIsNull. Nó không đặc biệt đẹp, nhưng nó hoạt động.

Là nút phụ, tôi nghĩ rằng cuối cùng, chúng tôi không thể tìm thấy một trường hợp kinh doanh duy nhất mà sự khác biệt giữa 0null thực sự quan trọng.

+1

+1 cho "NumProperty và NumPropertyIsNull", -1 cho "không thể tìm thấy một trường hợp kinh doanh duy nhất mà sự khác biệt giữa 0 và null thực sự quan trọng". 0 và null là các giá trị khác nhau và có thể có các phương tiện khác nhau. Ví dụ: 0 = tổng số là 0, NULL = tổng số chưa được biết. – TcKs

+3

@TcKs: Tôi nhận thức rõ rằng 0 một NULL không giống nhau; Tôi chỉ nói rằng trong dự án cụ thể đó, chúng tôi nhận ra rằng không có sự khác biệt * thực tế *. Điều đó tất nhiên sẽ khác nhau từ dự án đến dự án, nhưng nó cũng rất đáng để tính đến. Nếu sự khác biệt không quan trọng đối với ứng dụng; thì có lẽ bạn không nên dành thời gian thiết kế một giải pháp cho nó. Trong một dự án khác, sự khác biệt có thể là đáng kể. –

+0

@ Fredrik Mörk: Nếu không có sự khác biệt giữa NULL và 0, tại sao hỗ trợ NULL trong các biến/cột/etc ...? – TcKs

5

tôi muốn hy vọng rằng nếu bạn có thể phơi bày một số nguyên nullable qua WCF, rằng bất cứ điều gì tiêu thụ mà từ Java sẽ sử dụng các loại wrapper - Integer thay vì int, Byte thay vì byte vv Tất nhiên đây là những loại tài liệu tham khảo Trong khi đó các kiểu giá trị nullable trong .NET vẫn là các kiểu giá trị, vì vậy bạn sẽ nhận được nhiều áp lực GC hơn và nó sẽ kém hiệu quả hơn, nhưng không có nhiều điều bạn có thể làm. loại.

+0

Có bất kỳ người dùng Java nào ở đó có thể xác minh điều gì sẽ xảy ra nếu bạn tạo một lớp proxy cho một dịch vụ cho thấy một int vô giá trị không? –

+0

Bạn đang tiếp xúc với dịch vụ WCF như thế nào? –

+0

@Jon - Tôi chắc chắn rằng bạn có ý nghĩa gì về "cách" ... –