Professional Documents
Culture Documents
Nhom3 Repository-Pattern
Nhom3 Repository-Pattern
Thành viên :
1.Repository là gì ?
Repository Pattern là một cách tổ chức source code trong Laravel. Ý tưởng
cơ bản và mục tiêu chính để sử dụng Repository Pattern là xây dựng một lớp kết
nối giữa tầng Business Login và Data Access, giúp cho việc truy cập dữ liệu
được chặt chẽ và bảo mật hơn.
Nhìn vào ảnh này các ban có thể hình dung qua nó, Repository Pattern là lớp
trung gian giữa tầng Data Access và Business Logic, hiểu môm na thì nó là lớp
trung gian giữa việc truy cập dữ liệu và xử lý logic giúp cho việc truy cập dữ liệu
chặt chẽ và bảo mật hơn.
Bình thường để lấy dữ liệu gì đó hiển thị ra view thì chúng ta đơn giản viết
một Controller query đến Database để lấy ra dữ liệu. Nhưng với Repository
pattern như hình trên chúng ta thấy Repository nó nằm giữa, là trung gian giữa
Controller và Model. Hiểu đơn giản thì như thế này, khi có request gọi tới
controller, controller gọi tới Repository rồi Repository gọi tới model lấy data và
xử lý, controller lấy dữ liệu thì chỉ việc gọi đến Repository.
1. Tách biệt lớp dữ liệu: Repository Pattern giúp tách biệt logic truy cập dữ
liệu và logic kinh doanh của ứng dụng. Điều này cho phép độc lập và dễ dàng
thay đổi trong việc truy cập dữ liệu mà không ảnh hưởng đến các thành phần
khác trong hệ thống.
2. Tích hợp dữ liệu: Repository Pattern cung cấp một cách thức tiếp cận
chung để truy xuất và tương tác với dữ liệu từ các nguồn khác nhau như cơ sở dữ
liệu SQL, NoSQL, API bên ngoài và nhiều nguồn dữ liệu khác. Việc sử dụng
Repository Pattern giúp giảm sự ràng buộc với một nguồn dữ liệu cụ thể và giúp
dễ dàng thay đổi nguồn dữ liệu khi cần thiết.
3. Dễ dàng kiểm thử: Bằng cách sử dụng Repository Pattern, ta có thể thiết
kế các kế thừa từ một giao diện hoặc lớp trừu tượng và triển khai chúng trong
các lớp giả mạo (mock objects) trong quá trình kiểm thử. Điều này giúp đơn giản
hóa việc kiểm thử độc lập của các phần tử trong hệ thống mà không cần phụ
thuộc vào các nguồn dữ liệu thực tế.
1. Tăng tính mô-đun hóa: Repository Pattern giúp tách biệt lớp dữ liệu, giúp
cho việc phát triển và bảo trì ứng dụng trở nên dễ dàng hơn thông qua việc phân
chia các thành phần thành các mô-đun độc lập.
2. Tính dễ mở rộng: Với Repository Pattern, việc thay đổi nguồn dữ liệu
hoặc cách truy cập dữ liệu trở nên dễ dàng hơn. Điều này cho phép tính linh hoạt
và dễ dàng mở rộng hệ thống trong tương lai mà không làm ảnh hưởng đến các
thành phần khác.
3. Tính cô đọng: Sử dụng Repository Pattern giúp giảm thiểu sự trùng lặp
mã và giữ cho logic truy xuất dữ liệu được cô đọng và quản lý tốt hơn. Điều này
dẫn đến mã nguồn dễ đọc, hiểu và bảo trì hơn.
3. Đối tượng (Object): Đây là đối tượng dữ liệu cần được truy cập và quản
lý thông qua Repository. Đối tượng này có thể là một đối tượng kinh doanh,
một đối tượng giao diện người dùng hoặc bất kỳ đối tượng nào khác mà bạn
muốn lưu trữ hoặc truy xuất dữ liệu.
5. Dịch vụ kết nối (Connection Service): Đây là dịch vụ hoặc lớp dùng để
cung cấp kết nối tới nguồn dữ liệu. Nó được sử dụng để tạo và cung cấp đối
tượng DbContext/EntityManager cho Repository. Dịch vụ kết nối có thể thực
hiện việc cấu hình kết nối, xử lý lỗi kết nối, và quản lý vòng đời của kết nối.
Qua cấu trúc trên, Repository Pattern giúp tách biệt logic truy cập dữ liệu
(Repository) với logic kinh doanh (đối tượng), tạo ra một lớp trung gian để
giảm sự phụ thuộc và cung cấp khả năng kiểm thử, bảo trì và mở rộng tốt hơn
trong ứng dụng.
1.Định nghĩa giao diện Repository: Bắt đầu bằng cách định nghĩa một giao diện
(interface) cho Repository, chứa các phương thức cơ bản để truy cập và quản lý
dữ liệu. Ví dụ:
// Thực hiện các thao tác khác liên quan đến sản phẩm
// ...
}
Lưu ý rằng quá trình triển khai Repository Pattern có thể thay đổi tùy thuộc vào
ngôn ngữ lập trình và công nghệ bạn sử dụng. Điều quan trọng là duy trì nguyên
tắc tách biệt logic truy cập dữ liệu và logic kinh doanh trong ứng dụng.
Để triển khai Repository Pattern với các loại cơ sở dữ liệu khác nhau,
bạn có thể tạo ra các interface tương ứng cho từng loại cơ sở dữ liệu. Ví
dụ, nếu bạn muốn triển khai Repository Pattern với MySQL, bạn có thể
tạo ra interface IMySqlRepository và các class tương ứng để thực hiện
các phương thức của interface đó. Tương tự, nếu bạn muốn triển khai
Repository Pattern với MongoDB hoặc SQLite, bạn có thể tạo ra các
interface IMongoDbRepository và ISqliteRepository và các class tương
ứng để thực hiện các phương thức của chúng.
Khi sử dụng repository pattern, bạn cần lưu ý các điểm sau:
1. Quản lý phụ thuộc: Repository pattern giúp tách biệt việc truy cập cơ
sở dữ liệu khỏi lớp logic của ứng dụng. Tuy nhiên, bạn cần chắc chắn
rằng các phụ thuộc giữa các lớp được quản lý một cách rõ ràng và không
có sự phụ thuộc lẫn nhau không cần thiết.
2. Quy mô: Repository pattern thích hợp cho các ứng dụng có quy mô lớn
và có nhiều thao tác với cơ sở dữ liệu. Nếu ứng dụng của bạn quá nhỏ và
chỉ có một số ít câu truy vấn đơn giản, việc triển khai repository pattern
có thể là một sự rườm rà không cần thiết.
3. Phù hợp: Repository pattern không phải lúc nào cũng phù hợp cho tất
cả các tình huống. Bạn cần xem xét cẩn thận và đánh giá xem liệu việc
triển khai repository pattern có thực sự giúp tạo ra sự trừu tượng và linh
hoạt hay không. Đôi khi, việc sử dụng các lớp dịch vụ trực tiếp để truy
cập cơ sở dữ liệu có thể đủ để đáp ứng yêu cầu của ứng dụng.
4. Hiệu suất: Repository pattern có thể có ảnh hưởng đến hiệu suất của
ứng dụng. Nếu bạn không quản lý tốt việc truy vấn và cache dữ liệu, việc
sử dụng repository pattern có thể làm tăng độ trễ và giảm hiệu suất.
5. Tách biệt logic: Một trong những mục tiêu chính của repository pattern
là tách biệt logic của ứng dụng và truy cập cơ sở dữ liệu. Điều này giúp
dễ dàng thay đổi và kiểm thử logic mà không cần bận tâm đến cơ sở dữ
liệu. Tuy nhiên, bạn cần đảm bảo rằng sự tách biệt này đúng mức, không
làm mất đi tính hiệu quả hoặc gây ra sự phức tạp không cần thiết.
7.Tổng Kết.
Tổng kết lại, Repository Pattern là một mô hình quản lý truy cập dữ liệu linh
hoạt, giúp tách biệt và tái sử dụng mã nguồn, tăng tính di động và testability của
ứng dụng, và giúp phát triển ứng dụng một cách có cấu trúc và bảo trì tốt hơn.