@skd_nt : Cảm ơn bạn đã quan tâm đến bài viết.
Mình có bài viết chi tiết hơn một chút về cách triển khai Repository Pattern trong Laravel.
Trường hợp bạn muốn sử dụng đồng thời việc lấy dữ liệu của Post thông qua PostRepository bằng cách lấy thông tin thông qua ORM và Redis thì nên xây dựng 2 repository EloquentPostRepository và RedisPostRepository và inject vào __construct() của Controller.
Mình nghĩ còn phụ thuộc vào logic bài toán mà bạn định thực hiện nữa. Giả sử ta cần tìm các feature post, nếu không có trong Redis thì lấy từ Database, có những phương án sau:
Chỉ viết PostRepository thôi và ta sẽ xử lý cả ORM và Redis ngay trong chính Repository đó, Controller chỉ cần biết sử dụng hàm featurePost() mà không cần quan tâm trong đó xử lý ra sao.
Tách ra 2 Repository và xử lý if ... then ... else ở trong Controller
Trường hợp bạn sử dụng ORM và Redis ở những action khác nhau không phụ thuộc vào nhau thì nên tách thành 2 Repository.
Chào bạn.
Cảm ơn về nhưng chia sẻ của bạn.
Cho mình hỏi. Nếu trong PostController mình cần sử dụng cả ORM và redis cả 2 đều extend PostRepository thì phải làm như thế nào.
Cảm ơn ban
như mình đã nói ở cách 3 phần nhược điểm. và nếu bạn đọc kỹ bài bạn có thể thấy mình đang nói đến 1 dự án mà tất cả các màn hình đều có thể thay đổi được ngôn ngữ bạn ạ(app mình dang làm thì là như vậy). mà khi đã làm thì k có gì là k thể xảy ra, cái này do khách hàng họ yêu cầu hãy tập sống với trường hợp xấu nhất. có 1 cách nữa gần giống với cách 3, cách này bạn chỉ cần custom lại view và có 1 interface lắng nghe. cảm ơn bạn đã có ý kiến
Bài này nghe có vẻ thú vị. Nhưng chờ đã! Mình cũng thói quen dùng enum nhưng ngoài việc type safety cho method, thì enum còn có tác dụng trong việc print giá trị 1 cách dễ hiểu. Ví dụ:
public static final int TYPE_MUSIC = 0;
public static final int TYPE_PHOTO = 1;
public static final int TYPE_TEXT = 2;
Mình có ghi log giá trị của biến type, thì chỉ có thể ra 0, 1 hoặc 2, và muốn biết nó có ý nghĩa gì thì mình phải mò mẫm vào trong file chứa 3 int constant như trên, hoặc mình phải viết 1 hàm util trung gian chỉ để print giá trị dưới dạng đọc được.
if (type == 0) {
Log.d("", "TYPE_MUSIC");
} else if (type == 1) {
Log.d("", "TYPE_PHOTO");
} else {
Log.d("", "TYPE_TEXT");
}
Với enum thì khá dễ dàng khi print ra giá trị TYPE_MUSIC, TYPE_PHOTO, TYPE_TEXT luôn.
Cái khoản print giá trị này thì dùng Enumerated Annotations ko giải quyết được nhỉ -.-
Cá nhân mình thấy thì nếu app ko dùng quá nhiều enum thì vẫn cứ tiếp tục dùng enum bình thường thôi, apk size cũng ko lớn hơn là bao, nhưng bù lại thì dùng enum được print giá trị để debug maintain phần mềm về sau sẽ có lợi hơn nhiều.
Chưa thấy ai comment hỉ @@
Thực ra thì mình thấy ở cách 3 nhìn vào code là thấy khó chịu rồi vì code phải loop qua 1 loạt view con trong viewgroup, mặc dù bạn nói performance vẫn ổn.
Nhưng nhức mắt nhất vẫn là code if else quá nhiều kèm theo instanceof, làm cho code quá tight coupling mất đi flexibility và khó maintain lắm.
Mà mình thấy ko có nhiều phần mềm có chức năng set language lắm, hầu như toàn để user vào system set language ko và sau đó app tự change theo thôi à @@
@hunghanam Thank ông đã chia sẻ, còn về thông tin để lộ thì xin đính chính chút là trong quá viết bài, một số hình ảnh tôi lười chụp lên search trên mạng ảnh tương tự luôn , bình thường nếu là của tôi thì tôi sẽ làm mờ phần thông tin đó.
THẢO LUẬN
@skd_nt : Cảm ơn bạn đã quan tâm đến bài viết. Mình có bài viết chi tiết hơn một chút về cách triển khai Repository Pattern trong Laravel. Trường hợp bạn muốn sử dụng đồng thời việc lấy dữ liệu của
Post
thông quaPostRepository
bằng cách lấy thông tin thông quaORM
vàRedis
thì nên xây dựng 2 repositoryEloquentPostRepository
vàRedisPostRepository
vàinject
vào __construct() của Controller. Mình nghĩ còn phụ thuộc vào logic bài toán mà bạn định thực hiện nữa. Giả sử ta cần tìm các feature post, nếu không có trong Redis thì lấy từ Database, có những phương án sau:PostRepository
thôi và ta sẽ xử lý cảORM
vàRedis
ngay trong chính Repository đó, Controller chỉ cần biết sử dụng hàmfeaturePost()
mà không cần quan tâm trong đó xử lý ra sao.if ... then ... else
ở trong ControllerTrường hợp bạn sử dụng
ORM
vàRedis
ở những action khác nhau không phụ thuộc vào nhau thì nên tách thành 2 Repository.Chào bạn. Cảm ơn về nhưng chia sẻ của bạn. Cho mình hỏi. Nếu trong PostController mình cần sử dụng cả ORM và redis cả 2 đều extend PostRepository thì phải làm như thế nào. Cảm ơn ban
bạn chat skype cho mình nhé : ngocduk54a2
Mình đang đứng trên view của Tester nhé. 1 số công ty thì QA chính là Tester .
Câu hỏi là gì vậy anh
như mình đã nói ở cách 3 phần nhược điểm. và nếu bạn đọc kỹ bài bạn có thể thấy mình đang nói đến 1 dự án mà tất cả các màn hình đều có thể thay đổi được ngôn ngữ bạn ạ(app mình dang làm thì là như vậy). mà khi đã làm thì k có gì là k thể xảy ra, cái này do khách hàng họ yêu cầu hãy tập sống với trường hợp xấu nhất. có 1 cách nữa gần giống với cách 3, cách này bạn chỉ cần custom lại view và có 1 interface lắng nghe. cảm ơn bạn đã có ý kiến
cho e xin cái sourse ạ
Bài này nghe có vẻ thú vị. Nhưng chờ đã! Mình cũng thói quen dùng enum nhưng ngoài việc type safety cho method, thì enum còn có tác dụng trong việc print giá trị 1 cách dễ hiểu. Ví dụ: public static final int TYPE_MUSIC = 0; public static final int TYPE_PHOTO = 1; public static final int TYPE_TEXT = 2; Mình có ghi log giá trị của biến type, thì chỉ có thể ra 0, 1 hoặc 2, và muốn biết nó có ý nghĩa gì thì mình phải mò mẫm vào trong file chứa 3 int constant như trên, hoặc mình phải viết 1 hàm util trung gian chỉ để print giá trị dưới dạng đọc được. if (type == 0) { Log.d("", "TYPE_MUSIC"); } else if (type == 1) { Log.d("", "TYPE_PHOTO"); } else { Log.d("", "TYPE_TEXT"); } Với enum thì khá dễ dàng khi print ra giá trị TYPE_MUSIC, TYPE_PHOTO, TYPE_TEXT luôn. Cái khoản print giá trị này thì dùng Enumerated Annotations ko giải quyết được nhỉ -.- Cá nhân mình thấy thì nếu app ko dùng quá nhiều enum thì vẫn cứ tiếp tục dùng enum bình thường thôi, apk size cũng ko lớn hơn là bao, nhưng bù lại thì dùng enum được print giá trị để debug maintain phần mềm về sau sẽ có lợi hơn nhiều.
Chưa thấy ai comment hỉ @@ Thực ra thì mình thấy ở cách 3 nhìn vào code là thấy khó chịu rồi vì code phải loop qua 1 loạt view con trong viewgroup, mặc dù bạn nói performance vẫn ổn. Nhưng nhức mắt nhất vẫn là code if else quá nhiều kèm theo instanceof, làm cho code quá tight coupling mất đi flexibility và khó maintain lắm. Mà mình thấy ko có nhiều phần mềm có chức năng set language lắm, hầu như toàn để user vào system set language ko và sau đó app tự change theo thôi à @@
Thanks
Hi bạn, hiện tại Elm vẫn đang trong quá trình phát triển để có thể sử dụng cho phần back-end, nếu muốn bạn có thể tham khảo cách thức và khả năng sử dụng của Elm khi viết back-end thông qua một số repo sau : https://github.com/eeue56/elm-server-side-renderer/ , https://github.com/eeue56/take-home .
Còn nếu dùng Elm cho back-end production thì mình tạm thời mình nghĩ ko nên sử dụng, bởi nó chưa được hoàn thiện
Em đang dùng javascript cả front-end lẫn back-end(nodejs). Vậy, sử dụng elm cho back-end được không?
Ad ơi em vẫn chưa hiểu bước tạo Scene cuối để làm gi v ad . ad có thể cho em facebook để hỏi thêm không ạ
Có vẻ như bạn này đang đứng ở vị trí của tester chứ ko phải QA.
Ôi tool rất hữu ích luôn, cảm ơn bạn.
Rất hay, bài của bạn giúp mình mở mang kiến thức về Laravel nhiều hơn. Cảm ơn chủ thớt đã chia sẻ
ok a :3
Danh dau bai nay ve doc dan keke
ngon hi hi
@hunghanam Thank ông đã chia sẻ, còn về thông tin để lộ thì xin đính chính chút là trong quá viết bài, một số hình ảnh tôi lười chụp lên search trên mạng ảnh tương tự luôn , bình thường nếu là của tôi thì tôi sẽ làm mờ phần thông tin đó.