JavaScript phía máy khách và máy chủ: Ngăn chặn sự điên rồ


Phan Tuấn Trung
4 năm trước
Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 9401

Tôi nghe điều này rất thường xuyên, tôi quyết định đã đến lúc viết về nó: 

Khi viết các ứng dụng web , các quy tắc kinh doanh thuộc về máy chủ.

Một trong những cuộc trò chuyện cuối cùng tôi có ở nơi cuối cùng tôi đang làm việc là về vấn đề tương tự. Và, tôi đã có một phản ứng tương tự một vài năm trước đây khi tôi đang thực hiện một bài thuyết trình thử nghiệm Selenium và đề cập rằng tổ chức mà tôi hiện đang làm việc để đặt tất cả các mã về phía máy khách và điều duy nhất mà máy chủ làm là lưu dữ liệu.

Có thể bạn tin điều tương tự? Không có gì là cắt và khô.

Nguyên tắc đầu tiên của hùng biện

Bây giờ, quy tắc đầu tiên của hùng biện, và quy tắc bạn phải luôn ghi nhớ là đây. Bất cứ khi nào ai đó tuyên bố một cách tuyệt đối, nó có thể không đúng. Bao gồm cái này :)

Đây là thỏa thuận:

Tại một thời điểm có những lý do chính đáng cho việc không đặt các quy tắc kinh doanh về phía khách hàng. Trưởng trong số họ là JavaScript chậm. Nếu bạn tính thời gian khứ hồi, việc thực hiện logic kinh doanh trên máy chủ thường chậm hơn.

Một lý do khác gần như không bao giờ là một ý tưởng tốt để đặt các quy tắc kinh doanh cho khách hàng là vì không ai thực sự biết cách viết JavaScript tốt, có cấu trúc, có thể kiểm tra được. Nhưng JavaScript đã phát triển và đây không phải là vấn đề như trước đây.

Và cuối cùng, và lý do duy nhất chúng tôi còn lại, là mặc dù có nhiều nỗ lực làm xáo trộn JavaScript, vào cuối ngày, JavaScript có sẵn cho bất kỳ ai muốn, đọc và đánh cắp bí mật thương mại. Mọi thứ đã trở nên tốt hơn, nhưng sự thật vẫn còn, nếu tôi thực sự muốn, tôi có thể tìm ra mã JavaScript của bạn đang làm gì.

Quy tắc kinh doanh là gì?

OK, vì vậy tôi đã chỉ ra rằng hầu hết các quy tắc cũ không tồn tại. Chúng ta sẽ quay lại quy tắc cũ thứ ba sau. Điều tôi muốn thảo luận là người đứng đầu, vấn đề phụ thuộc vào vấn đề.

Điều gì, chính xác, đủ điều kiện là một quy tắc kinh doanh?

Tôi phải thừa nhận, câu hỏi này đã làm phiền tôi trong nhiều năm.

Ba tầng

Hãy xem một mô tả điển hình của kiến ​​trúc ba tầng:

View← →  Business Rules← → Data Access

Tôi không biết về bạn, nhưng hầu hết các ứng dụng tôi làm việc, lớp logic nghiệp vụ thực hiện nhiều hơn là truyền dữ liệu từ Lớp truy cập dữ liệu lên Chế độ xem và quay lại. Có thể có một số biến đổi trên đường đi. Nó có thể kết hợp dữ liệu theo một cách cụ thể. Nhưng, thực sự, Lớp Logic nghiệp vụ, nói đúng ra, không làm bất cứ điều gì tôi sẽ không thoải mái để cho các đối thủ cạnh tranh biết. Chỉ có một vài trường hợp mà tôi có thể lập luận rằng việc đưa mã đó lên máy chủ sẽ tăng tốc mọi thứ theo bất kỳ cách quan trọng nào.

Xem mô hình gì

Sau đó là Model View Dù mẫu nào. Bạn biết, MVC, MVVM, v.v. Trong mẫu này, các quy tắc kinh doanh của chúng ta hoặc bị kẹt trong bộ điều khiển hoặc chúng ta đặt chúng trong các lớp bên ngoài mẫu này. Thông thường, mã này không chỉ quyết định những yếu tố nào nên được kích hoạt hay vô hiệu hóa, hỗ trợ xác thực và tự động điền vào các trường mà người dùng có thể tự điền nhưng chúng tôi làm điều đó để giúp cuộc sống của họ dễ dàng hơn.

Một lần nữa, tôi phải hỏi, điều gì về một quy tắc kinh doanh cần được ẩn hoặc sẽ hoạt động nhanh hơn nếu chúng ta đưa nó lên máy chủ?

Ai đang sử dụng ứng dụng của bạn?

Hầu hết các ứng dụng web ngày nay được xây dựng bởi các tổ chức để họ sử dụng trong môi trường Intranet. Trong tổ chức cuối cùng tôi làm việc, không có nguy cơ ai đó sẽ đánh cắp mã của chúng tôi. Hầu hết trong số họ không biết làm thế nào để làm điều đó, và nếu họ đã làm, họ sẽ không thể đọc nó bằng mọi cách.

Bằng cách đặt câu hỏi, ai đang sử dụng ứng dụng này? Bạn thực sự đang hỏi, đó là rủi ro của việc đặt mã ở phía khách hàng? Hầu hết thời gian cho hầu hết các mã của chúng tôi trong hầu hết các tổ chức, kể cả đối mặt công khai các trang web, có rất ít rủi ro liên quan đến việc đặt tất cả mã của chúng tôi về phía khách hàng.

Có lợi thế gì không?

Mà đi đến câu hỏi cuối cùng cần phải được hỏi. Có bất kỳ lợi thế nào để đặt mã trên máy chủ thay vì máy khách, hoặc ngược lại không?

Trong hầu hết các trường hợp, tôi nghĩ bạn sẽ thấy rằng lợi thế của việc đặt mã ở phía máy khách vượt xa các lợi thế của việc đặt cùng mã đó ở phía máy chủ. Trong một số trường hợp cực đoan, bạn có thể thấy rằng có mã hoàn toàn cần để sống trên máy chủ.

Có lẽ tôi đang thiếu một cái gì đó?

ĐƯỢC. Vì vậy, có lẽ tôi đang thiếu một cái gì đó. Bạn có đồng ý hay không? Tại sao? Để lại một bình luận.

Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 9401