Nguyên tắc hướng dẫn của bạn là Đừng lặp lại chính mình :
Trong công nghệ phần mềm, Đừng lặp lại chính mình (DRY) là một nguyên tắc phát triển phần mềm nhằm giảm sự lặp lại thông tin của tất cả các loại, đặc biệt hữu ích trong các kiến trúc đa tầng. Nguyên tắc DRY được nêu là "Mỗi phần kiến thức phải có một đại diện duy nhất, rõ ràng, có thẩm quyền trong một hệ thống."
ORM về cơ bản là một lớp bổ sung (hoặc lớp nếu bạn thích), ngồi thoải mái giữa ứng dụng của bạn và (các) bộ lưu trữ dữ liệu của bạn. Các ràng buộc của bạn phải ở một nơi và chỉ một nơi, có thể là ORM hoặc lưu trữ dữ liệu, nếu không, bạn sẽ sớm duy trì các phiên bản khác nhau của chúng. Bạn thực sự không muốn làm điều đó.
Tuy nhiên, trong thực tế, hầu hết các ORM phong nha một nửa sẽ tự động tạo ra rất nhiều mô hình của bạn từ lược đồ dữ liệu của bạn. Mặc dù vẫn có sự trùng lặp, cơ hội cho địa ngục bảo trì là rất nhỏ vì mã ORM trùng lặp được tạo theo cùng một mẫu mỗi lần. Sẽ là lý tưởng khi không có mã trùng lặp, nhưng các ràng buộc được tạo tự động là điều tốt nhất tiếp theo.
Ngoài ra, có các ràng buộc của bạn ở một nơi không nhất thiết có nghĩa là bạn nên có tất cả các ràng buộc của mình ở cùng một nơi. Một số, như các ràng buộc toàn vẹn tham chiếu, có thể phù hợp hơn cho việc lưu trữ dữ liệu (nhưng có thể bị mất nếu bạn chuyển sang lưu trữ dữ liệu khác) và một số, chủ yếu là các logic về logic kinh doanh phức tạp, phù hợp hơn với ORM của bạn. Tốt nhất là để tất cả táo của bạn trong cùng một giỏ, nhưng
Thất bại
Bạn đề cập đến ORM thất bại. Điều đó hoàn toàn không liên quan đến câu hỏi của bạn, ứng dụng của bạn nên nghĩ về ORM và (các) bộ lưu trữ dữ liệu như một thực thể duy nhất. Nếu thất bại, nó thất bại, bỏ qua ORM để nói chuyện trực tiếp với việc lưu trữ dữ liệu không phải là một ý tưởng hay.
Bỏ qua ORM cho bất cứ điều gì khác
Cũng không phải là một ý tưởng tốt. Tuy nhiên, nó có thể xảy ra vì nhiều lý do:
Các phần kế thừa của ứng dụng đã được xây dựng trước khi ORM được giới thiệu.
Đó là một vấn đề khó khăn, và chính xác là tình huống tôi đang phải đối phó ngay bây giờ , do đó tôi liên tục lặp lại về việc bảo trì địa ngục. Hoặc bạn tiếp tục duy trì các phần không phải ORM hoặc bạn viết lại chúng để sử dụng ORM. Tùy chọn thứ hai ban đầu có thể có ý nghĩa hơn, nhưng đó là một quyết định chỉ dựa trên chính xác những phần đó trong ứng dụng của bạn đang làm gì và việc viết lại hoàn chỉnh sẽ có giá trị như thế nào trong thời gian dài.
Hãy thử thay đổi một khóa trong bảng MySQL 2 * 10 ^ 8 hàng được thiết kế kém (không có thời gian chết) và bạn sẽ hiểu tôi đến từ đâu.
Các phần không kế thừa của ứng dụng hoàn toàn cần nói chuyện trực tiếp với bộ lưu trữ dữ liệu:
Thậm chí tinh vi hơn. ORM là những công cụ ưa thích và chúng đảm nhiệm hầu hết mọi thứ, nhưng đôi khi chúng chỉ cản trở hoặc thậm chí là hoàn toàn vô dụng. Từ thông dụng (cụm từ thông dụng thực sự) không khớp với trở kháng quan hệ đối tượng , chỉ đơn giản là ORM của bạn không thể thực hiện mọi thứ mà cơ sở dữ liệu quan hệ của bạn thực hiện và đối với một số nội dung họ làm, có một hình phạt hiệu suất đáng kể.
Bình luận
Từ điểm toàn vẹn dữ liệu, các ràng buộc PHẢI có trên cơ sở dữ liệu và NÊN trên ứng dụng. Điều gì xảy ra nếu ứng dụng của bạn được truy cập từ web và ứng dụng trên máy tính để bàn, hoặc ứng dụng di động hoặc dịch vụ web? - Luiz Damim
Đây là nơi thêm một lớp bổ sung sẽ cực kỳ hữu ích và nếu chúng ta đang nói về một ứng dụng web tôi sẽ sử dụng API REST. Một thiết kế quá đơn giản cho việc này sẽ là:
ORM sẽ nằm giữa API và kho lưu trữ dữ liệu và mọi thứ đằng sau API (bao gồm cả API) sẽ được coi là một thực thể duy nhất từ các ứng dụng khác nhau.