Logic nghiệp vụ trong lưu trữ Proc so với lớp giữa (c #)


7

Đây là nhiều hơn một câu hỏi kiến ​​trúc. Tôi đã từng làm việc tại một công ty tài chính có ứng dụng web.

Frontascript javascript.
Lớp giữa là WebAPI để truy cập SQL Server phụ trợ.
Kết thúc cơ sở dữ liệu SQL Server.

Công ty đặt tất cả logic kinh doanh của mình trong các thủ tục lưu trữ. Sau khi nói chuyện với các công ty khác, tôi bắt đầu nghe rằng hầu hết đưa logic kinh doanh của họ vào lớp giữa.

Tôi đã từng hỏi ai đó ở công ty tài chính tại sao lại có một lượng lớn các procs được lưu trữ như vậy nhưng không nhận được câu trả lời hay. Gần đây, tại một cuộc phỏng vấn xin việc, họ đã hỏi những lợi thế và bất lợi của việc đưa tất cả logic kinh doanh vào cơ sở dữ liệu so với lớp giữa. Tôi đã không có một câu trả lời tốt.

Bất cứ ai cũng có thể cung cấp một số suy nghĩ về lý do tại sao điều này là hoặc không phải là một ý tưởng tốt?

Câu trả lời:


16

A) Thang đo Tầng giữa có thể được thu nhỏ dễ dàng - do đó là khái niệm trang trại web. Việc mở rộng tầng DB khó khăn hơn nhiều. Trong khi một số sản phẩm có thể làm điều này, nó vẫn chưa tầm thường và chủ đạo.

B) Chi phí Thông thường các máy chủ web là các hộp chung hoặc vườn. Tuy nhiên, các máy chủ DB có xu hướng lớn hơn, phức tạp hơn và linh hoạt hơn. Tất cả điều này chuyển thành "đắt tiền." Một nhà tuyển dụng gần đây ước tính một đánh dấu CPU trên DB đắt hơn mười lần so với một máy chủ ứng dụng.

C) Tái sử dụng Logic được thể hiện trong một thủ tục được lưu trữ không thể đơn giản được liên kết thành một ứng dụng di động độc lập. Thay đổi SP ảnh hưởng đến mọi ứng dụng sử dụng DB đó, cho dù ứng dụng đó đã sẵn sàng cho thay đổi hay chưa.

D) Tái sử dụng Logic được thể hiện trong một thủ tục được lưu trữ là phổ biến cho tất cả các ứng dụng sử dụng DB. Các lập trình viên không thể bước bên cạnh các quy tắc một cách bất chợt. Thay đổi SP ảnh hưởng đến mọi ứng dụng sử dụng DB đó, đảm bảo tính nhất quán trong toàn doanh nghiệp.

E) Công cụ Có nhiều ngôn ngữ, công cụ và kỹ thuật sẵn có để phát triển trong tầng ứng dụng hơn so với cơ sở dữ liệu (từ nhận xét, với lời cảm ơn).

F) Lưu lượng truy cập mạng Thông thường một chức năng kinh doanh sẽ yêu cầu nhiều lần đọc và / hoặc ghi. Thông thường đầu ra của một câu lệnh sẽ là đầu vào cho một câu lệnh sau. Nếu các câu lệnh SQL được giữ trong ứng dụng, mỗi câu lệnh sẽ yêu cầu một chuyến đi khứ hồi mạng đến máy chủ. Nếu SQL được giữ trong một thủ tục được lưu trữ, sẽ có một chuyến đi mạng duy nhất, gửi các tham số vào và chỉ nhận lại kết quả cuối cùng; chi phí mạng của các kết quả trung gian là tránh.


1
Điểm tốt. Nó cũng dễ sử dụng phiên bản mã nguồn hơn, ví dụ như git ở tầng giữa so với SP.
topher

1
Tôi sẽ nói thêm rằng việc gỡ lỗi một cái gì đó trong lớp ứng dụng so với một Proc được lưu trữ trong lớp db dễ dàng hơn nhiều.
nick

Bên cạnh những gì @nick nói về việc gỡ lỗi, tôi cũng sẽ thêm rằng logic đó trở nên rất khó sử dụng trong SQL. Khó khăn hơn để phá vỡ logic thành các chức năng nhỏ hơn và phạm vi phù hợp. Ngoài ra, cấu trúc dữ liệu thực duy nhất của bạn là một bảng, có thể giới hạn.
Kris Harper

@topher Tôi sẽ trung lập về điểm kiểm soát nguồn. Tôi luôn có các nhóm của mình giữ các tệp thực thi (SP, hàm, kích hoạt) trong kiểm soát nguồn và triển khai chúng như bất kỳ mã nào khác. Tất nhiên bất cứ ai có quyền truy cập đều có thể thay đổi SP ngoài quy trình phát hành, nhưng điều tương tự cũng đúng với mã ứng dụng.
Michael Green

@Nick Đúng. Trong khi SQL Server Management Studio có trình gỡ lỗi từng bước, các câu lệnh ngôn ngữ thủ tục chi tiết hơn nhiều so với SQL để dễ dàng cách ly các giá trị có vấn đề riêng lẻ. Mặt khác, nhiều tuyên bố về thủ tục phải được thực hiện để bao quát các chức năng tương đương để có thêm cơ hội cho sự nhầm lẫn hoặc tác dụng phụ.
Michael Green
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.