pls don't, it's another bad coding practiceNếu muốn làm triệt để hài hòa cả performance lẫn clean code thì câu query mẫu có thể có input là list các field muốn query, mỗi feature nào cần dùng sẽ tự truyền các field mình muốn lấy, vẫn thỏa điều kiện phần code build query gốc không thay đổi![]()

Đó là lười biếng không phải là cleancodeMình lại ủng hộ select * vì có thể tái sử dụng câu sql này cho nhiều api cần các field khác nhau, mỗi api sẽ tự transform để lấy 1 số field nó cần, và câu sql gốc không cần chỉnh sửa, thêm bớt fieldMình nghĩ đó mới là clean code
![]()
))), cleancode dễ đọc và dễ maintain cái select * chả được đạt cái nào ỏ trong cái đó cả. Thậm chí bác chẳng biết lấy chính lý luận của Uncle Bob, là small code của ổng để lý luận thì có lẽ bác chả biết tí gì về cleancode rNếu thế thì tha viết raw query còn tốt hơn, còn phải thêm where, order ... nữa mà.Nếu muốn làm triệt để hài hòa cả performance lẫn clean code thì câu query mẫu có thể có input là list các field muốn query, mỗi feature nào cần dùng sẽ tự truyền các field mình muốn lấy, vẫn thỏa điều kiện phần code build query gốc không thay đổi![]()
Đúng rồi bạn. Kể cả 2 use case có query giống nhau cũng viết 2 câu. Vì nếu sau này 1use case thay đổi thì sửa nó ko bị sai use case khácMình cũng khá mù mờ về vụ này, vậy các thím giải quyết như thế nào nhỉMỗi use case sẽ viết lại 1 câu query mới nhỉ?
Nếu muốn làm triệt để hài hòa cả performance lẫn clean code thì câu query mẫu có thể có input là list các field muốn query, mỗi feature nào cần dùng sẽ tự truyền các field mình muốn lấy, vẫn thỏa điều kiện phần code build query gốc không thay đổi![]()
Nếu app code mà được tuỳ biến fields trong query đến DB thì quá nhiều rủi ro về security như SQL injection, expose những field cần bảo mật vì tôi đoán để dựng lại query với input fields thím sẽ dùng CONCAT. Thím hãy coi DB là 1 service như các service bình thường khác, data whitelisting chứ không phải blacklisting.Nếu thế thì tha viết raw query còn tốt hơn, còn phải thêm where, order ... nữa mà.
Trong API, nói chung mỗi method nên dùng 1 query riêng. Thím có thể xem xét dùng chung query cho các version khác nhau của cùng 1 method và các version phải backward compatibleMình cũng khá mù mờ về vụ này, vậy các thím giải quyết như thế nào nhỉMỗi use case sẽ viết lại 1 câu query mới nhỉ?
Nói mới nhớ, cách đây mấy năm tôi đã phải maintain 1 con stored procedure khoảng 1500 lines. Sau quyết định đập đi hết, chuyển logic vào java code.Confirm. Từng maintain một dự án mà phần code chỉ là 1 layer mỏng. Có bao nhiêu business logic tụi nó nhét dưới sp hết. Mỗi lần đọc hiểu logic khóc tiếng mán luôn, chưa nói đến việc sửa.
CodeFirst chỉ áp dụng cho C# thôi hả bạn. Có áp dụng cho NodeJs, PHP, Java được không ạ.Mình cũng chỉ toàn dùng ORM Entity framework Code first. Giờ EF6 mới ra nghe nói cải thiện hơn 90% performance so với EF5 nên chắc sau này cũng ít cơ hội đụng tới mấy món SQL, SP... này.
Cái này chắc để ae dev khác confirm. Do mình coder trái ngành nên xác định gắn chặt với hệ sinh thái .NET rồi chưa có cơ hội đụng với các ngôn ngữ backend khác.CodeFirst chỉ áp dụng cho C# thôi hả bạn. Có áp dụng cho NodeJs, PHP, Java được không ạ.
Với kinh nghiệm và kiến thức của em thì khi gặp vấn đề performance sql query em sẽ xử lý như sau:
- thường phổ biến nhất là dùng index
- nolock
- với mấy cái rule khi viết sql như tránh select *, tránh union, tránh nested select
- hoặc dùng store procedure nếu query đó chạy nhiều lần
Mấy thím có solution nào khác chỉ giúp em với?
TypeOrm nếu không select field thì sẽ sinh rathực ra dùng ORM thì làm gì có cơ hội nó sinh ra câu query 'select *' mà lo![]()
select *Bình thường với ORM, thím check performance như thế nào? Tìm câu query do framework generate ra trong log rồi chạy thử manually à?Mình cũng chỉ toàn dùng ORM Entity framework Code first. Giờ EF6 mới ra nghe nói cải thiện hơn 90% performance so với EF5 nên chắc sau này cũng ít cơ hội đụng tới mấy món SQL, SP... này.
Em chỉ làm mấy hệ thống nhỏ và không đòi hỏi cao nên chưa check performance kỹ bao giờ bác à. Em test ở localhost nếu response của API trả về < 300 ms là đối với em nó ok rồiBình thường với ORM, thím check performance như thế nào? Tìm câu query do framework generate ra trong log rồi chạy thử manually à?

Nên làm stress test để tìm bottleneck.Em chỉ làm mấy hệ thống nhỏ và không đòi hỏi cao nên chưa check performance kỹ bao giờ bác à. Em test ở localhost nếu response của API trả về < 300 ms là đối với em nó ok rồi![]()
Nói thím đừng buồn chứ test và optimize DB perf trên localhost, data không đủ lớn mà lại gọi qua API thì gần như là vô nghĩa.Em chỉ làm mấy hệ thống nhỏ và không đòi hỏi cao nên chưa check performance kỹ bao giờ bác à. Em test ở localhost nếu response của API trả về < 300 ms là đối với em nó ok rồi![]()
100m bản ghi mà cứ 1k thì bao giờ mới xongLớn thì cũng nên batch processing chứ nhỉ, kéo từng lô 1000 records ra xử lý xong lấy lô khác, chứ lấy hết lên rồi mới đẩy đi thì RAM đâu cho đủ![]()
)