Một vài practices và conventions có thể giúp cho việc sử dụng repository của bạn dễ thở hơn ;)
1. Define repository as service
1 | app.repository.user: |
Sử dụng:
1 | // old |
Việc khai báo repository thành service có các lợi điểm:
- Dễ dàng inject vào các service khác (thể hiện rõ ràng service depends những cháu nào)
- Khi thay đổi repository class chỉ việc thay đổi một chỗ ở
service.yml
2. Put save method to repository
1 | class ProfileRepository extends EntityRepository |
Sử dụng sẽ gọn gàng hơn:
1 | $profile = new Profile(); |
Ngoài ra có thêm 1 lợi điểm nữa là có thể tương tác với entity trước khi save vào db, ví dụ thay đổi giá trị updatedAt = new \DateTime()
3. Document var
Khi sử dụng method custom
của repository, nên có document var
cho repository. Lợi điểm là:
- Dễ tìm được những nơi nào sử dụng method này (Find Usage)
- Dễ tìm tới nơi define method (Go to Declaration)
1 | // don't need declare document var because this repository use find method (base method) |
4. Method Custom Naming
Chúng ta nên có những quy chuẩn để việc sử dụng các method custom được dễ dàng hơn
findBy...
: trả về array các object mục tiêu (vs UserRepository trả về array object User) hoặc array rỗngfind...
: trả về object mục tiêu hoặcnull
get...
: trả về các kết quả không phải là object mục tiêu. Vd: trongUserRepository
có methodgetIds
sẽ trả về array các id củaUser
. Với loại này, cần lưu ý:- throw Exception mái thoải
- nên có document dữ liệu sample trả về
1 | /** |