Là thời đại của logic miền trong cơ sở dữ liệu hơn? [đóng cửa]


9

Gần đây tôi đã vấp phải ý kiến này từ năm 2016 nói rằng vẫn còn trường hợp logic miền trong cơ sở dữ liệu.

Tôi nghĩ rằng điều này là hoàn toàn lỗi thời. Tôi chỉ tự hỏi liệu anh chàng vẫn còn sống trong những năm 90 hay điều này có thể thực sự đúng. Đặt các hệ thống di sản sang một bên.

Điều gì về việc có logic miền trong cơ sở dữ liệu vì yêu cầu bảo mật. Đó thực sự là một điều để làm?


3
Bạn đã thực sự đọc bài viết đó đầy đủ? Tôi nghĩ rằng tác giả đưa ra quan điểm của mình rất rõ ràng, và giải thích cho phần nào của BL mà anh ta nghĩ là tốt nhất được đặt trong cơ sở dữ liệu, và phần nào thì không. Vì vậy, điểm nào từ bài viết đó chính xác là bạn đang đấu tranh với?
Doc Brown

Vâng, nó đã đóng cửa vào ngày 18 tháng 2 năm 2009 và bây giờ là sai.
Michael Durrant

Thật tò mò. Tôi đã đọc anh chàng này, đưa ra rất nhiều ví dụ SQL (liên kết chặt chẽ với Oracle) và sau đó tôi không thể tránh việc nhớ khách hàng của mình nói với tôi: Tôi đã quên mua giấy phép của Oracle cho PRE env. Chúng tôi có nó cho PRO nhưng không phải cho PRE. Bạn sẽ phải triển khai ứng dụng, chống lại MySQL trong PRE và Oracle trong PRO, trong một thời gian ngắn ... Tôi sẽ hỏi anh chàng đó rằng tất cả các tính năng sáng chói của nhà tiên tri đi đâu ... (Vấn đề ở đây là vì một lý do Tôi không muốn biết, kiến ​​trúc sư đã quyết định sử dụng Sql - cách ánh xạ hàng thay vì Orm, nhưng vẫn gần với vấn đề bị khóa với nhà cung cấp DB) .
Laiv

@Laiv: Điều đó thật điên rồ, và không có số lượng ORM hoặc trừu tượng nào khác sẽ cứu bạn. Về cơ bản, bạn đang triển khai mã chưa được kiểm tra để sản xuất với thiết lập như vậy.
JacquesB

2
"Thời đại của logic miền trong cơ sở dữ liệu đã hết chưa?" Chúa ơi, tôi hy vọng thế.
bữa ăn trưa317

Câu trả lời:


13

Các lập trình viên ngày nay dường như suy nghĩ rất giáo điều, đặc biệt là khi họ đọc những suy nghĩ mà người khác viết trên blog của họ.

Lấy ví dụ về blog Clean Coding của Bob Martin. Theo quan sát chung, tôi thấy các tác phẩm của Bob Martin khá rõ ràng và sáng suốt, vì vậy nó gây khó khăn cho tôi rằng mọi người liên tục bị nhầm lẫn bởi những điều ông viết, chẳng hạn như các nguyên tắc RẮN. Họ bị treo lên về "Trách nhiệm duy nhất" là gì, hoặc tại sao một số lớp vi phạm nguyên tắc của Liskov, khi điều họ có thể nên làm chỉ đơn giản là cố gắng viết mã tốt hơn và có được một số kinh nghiệm trước tiên, để họ đọc được blog có một số bối cảnh.


Về cơ bản những gì bạn đang nói là cơ sở dữ liệu nên chứa các bảng và dữ liệu, và đó là tất cả những gì nó nên chứa. Nhưng cơ sở dữ liệu rất phù hợp để thực hiện một số điều mà ... tốt, cơ sở dữ liệu rất tốt.

Bài báo trích dẫn những điều sau:

  • Tính toàn vẹn và xác thực dữ liệu (ví dụ: các ràng buộc null và duy nhất)
  • Bảo mật cấp hàng
  • Viết API bằng thủ tục lưu trữ
  • Tính toán số dư
  • Đặt câu hỏi cho cơ sở dữ liệu (nghĩa là truy vấn và báo cáo)
  • Tránh các vấn đề ORM như N + 1

như những điều phù hợp để đưa vào cơ sở dữ liệu. Tôi tình cờ đồng ý với anh.

Những lý do bạn không đưa logic kinh doanh (nói chung) vào cơ sở dữ liệu:

  • Nhà cung cấp khóa
  • Cơ sở dữ liệu của bạn không phải là cơ quan trung ương
  • Nhóm của bạn không suy nghĩ liên quan
  • Dụng cụ kém hơn.

Nhưng những điều này thường chỉ áp dụng cho những kỹ thuật, công cụ và đào tạo mà cơ sở dữ liệu không phù hợp nhất.

Vì vậy, như với bất kỳ kỹ thuật khác trong phát triển phần mềm, nó phụ thuộc. Bạn đánh giá các lựa chọn thay thế của mình và đưa ra quyết định dựa trên những gì bạn tin là hướng hành động tốt nhất có thể cho ứng dụng cụ thể của bạn.


3
Một phân tích rất tốt và một cách tốt hơn để đóng khung câu hỏi.
candied_orange

9

nhập mô tả hình ảnh ở đây

Thời đại của ngựa và lỗi đã qua, nhưng bạn vẫn có thể mua roi buggy.

Tại sao? Khi xe ô tô nhanh hơn, rẻ hơn để bảo dưỡng và bỏ bê chúng sẽ không tạo ra các chuyến thăm từ xã hội nhân đạo, tại sao con ngựa và xe kéo vẫn ở quanh?

Bởi vì đôi khi bạn có những lý do khác nhau để làm một cái gì đó bên cạnh những lý do phổ biến.

Những gì bạn nên học là tại sao logic miền trong cơ sở dữ liệu gây ra vấn đề và bất cứ ai cũng có thể thoát khỏi nó. Sau đó tạo nên tâm trí của riêng bạn.

Quan điểm cá nhân của tôi:

Logic miền là về hành vi. Cơ sở dữ liệu là về sự bền bỉ, các mối quan hệ, và, tốt, dữ liệu. Khi bạn nhìn thấy nó theo cách này, các quy tắc kinh doanh không nên có trong cơ sở dữ liệu.

Mặt khác, ai cho biết cơ sở dữ liệu không thể có hành vi? Tôi đã xây dựng cơ sở dữ liệu văn phòng bằng cách sử dụng Filemaker. Mọi người gọi nó là cơ sở dữ liệu nhưng nó thực sự là một môi trường phát triển ứng dụng. Tất cả mọi thứ tích hợp liền mạch thành một, và được gọi là cơ sở dữ liệu.

Wizdom thường được tìm thấy giữa các quan điểm cực đoan. Tôi không nghi ngờ gì cả có thể được thực hiện để làm việc. Khi cố gắng tìm trung gian, thật hấp dẫn khi chỉ đi theo bầy đàn. Tôi sẽ thận trọng chống lại nó ở đây.

Một hệ thống giữ logic miền trong cơ sở dữ liệu có thể hoạt động tốt. Một hệ thống giữ logic miền ra khỏi cơ sở dữ liệu có thể hoạt động tốt. Một hệ thống kết hợp logic miền ở cả hai nơi sẽ khiến tôi phát điên. Tôi sẽ không biết nơi để đặt hành vi mới. Tôi sẽ không chắc chắn nơi để tìm hành vi cũ.

Nếu bạn vẫn không thể quyết định lật một đồng xu và lấy quyết định của nó làm phúc âm cho bất kỳ dự án cụ thể nào. Theo như tôi có thể nói rằng đồng xu biết những gì tốt nhất cũng như bất cứ ai khác.


1
Câu trả lời của bạn nghe có vẻ bạn chưa từng xem qua bài viết được liên kết bởi OP (không phải tôi nói tác giả đúng hay sai), nhưng bạn có thể cho chúng tôi biết bạn đồng ý hay khác với quan điểm được mô tả trong bài viết đó không?
Doc Brown

@DocBrown Tôi cũng không đọc nó, nhưng câu trả lời này dù sao cũng là một câu hỏi hay mà tôi hoàn toàn đồng ý. Và nó giải quyết câu hỏi của OP (câu cuối), không phải là một bài báo được trích dẫn.
qwerty_so

@DocBrown Tôi không nghĩ rằng bài báo đã đọc bài viết của chú Bob mà nó trích dẫn : "Kiến trúc plugin rất mạnh mẽ bởi vì các quy tắc kinh doanh có giá trị cao ổn định có thể được giữ lại tùy thuộc vào các mô-đun giá trị thấp dễ bay hơi như giao diện người dùng và cơ sở dữ liệu.". Chú Bob có quan điểm mạnh mẽ hơn chống lại ý tưởng này hơn tôi. Bài viết này chọn anh đào từ bài viết của Bob và làm cho có vẻ như Bob đang nói điều gì đó mà anh ta không làm.
candied_orange

2

Tôi đã có một trường hợp giải quyết nó trong lớp kinh doanh sẽ là một kẻ giết người hiệu suất thực sự.

Ứng dụng của chúng tôi khái niệm bảo mật OO bao gồm các vai trò VÀ nhóm. Và cả hai đều là cấu trúc đệ quy. Chúng tôi đã viết một thủ tục được lưu trữ để giải quyết sự cho phép của người dùng trên một đối tượng miền.

Có rất ít nhu cầu quay trở lại logic cơ sở dữ liệu. Nhưng trong trường hợp này tôi quyết định đi theo cách đó. Nhưng điều bạn luôn phải cân nhắc: Bạn từ bỏ sự trừu tượng. Ngay khi bạn có logic nghiệp vụ trong cơ sở dữ liệu, bạn có một ngày khó khăn để thay đổi lớp kiên trì của mình. Vì vậy, rất rất cẩn thận.

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.