CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 90

90
Chương 3: Miền ứng dụng, cơ chế phản chiếu, và siêu dữ liệu

2.

2.

Chuy n các đ i t

ng qua l i các mi n ng d ng

ố ượ

ề ứ

Chuy n các đ i t

ng qua l i các mi n ng d ng

ố ượ

ề ứ

Bạn cần chuyển các đối tượng qua lại giữa các miền ứng dụng như các đối số hay
các giá trị trả về.

Sử dụng các đối tượng marshal-by-value hay marshal-by-reference.

Hệ thống .NET Remoting (sẽ được thảo luận trong chương 12) giúp việc gởi các đối tượng qua
lại các miền ứng dụng trở nên dễ dàng. Tuy nhiên, nếu bạn chưa quen với .NET Remoting, kết
quả có thể rất khác so với mong đợi. Thực ra, vấn đề gây khó khăn khi dùng nhiều miền ứng
dụng là sự tương tác với .NET Remoting và cách thức luân chuyển đối tượng qua các miền
ứng dụng.
Tất cả các kiểu dữ liệu có thể chia thành ba loại: nonremotable, marshal-by-value (MBV), và
marshal-by-reference (MBR). Kiểu nonremotable không thể vượt qua biên miền ứng dụng và
không thể dùng làm các đối số hay các giá trị trả về của các lời gọi trong môi trường liên miền
ứng dụng. Kiểu nonremotable sẽ được thảo luận trong mục 3.4.
Kiểu MBV là kiểu khả-tuần-tự-hóa. Khi một đối tượng kiểu MBV được chuyển qua một miền
ứng dụng khác như là đối số hay giá trị trả về, hệ thống .NET Remoting sẽ tuần tự hóa trạng
thái hiện tại của đối tượng, chuyển dữ liệu đó sang miền ứng dụng đích, và tạo một bản sao
của đối tượng với cùng trạng thái như đối tượng gốc. Kết quả là tồn tại bản sao của đối tượng
ở cả hai miền ứng dụng. Hai đối tượng này ban đầu giống nhau hoàn toàn, nhưng độc lập
nhau, nên việc thay đổi đối tượng này không ảnh hưởng đến đối tượng kia. Dưới đây là ví dụ
một kiểu khả-tuần-tự-hóa có tên là

Employee

, được chuyển qua một miền ứng dụng khác bằng

trị (xem mục 16.1 để biết cách tạo kiểu khả-tuần-tự-hóa).

[System.Serializable]

public class Employee {

// Hiện thực các thành viên ở đây.

§

}

Kiểu MBR là lớp dẫn xuất từ lớp

System.MarshalByRefObject

. Khi một đối tượng kiểu MBR

được chuyển qua một miền ứng dụng khác như đối số hay giá trị trả về, hệ thống .NET
Remoting
sẽ tạo một đối tượng proxy cho đối tượng MBV cần chuyển trong miền ứng dụng
đích. Đối tượng đại diện thực hiện các hành vi hoàn toàn giống với đối tượng MBR mà nó đại
diện. Thực ra, khi thực hiện một hành vi trên đối tượng đại diện, hệ thống .NET Remoting
thực hiện ngầm việc chuyển lời gọi và các đối số cần thiết đến miền ứng dụng nguồn, và tại
đó thực hiện lời gọi hàm trên đối tượng MBR gốc. Kết quả được trả về thông qua đối tượng
đại diện. Dưới đây là một phiên bản khác của lớp

Employee

, được chuyển qua một miền ứng

dụng khác bằng tham chiếu thay vì bằng trị (xem mục 12.7 để biết chi tiết về cách tạo kiểu
MBR).

public class Employee : System.MarshalByRefObject {

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.