Thắc mắc về Repository Pattern và Service Class

Hiện tại em vẫn đang học về cách viết Web API. Mn cho em/mình hỏi là vai trò của Repository Pattern và Service Class trong chương trình là như thế nào vậy ạ? Em có search google thì Repo pattern là bộ phận trung gian để access vô database còn Service Class là để handle phần xử lý logic của lớp Business.
Một số trang hướng dẫn em thấy người ta khởi tạo interface của Service với interface của Repository giống hệt nhau nên em khá rối. Mong mn giải đáp ạ, em/mình cảm ơn mn nhiều
Link web: An awesome guide on how to build RESTful APIs with ASP.NET Core (freecodecamp.org)


Em có search google thì Repo pattern là bộ phận trung gian để access vô database

Gần đúng rồi cậu :smile:
Định nghĩa của repository pattern trong sách “Patterns of Enterprise Application Architecture” là thế này:

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.

Repository là thành phần trung gian giữa domain (các object mô tả khái niệm của lĩnh vực mà app đang làm) và data mapping layer (map dữ liệu từ nguồn - thường là database, file - sang domain object để thao tác ở application của cậu). Cậu không trực tiếp thao tác với database connection hay file,… để lấy domain object, mà lấy domain object từ repository.
Ở các framework hiện đại, thao tác tới database (của DAO) và map dữ liệu từ database vào domain object thường được framework lo liệu, nên đôi khi cậu sẽ thấy có framework sử dụng repository là layer cuối cùng “trên bề mặt” để gọi tới database (thực chất có 2 layer nữa).


Service Class là để handle phần xử lý logic của lớp Business.

Về Service thì nó sẽ hơi phức tạp hơn chút, vì một số kiến trúc có định nghĩa service riêng của nó. Về cơ bản, cậu đã hiểu đúng. Tớ sẽ lấy Định nghĩa về Service layer trong “Patterns of Enterprise Application Architecture” để giải thích chính xác hơn như thế này:

Defines an application’s boundary with a layer of services that establishes a set of available operations and coordinates the application’s response in each operation.


Một số trang hướng dẫn em thấy người ta khởi tạo interface của Service với interface của Repository giống hệt nhau nên em khá rối.

Thực ra, các ví dụ thường chỉ làm các app CRUD đơn giản mà không có business logic nào. Những app như thế thì service chỉ delegate sang repository thôi, thế nên, tên method ở 2 bên giống nhau là điều dễ hiểu.

Hope it helps!

5 Likes

Cảm ơn bạn nhiều nhé ^^

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?