Ngày đăng: 2023-05-05 12:11:00
Mục lục
1.Proxy Design Pattern trong C# là gì?
Proxy Design Pattern là một mẫu thiết kế ủy quyền. Nó cung cấp một đại diện thay thế cho đối tượng khác để kiểm soát quyền truy cập vào đối tượng đó.
Hiểu đơn giản hơn, thì Proxy Design Pattern như là một đối tượng trung gian. Khi chúng ta muốn thao tác với đối tượng chính đều phải thông qua nó.
Các loại Proxy Design Pattern:
- Virtual Proxy: Là một trình giữ chổ cho các đối tượng "expensive to create". Đối tượng thực chỉ được tạo ra khi một khách hàng yêu cầu hoặc truy cập đầu tiên vào đối tượng.
- Remote Proxy: Cung cấp đại diện cục bộ cho một đối tượng nằm trong một khoảng không gian địa chỉ khác.
- Protection Proxy: Bảo vệ một đối tượng và kiểm tra xem người thao tác có quyền truy cập cần thiết trước khi chuyển tiếp yêu cầu hay không.
Ví dụ: Ví dụ cụ thể nhất cho Proxy Design Pattern đó chính là việc khi chúng ta rút tiền ở cây ATM.
Khi chúng ta muốn rút tiền ở ngân hàng, thay vì phải đến trực tiếp ở đó, ta có thể đến cây ATM. Khi chúng ta thao tác rút tiền ở cây ATM, nó sẽ liên lạc với ngân hàng và xác nhận mã pin, số tiền cần rút. Nếu mọi thứ đều ổn thì cây ATM sẽ đưa tiền cho chúng ta.
Vì vậy, ngân hàng là đối tượng thực, còn cây ATM là đối tượng thay thế (đối tượng ủy quyền).
Tại sao nên sử dụng Proxy Design Pattern trong C#
Proxy Server chặn tất cả các yêu cầu đến với server thực để xem các yêu cầu này nó có tự thực hiện được hay không. Nếu không nó sẽ chuyển tiếp các yêu cầu đến máy chủ thực.
Proxy Server có hai mục tiêu chính như sau:
- Improve Performance: Có thể cải thiện đáng kể hiệu suất của ứng dụng. Điều này là do nó lưu kết quả của một yêu cầu trong một khoảng thời gian nhất định.
- Filter Requests: Có thể được sử dụng để lọc yêu cầu đến. Ví dụ: một công ty có thể sử dụng Proxy Server để ngăn chặn nhân viên truy cập vào một nhóm trang web cụ thể nào đó như Facebook, ... .
2.Cách triển khai và ví dụ về Proxy Design Pattern trong C#
Trong phần này mình sẽ thực hiện triển khai Proxy Design Pattern trong C# thông qua một ví dụ cụ thể sau đây.
![](data:image/png;base64,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)
Như bạn có thể thấy ở hình trên, ở bên phải ta có một máy tính dùng chung có thư mục chia sẻ. Phía bên trái có các nhân viên đang làm việc cho một công ty phần mềm. Trong máy tính có một thư mục dùng chung chứa các thông tin bí mật mà chỉ có Manager và CEO có truyền truy cập. Còn các Developer thì không được phép truy cập vào.
Trong các tình huống như thế này thì chúng ta nên sử dụng Proxy Design Pattern để quản lý một cách dễ dàng.
Mình sẽ thực hiện triển khai ví dụ trên theo từng bước, các bạn theo dõi nhé.
Bước 1: Tạo class Employee.
Trong class có các thuộc tính của một nhân viên như: Username, Password, Role.
Employee.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxyDesignPattern
{
public class Employee
{
public string Username { get ; set ; }
public string Password { get ; set ; }
public string Role { get ; set ; }
public Employee( string username, string password, string role)
{
Username = username;
Password = password;
Role = role;
}
}
}
|
Bước 2: Tạo interface ISharedFolder.
ISharedFolder.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxyDesignPattern
{
public interface ISharedFolder
{
void PerformRWOperations();
}
}
|
Bước 3: Tạo Real Object (đối tượng thực).
Class này thực hiện interface ISharedFolder.
SharedFolder.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxyDesignPattern
{
public class SharedFolder : ISharedFolder
{
public void PerformRWOperations()
{
Console.WriteLine( "Performing Read Write operation on the Shared Folder" );
}
}
}
|
Bước 4: Tạo Proxy Object (đối tượng thay thế).
SharedFolderProxy.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace ProxyDesignPattern
{
class SharedFolderProxy : ISharedFolder
{
private ISharedFolder folder;
private Employee employee;
public SharedFolderProxy(Employee emp)
{
employee = emp;
}
public void PerformRWOperations()
{
if (employee.Role.ToUpper() == "CEO" || employee.Role.ToUpper() == "MANAGER" )
{
folder = new SharedFolder();
Console.WriteLine( "Shared Folder Proxy makes call to the RealFolder 'PerformRWOperations method'" );
folder.PerformRWOperations();
}
else
{
Console.WriteLine( "Shared Folder proxy says 'You don't have permission to access this folder'" );
}
}
}
}
|
Bước 5: Tạo class Program để chạy chương trình và kiểm tra kết quả.
Program.cs
using System;
namespace ProxyDesignPattern
{
class Program
{
static void Main( string [] args)
{
Console.WriteLine( "Client passing employee with Role Developer to folderproxy" );
Employee emp1 = new Employee( "Anurag" , "Anurag123" , "Developer" );
SharedFolderProxy folderProxy1 = new SharedFolderProxy(emp1);
folderProxy1.PerformRWOperations();
Console.WriteLine();
Console.WriteLine( "Client passing employee with Role Manager to folderproxy" );
Employee emp2 = new Employee( "Pranaya" , "Pranaya123" , "Manager" );
SharedFolderProxy folderProxy2 = new SharedFolderProxy(emp2);
folderProxy2.PerformRWOperations();
Console.WriteLine( "\n------------------------------------" );
Console.WriteLine( "Chuong trinh nay duoc dang tai thuanhoaonline.com" );
Console.Read();
}
}
}
|
Kết quả:
![](data:image/png;base64,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)