@quynh001 Mình cũng không đồng tình với cách làm của Laravel.
Type hinting là contract mà lại sử dụng specific method trong concrete class thì rõ ràng là không hợp lý.
Theo mình contract sinh ra là để có thể custom, thay đổi implement dễ dàng và chỉ cần refer đến contract. Chẳng lẽ đã có contract rồi lại phải tìm trong concrete class xem có method nào khác để implement?
Simplicity
When all of Laravel's services are neatly defined within simple interfaces, it is very easy to determine the functionality offered by a given service. The contracts serve as succinct documentation to the framework's features.
In addition, when you depend on simple interfaces, your code is easier to understand and maintain. Rather than tracking down which methods are available to you within a large, complicated class, you can refer to a simple, clean interface.
Cũng có nhiều issue về vấn đề này nhưng có issue được fix, có issue thì không, và vẫn chưa có câu trả lời nào xác đáng cả
I understand what you are saying that this is technically incorrect without the method on the interface. I understand that just fine, but, this is not the only place where this occurs, and Taylor intentionally missed out some methods.
Có vẻ như có quá nhiều chỗ đã dùng theo cách này, giờ nếu thêm method vào interface có thể gây ra breaking changes nên họ quyết định là won't fix
Còn đoạn này thì mình không hiểu lắm: Taylor cố tình bỏ qua một số method??
Taylor intentionally missed out some methods
Có khi bạn hỏi ông Taylor phát cho a e thông suốt được không
Mình cũng ít code trên notepad ++ chỉ thỉnh thoảng sửa cái gì đó nhỏ lẻ và đơn giản thì mới mở notepad++ lên sửa 1 xíu cho nhanh. Chứ nếu mình thường xuyên dùng notepad++ hoặc bất cứ editor nào không có sẵn tính nắng format code thì mình cũng sẽ cài thêm plugin cho nó để sử dụng.
Hình ảnh của mình đã được lưu trong database với dạng <img src="..."></img>
Có cách nào để convert cái đó qua dạng lazy như bạn chia sẻ bên trên không nhỉ? <img class="lazy" src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-original="img/example.jpg" width="640" height="480">
function foo() {
var a = 2;
console.log(a);
}
function bar() {
var a = 3;
foo();
}
var a = 'Ahihi';
bar();
=> Đoạn code sẽ in ra 2 => Cái này ok mình hiểu đươc.
Vi mình hiểu khi đứng trong hàm bar() mà gọi đến hàm foo() thì code sẽ biên dịch tương đương thế này:
function bar() {
var a = 3;
var a = 2;
console.log(a);
}
var a = 'Ahihi';
bar();
Nhưng còn cái này bạn nói : Và nếu ta bỏ đoạn code var a = 2; trong function foo thì nó sẽ in ra ... Ahihi.
Mình nghĩ bỏ var a = 2 đi thì code sẽ biên dịch tương đương vầy:
function bar() {
var a = 3;
var a = 2;// => bỏ
console.log(a);
}
var a = 'Ahihi';
bar();
Vậy tại sao nó không log ra giá trị 3 mà lại là 'Ahihi' ?
Nguyên lý cuối cùng trong SOLID chính là Dependency Inversion:
Các module cấp cao không nên phụ thuộc vào các modules cấp thấp.
Cả 2 nên phụ thuộc vào abstraction.
Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại.
( Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation.)
Mình chưa hiểu khúc này lắm, ví dụ mình có class A, và class B implement C.
A có dependency tới B, nhưng A quyết định abstract dependency bằng cách declare tới C và instance khởi tạo là B.
Vậy ví dụ mình vừa nêu thì nó đang hiện thực cho (1), hay (2) hay cả (1) và (2) vậy bạn?
THẢO LUẬN
@quynh001 Mình cũng không đồng tình với cách làm của Laravel.
Type hinting là contract mà lại sử dụng specific method trong concrete class thì rõ ràng là không hợp lý.
Theo mình contract sinh ra là để có thể custom, thay đổi implement dễ dàng và chỉ cần refer đến contract. Chẳng lẽ đã có contract rồi lại phải tìm trong concrete class xem có method nào khác để implement?
Cũng có nhiều issue về vấn đề này nhưng có issue được fix, có issue thì không, và vẫn chưa có câu trả lời nào xác đáng cả
Trong pull này ông GrahamCampbell có trả lời:
Có vẻ như có quá nhiều chỗ đã dùng theo cách này, giờ nếu thêm method vào interface có thể gây ra breaking changes nên họ quyết định là won't fix
Còn đoạn này thì mình không hiểu lắm: Taylor cố tình bỏ qua một số method??
Có khi bạn hỏi ông Taylor phát cho a e thông suốt được không
Mình là một người vô cùng thích code trên notepad. và mình tin rằng cũng có rất nhiều người giống như mình.
Kỹ như này mà chẳng ai like ). Mình vote cách đầu dù làm cho ai đi nữa. Vừa học được, về lâu dài tốt hơn.
Mình cũng ít code trên notepad ++ chỉ thỉnh thoảng sửa cái gì đó nhỏ lẻ và đơn giản thì mới mở notepad++ lên sửa 1 xíu cho nhanh. Chứ nếu mình thường xuyên dùng notepad++ hoặc bất cứ editor nào không có sẵn tính nắng format code thì mình cũng sẽ cài thêm plugin cho nó để sử dụng.
Những editor như notepad++ không có sẵn tính năng này đâu bạn .
mà mình còn chưa hiểu chỗ API khi xây dựng 1 SPA : "
Ứng dụng của bạn phải phát hành một API cho các client khác (nội bộ hoặc công khai).
"bạn có thể giải thích cho mình API là gì và sao làm SPA lại phải có API được không ?
cám ơn bạn, bài viết hữu ích với mình
Hình ảnh của mình đã được lưu trong database với dạng <img src="..."></img> Có cách nào để convert cái đó qua dạng lazy như bạn chia sẻ bên trên không nhỉ? <img class="lazy" src="data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-original="img/example.jpg" width="640" height="480">
Bài viết liệu có quá sơ sài khi chỉ nói về một phần của monkey patching :-?
(khoc)
Hiếu ơi về Div 1 đi
Host thứ 6 nên k đi được vì đi làm. Chắc có nhiều anh em giống mình
Có cảm giác như bạn dùng google dịch thì phải. Nếu dịch những bài kiểu như này làm cho người đọc dễ loạn thêm.
Ruby on Rails được giới thiệu vào năm 2004, và phát hành chính thức vào tháng 12 năm 2005 bạn nhé.
Mình cũng thích CI. Nhưng mà đợi CI 4 mấy năm rồi vẫn chưa ra
Code Igniter + Twig = Framework vô địt
Thanks, lại biết thêm 1 chút rồi
bạn cho mình hỏi ở ví dụ này :
=> Đoạn code sẽ in ra 2 => Cái này ok mình hiểu đươc. Vi mình hiểu khi đứng trong hàm
bar()
mà gọi đến hàmfoo()
thì code sẽ biên dịch tương đương thế này:Nhưng còn cái này bạn nói :
Và nếu ta bỏ đoạn code var a = 2; trong function foo thì nó sẽ in ra ... Ahihi.
Mình nghĩ bỏvar a = 2
đi thì code sẽ biên dịch tương đương vầy:Vậy tại sao nó không log ra giá trị
3
mà lại là'Ahihi'
?Nguyên lý cuối cùng trong SOLID chính là Dependency Inversion:
Các module cấp cao không nên phụ thuộc vào các modules cấp thấp. Cả 2 nên phụ thuộc vào abstraction.
Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại. ( Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation.)
Mình chưa hiểu khúc này lắm, ví dụ mình có class A, và class B implement C. A có dependency tới B, nhưng A quyết định abstract dependency bằng cách declare tới C và instance khởi tạo là B. Vậy ví dụ mình vừa nêu thì nó đang hiện thực cho (1), hay (2) hay cả (1) và (2) vậy bạn?