Đây là một chút của một câu hỏi kết thúc mở nhưng tôi muốn có một số ý kiến, khi tôi lớn lên trong một thế giới nơi các tập lệnh SQL nội tuyến là chuẩn mực, sau đó tất cả chúng tôi đều nhận thức rất rõ về các vấn đề dựa trên nội dung SQL, và sql mong manh như thế nào khi thực hiện các thao tác chuỗi khắp nơi.
Sau đó, đến buổi bình minh của ORM nơi bạn đang giải thích truy vấn về ORM và để nó tự tạo SQL, trong nhiều trường hợp không tối ưu nhưng an toàn và dễ dàng. Một điều tốt nữa về các ORM hoặc các lớp trừu tượng cơ sở dữ liệu là SQL được tạo bằng công cụ cơ sở dữ liệu của nó, vì vậy tôi có thể sử dụng Hibernate / Nhibernate với MSSQL, MYSQL và mã của tôi không bao giờ thay đổi nó chỉ là một chi tiết cấu hình.
Bây giờ nhanh chóng chuyển tiếp đến ngày hôm nay, nơi các Micro ORM dường như đang chiến thắng nhiều nhà phát triển hơn, tôi đã tự hỏi tại sao chúng ta dường như đã thực hiện một U-Turn trên toàn bộ chủ đề sql nội tuyến.
Tôi phải thừa nhận rằng tôi thích ý tưởng không có tệp cấu hình ORM và có thể viết truy vấn của mình theo cách tối ưu hơn nhưng có cảm giác như tôi đang tự mở lại các lỗ hổng cũ như SQL SQL và tôi cũng đang tự buộc mình vào một công cụ cơ sở dữ liệu vì vậy nếu tôi muốn phần mềm của mình hỗ trợ nhiều công cụ cơ sở dữ liệu, tôi sẽ cần thực hiện thêm một số hoạt động hack chuỗi mà dường như sau đó bắt đầu làm cho mã không thể đọc được và dễ vỡ hơn. (Ngay trước khi ai đó đề cập đến nó, tôi biết bạn có thể sử dụng các đối số dựa trên tham số với hầu hết các orms vi mô cung cấp sự bảo vệ trong hầu hết các trường hợp từ tiêm sql)
Vì vậy, ý kiến của mọi người về loại điều này là gì? Tôi đang sử dụng Dapper làm Micro ORM của tôi trong trường hợp này và NHibernate là ORM thông thường của tôi trong kịch bản này, tuy nhiên hầu hết trong mỗi lĩnh vực đều khá giống nhau.
Những gì tôi gọi là sql nội tuyếnlà các chuỗi SQL trong mã nguồn. Đã từng có những cuộc tranh luận về thiết kế đối với các chuỗi SQL trong mã nguồn làm mất đi mục đích cơ bản của logic, đó là lý do tại sao các truy vấn kiểu linq được nhập tĩnh trở nên phổ biến chỉ là 1 ngôn ngữ, nhưng hãy nói C # và Sql trong một trang bạn có Bây giờ có 2 ngôn ngữ xen kẽ trong mã nguồn thô của bạn. Để làm rõ, việc tiêm SQL chỉ là một trong những vấn đề đã biết khi sử dụng chuỗi sql, tôi đã đề cập đến việc bạn có thể ngăn điều này xảy ra với các truy vấn dựa trên tham số, tuy nhiên tôi nhấn mạnh các vấn đề khác khi có các truy vấn SQL ăn sâu vào mã nguồn của bạn, chẳng hạn như thiếu tính trừu tượng của Nhà cung cấp DB cũng như mất bất kỳ mức độ lỗi thời gian biên dịch nào đối với các truy vấn dựa trên chuỗi, đây là tất cả các vấn đề mà chúng tôi đã quản lý để bước bên cạnh bình minh của ORM với chức năng truy vấn cấp cao hơn,
Vì vậy, tôi ít tập trung vào các vấn đề nổi bật riêng lẻ và hơn nữa là bức tranh lớn hơn hiện đang trở nên dễ chấp nhận hơn khi có các chuỗi SQL trực tiếp trong mã nguồn của bạn, vì hầu hết các Micro ORM đều sử dụng cơ chế này.
Đây là một câu hỏi tương tự có một vài quan điểm khác nhau, mặc dù nhiều hơn về sql nội tuyến mà không có bối cảnh micro orm: