Những loại dự án phát triển Web nào được hưởng lợi từ việc sử dụng ORM?


10

Tôi sẽ bắt đầu bằng cách nói rằng tôi đã thực hiện 95% công việc cơ sở dữ liệu của mình bằng SQL. Gần đây, tôi đã thực hiện một số điều tra về các ORM khác nhau, chẳng hạn như NHibernate và Doctrine.

Tôi có thể thấy những lợi thế của việc không cần biết nhiều SQL và tính di động của cơ sở dữ liệu mà ORM cung cấp. Nhưng tôi cũng có thể thấy rằng việc biết SQL sẽ giúp làm việc với ORM hiệu quả hơn và tôi chỉ có thể nghĩ một lần trong sự nghiệp của mình rằng thay đổi lớn nhất của ứng dụng sẽ là nhà cung cấp cơ sở dữ liệu.

Vì tôi rất thoải mái khi viết SQL và dường như không nhận ra lợi ích thường được dạy khi sử dụng ORM, câu hỏi của tôi cho người dùng ORM nặng là:

Loại dự án phát triển Web nào có lợi nhất khi sử dụng ORM?


3
Câu trả lời là "Tất cả chúng." Nhưng đó có lẽ không phải là những gì bạn muốn biết. Bạn có thể muốn tinh chỉnh câu hỏi của bạn để hỏi một số thông tin cụ thể hơn.
S.Lott

1
Đối với tôi, SQL hiện dễ sản xuất hơn nhưng đó chỉ là do sự thích nghi của tôi (hoặc không biết gì). Tôi đã đọc rằng ORM không phải lúc nào cũng là lựa chọn tốt nhất vì nó chậm hơn SQL thông thường; tuy nhiên, nhiều nhà phát triển đã tuyên bố rằng điều này thường không quan trọng. Tôi chủ yếu tò mò về các dự án phù hợp nhất với ORM. Tôi có thể thấy hầu hết các câu trả lời có thể sẽ là "tất cả chúng" và điều đó cũng tốt. Tôi không tìm kiếm một câu trả lời cụ thể. :)
Fred Wilson

Nếu bạn không hỏi thêm chi tiết, bạn sẽ không học được nhiều.
S.Lott

Câu trả lời:


5

(Hầu hết) tất cả các ứng dụng được hưởng lợi từ ORM.

Đầu tiên, tôi không đồng ý với những lợi thế bạn liệt kê cho ORM .

  • Sử dụng ORM không nhất thiết có nghĩa là bạn không cần biết SQL. Một kiến ​​thức về SQL sẽ giúp hiểu công cụ ORM thực sự đang làm gì, điều này đặc biệt hữu ích trong quá trình gỡ lỗi. Hơn nữa, SQL thực sự có thể được yêu cầu để phát triển các truy vấn phức tạp nằm ngoài khả năng của ORM bạn đã chọn.
  • Và như bạn nói, tính di động hiếm khi là một mối quan tâm trong cuộc sống thực.

Thay vào đó, lợi ích thực sự của ORM là:

  • ORM tiết kiệm thời gian lập trình viên vì nó tiết kiệm được việc viết hàng tấn logic CRUD bằng SQL
  • nhiều ORM bao gồm logic bộ nhớ đệm phức tạp, v.v ... rất khó để viết và gỡ lỗi. Cũng như tiết kiệm thời gian, điều này có thể nâng cao độ tin cậy và khả năng bảo trì của ứng dụng của bạn (hoặc ít nhất là giúp bạn tiết kiệm thời gian để bạn đạt được kết quả tương tự)
  • các ORM tốt nhất có một cộng đồng người dùng tích cực phát triển, duy trì và hỗ trợ sản phẩm. Cộng đồng xung quanh SQL tùy chỉnh, tốt nhất là, ít tập trung vào các vấn đề chúng ta cần giải quyết.

Như bạn nhận xét, một mặt trái của ORM là mất hiệu suất. Tuy nhiên, điều này thường có thể được bù đắp bằng cách chi tiêu nhiều phần cứng hơn.

Thông thường, thời gian lập trình viên đắt hơn phần cứng, vì vậy ORM hoàn toàn là một lựa chọn tốt thay vì SQL mã hóa bằng tay.

ORM là tốt nhất cho các ứng dụng với rất nhiều logic cơ sở dữ liệu CRUD khá đơn giản. ORM kém hiệu quả đối với :

  • Các ứng dụng cần ít / không có quyền truy cập cơ sở dữ liệu.
  • Các ứng dụng chủ yếu phụ thuộc vào các truy vấn phức tạp và rất ít logic CRUD đơn giản
  • Các tình huống trong đó hiệu suất là rất quan trọng, nhưng ở đó không có khả năng triển khai phần cứng nhanh hơn

Theo kinh nghiệm của tôi, những tình huống này rất hiếm. Do đó câu trả lời của tôi.


"Sử dụng ORM không nhất thiết có nghĩa là bạn không cần biết SQL." - Thật vậy. Một trong những lợi thế tôi thấy trong môi trường nhóm là chúng ta có thể tập trung các kỹ năng SQL để không phải mọi nhà phát triển làm việc trên lớp doanh nghiệp phải là một chuyên gia.
Fred Wilson

1
Đối với các truy vấn phức tạp, bạn luôn có thể trở lại SQL và viết truy vấn SQL.
harsimranb

4

Tôi cũng thoải mái viết SQL. Tôi cũng thoải mái hơn rất nhiều khi không phải viết bất kỳ SQL nào, cũng như không lo lắng về việc kết nối, ngắt kết nối, gộp chung, v.v. vào cơ sở dữ liệu.

Vì vậy, tôi sẽ trả lời tiêu cực của câu hỏi của bạn. Các dự án phát triển web duy nhất KHÔNG được hưởng lợi từ ORM là dự án hoàn toàn không nói chuyện với cơ sở dữ liệu. Mà tôi tin là thiểu số (nếu có).


+1: Tôi cũng cho rằng bản thân mình rất thành thạo tại sql, nhưng vẫn thích OR / M. Trong thực tế tôi sẽ nói rằng bạn chắc chắn cần phải xử lý sql để sử dụng tốt OR / M, nếu không, khi sự trừu tượng bị rò rỉ, bạn sẽ không bao giờ tìm thấy vấn đề. "Không cần biết nhiều SQL" không phải là một tính năng. Đối với tôi, đó là tất cả về tăng năng suất và trình biên dịch tìm ra các vấn đề, không phải thời gian chạy và OR / M (đặc biệt là các tổng quát / linq mới hơn rất tốt ở đó).
Brook

@Brook - Tôi hết lòng đồng ý. Sử dụng OR / M không có nghĩa là kiến ​​thức SQL là tùy chọn.
Otávio Décio

2

Dựa trên kinh nghiệm của tôi với ASP.NET WebForms, tôi sẽ đề xuất rằng các dự án web sử dụng các khung web trạng thái có lợi nhất khi sử dụng ORM.

Với một khung trạng thái, đánh dấu được tạo tự động đằng sau hậu trường, dựa trên hệ thống phân cấp của các điều khiển máy chủ hoạt động. Thật hấp dẫn khi làm cho các điều khiển đó tải và duy trì trạng thái của chúng tự động vào cơ sở dữ liệu. Đây là nơi ORM giúp.

Bạn sắp xếp tóm tắt phần cuối của đường ống (đầu ra HTML) và nó tự nhiên mời bạn xử lý phần đầu (nguồn dữ liệu) theo cách tương tự để bạn chỉ ở trong logic kinh doanh của mình trong mã ứng dụng.

Không phải là tôi không nói rằng đây là một cách tốt để làm việc. Đó chỉ là nơi ORM phù hợp một cách tự nhiên.


2

Trong các ứng dụng mà bạn có một mô hình đối tượng lớn, được kết nối, ORM sẽ giúp bạn không phải viết cùng một lần nữa.

Một lợi ích khác là lười tải, trong đó bạn muốn một api trả về một biểu đồ đối tượng trong đó ứng dụng khách của api sẽ chỉ sử dụng một tập hợp con của biểu đồ đó.


1

Tôi tin rằng bạn đang nhầm lẫn một ORM với DBAL .

Khái niệm mà bạn đang đề cập đến là Lớp trừu tượng cơ sở dữ liệu (DBAL) cho phép bạn viết "sql" di động, không phụ thuộc vào hệ thống cơ sở dữ liệu cơ bản.

Mặt khác, một ORM (gần như?) Luôn được xây dựng trên đỉnh của một DBAL):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (Wikipedia)

Nói một cách đơn giản, ORM cho phép bạn chuyển đổi dữ liệu từ cơ sở dữ liệu phẳng thành biểu diễn đối tượng bị thổi phồng.


Cảm ơn bạn đã làm rõ. Lý do chính để tôi chuyển sang ORM là tập trung nhiều hơn vào OOP và tránh xa việc viết càng nhiều SQL nếu nó có ý nghĩa đối với một số dự án.
Fred Wilson

1

Các dự án không được hưởng lợi từ ORM sẽ là:

  • những cái đó không hướng đối tượng;
  • những người không cần phải duy trì dữ liệu;
  • những cái đó sử dụng DB hướng đối tượng, do đó không cần lớp ánh xạ bổ sung;
  • những cái đó sử dụng giải pháp NoQuery không liên quan;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.