8 nguyên tắc cấu trúc ứng dụng web

1 tháng 7, 2021 By DEVERA ACADEMY

Trong bài viết này, chúng ta sẽ đề cập đển là 8 nguyên tắc để có thể cấu trúc một ứng dụng web đúng cách. Đây chỉ đơn giản là một tập hợp các nguyên tắc hướng dẫn bạn khi bắt đầu xây dựng hoặc phát triển thêm các tính năng mới, chúng không phải là những quy tắc bắt buộc và bạn hoàn toàn phải tuần theo. Mục đích của những quy tắc này là giúp bạn hiểu những điều cần phải cân nhắc khi xây dựng ứng dụng web của mình.

Nguyên tắc về khả năng bảo trì (Maintainability)

Nguyên tắc này nói rằng chúng ta nên cố gắng xây dựng các ứng dụng web của mình theo hướng cho phép các đoạn code có thể lặp lại và dễ dàng cho việc tiếp tục phát triển và duy trì trong tương lai.

Là một kỹ sư phần mềm, bạn cần phải nhớ rằng cách nhanh nhất để bạn thêm một tính năng mới vào code base không hẳn là cách làm cho cả chương trình trở nên dễ bảo trì. Một ví dụ về việc được yêu cầu triển khai là tính năng cho phép người dùng gửi phản hồi trên trang web, điều này có thể được thực hiện theo một cách rất dễ dàng như thêm vào một phần mở rộng của một chức năng tương tự đã sẵn có. Tuy nhiên, làm theo cách như vậy có thể dẫn đến hai tính năng của trang web bị gộp lại thành một. Cách tiếp cận phù hợp sẽ là trích xuất các phần có thể sử dụng lại vào một thư viện dành cho việc tái sử dụng, sau đó giữ hai tính năng tách riêng biệt.

Cũng có đôi lúc do thời gian không cho phép dẫn đến việc thực hiện một yêu cầu triển khai tính năng ưu tiên nhanh chóng hơn là khả năng bảo trì. Nhưng, bạn nên nhắc chủ sở hữu sản phẩm và trưởng nhóm kỹ thuật của bạn biết về những đánh đổi để thực hiện kịp thời, giúp họ hiểu được rằng cần phải trả giá cho khoản đánh đổi này vào một tương lai không xa.

Nguyên tắc về khả năng mở rộng (Scalability)

Nguyên tắc thứ hai là nguyên tắc về khả năng mở rộng - đây là nguyên tắc cho rằng các ứng dụng phải có khả năng mở rộng quy mô theo số lượng người dùng mà các ứng dụng web đang có và có thể ngày càng tăng.

Để được xem là có thể mở rộng, ứng dụng web sẽ không cần phải xây dựng lại hay thiết kế lại để duy trì hiệu suất, hiệu quả cùng với sự gia tăng về nhu cầu của người dùng. Bạn có thể kiểm tra khả năng mở rộng này của hệ thống bằng sử dụng thử nghiệm tải (load testing). Thử nghiệp tải này sẽ giúp bạn xác định xem có bao nhiêu người dùng có thể truy cập vào hệ thống của bạn trước khi nó bắt đầu gặp lỗi. Nắm bắt được giới hạn của hệ thống giúp bạn đưa ra một bản kế hoạch phát triển cho tương lai - những sự thay đổi để hỗ trợ cho ứng dụng.

 Lời khuyên dành cho bạn là hãy xây dựng hệ thống có thể hỗ trợ mức sử dụng hiện tại  cộng thêm 50% để dự trù cho một khoảng tăng đột ngột. Mức độ quy mô này cung cấp cho bạn một khoảng trống để phát triển và việc mở rộng quy mô sau đó trở nên thoải mái hơn. Lưu ý, quy tắc này sẽ không áp dụng nếu bạn đã có Netflix hoặc Disney+, bởi chúng hiếm có khả năng tăng 50% một cách bất ngờ và thực tế có thể là 20%.

Nguyên tắc về sự đơn giản (Simplicity)

Nguyên tắc đơn giản nói rằng chúng ta nên xây dựng kiến trúc cho các ứng dụng của mình càng đơn giản và dễ hiểu càng tốt.

Cách tiếp cận của nguyên tắc đơn giản là thế này, chẳng hạn như nhóm của bạn đang thiết kế một ứng dụng và có một kỹ sư mới tham gia, nếu ứng dụng web của nhóm đáp ứng được nguyên tắc đơn giản thì kỹ sư mới vào này có thể hiểu và cung cấp một tính năng (với sự hỗ trợ) trong tuần đầu tiên họ tham gia dự án.

Thước đo dễ sử dụng nhất để đánh giá mức độ đơn giản của một ứng dụng có thể là mức độ dễ dàng để triển khai một tính năng mới. Nếu việc thêm một tính năng mới theo nguyên tắc bảo trì là tương đối nhanh chóng và đơn giản thì có khả năng hệ thống của bạn đã được xây dựng khá đơn giản, tuy nhiên sẽ là ngược lại nếu việc thêm tính năng quá phức tạp và yêu cầu cấu trúc lại ứng dụng.

Nguyên tắc về hiệu quả hoạt động (Performance)

Với nguyên tắc hiệu suất, ứng dụng của bạn phải đảm bảo cho việc phản hồi các yêu cầu một cách kịp thời. Bạn không cần mong đợi một ứng dụng hoàn thành mọi yêu cầu trong vòng 1 mili giây, chỉ cần xây dựng hệ thống với hiệu suất đáp ứng được yêu cầu của người dùng.

Hãy xem một vài ví dụ, và trước hết, hãy xem xét trang web Google.com. Khi một người dùng truy cập trang web của Google, họ sẽ kỳ vọng là nó sẽ chạy một cách nhanh chóng. Sau đó, khi nhập truy vấn tìm kiếm của mình, người dùng sẽ hy vong kết quả được tải trong vòng chưa đầy một giây.


Trong ảnh chụp màn hình ở trên, chúng ta có thể thấy thực tế khi tìm kiếm “Jonathan Fielding”, kết quả được trả về sau 0,53 giây.

Bây giờ, chúng ta đến với ứng dụng BigQuery của Google, đó là một dịch vụ có thể chạy các truy vấn trên các tập dữ liệu lớn bằng cách sử dụng SQL. Là người dùng, bạn sẽ hiểu và không quá mong đợi nó có thể hoàn thành tìm kiếm trên hàng terabyte dữ liệu ngay lập tức, thế nhưng bạn vẫn sẽ không muốn phải đợi hàng giờ để có kết quả đúng không?

Như bạn có thể thấy từ 2 ví dụ này, cả hai ứng dụng đều cung cấp một cách để tìm kiếm dữ liệu, một là tìm kiếm các trang web trên thế giới và một là tìm các tập dữ liệu lớn. Thế nên, kỳ vọng người dùng dành cho hai ứng dụng này là khác nhau, những gì mà hai ứng dụng này làm được không thể đem đặt lên bàn cân về hiệu suất.

Xem xét các ứng dụng của riêng bạn, hiểu các yêu cầu, kỳ vọng của người dùng để có thể đưa ra các đặc điểm về hiệu suất mong đợi của hệ thống.

Nguyên tắc về độ tin cậy (Reliability)

Nguyên tắc của độ tin cậy là khả năng chống lại lỗi của hệ thống, có nghĩa là ứng dụng phải được kiến ​​trúc theo cách có thể xử lý khi gặp một vài sự cố.

Tuyệt nhiên, không có ứng dụng nào không tồn tại lỗi, do đó, bạn nên thường xuyên kiểm tra lại ứng dụng của mình để giảm thiểu lỗi và cải thiện độ tin cậy của nó. Kiểm tra ứng dụng với ba kỹ thuật sau:

Xử lý lỗi - tất cả các lỗi đã biết phải được ghi lại và xử lý thích hợp

Ghi lại các ngoại lệ - Khi ứng dụng của chúng trả về một ngoại lệ (exception) mà chưa được xử lý trước đó, nó sẽ được ghi lại. Bạn có thể sử dụng Sentry cho việc này vì nó sẽ tự động nắm bắt các lỗi trong ứng dụng và cung cấp một giao diện đẹp kèm theo các thông tin chi tiết để khắc phục vấn đề.

Giám sát - Sử dụng các công cụ giám sát thời gian hoạt động để theo dõi các vấn đề trên trang web.

Nguyên tắc về khả năng kiểm thử (Testing)

Nguyên tắc về khả năng kiểm thử cho rằng bạn nên kiến ​​trúc ứng dụng theo cách làm cho nó trở nên dễ dàng hơn trong việc kiểm thử. Dưới đây là Kim tự tháp dành cho nguyên tắc kiểm thử:



Ở kim tự tháp kiểm thử các bài kiểm tra chất lượng chạy nhanh hơn, ít chi phí hơn nằm ở phía dưới cùng và các bài kiểm tra mất nhiều thời gian hơn ở trên cùng. Để nhận được phản hồi nhanh nhất vè vấn đề mà ứng dụng gặp phải, chúng ta cần các bài test chạy trên toàn bộ ứng dụng web.

Các bài Unit Test sẽ giúp ứng dụng của bạn được đảm bảo ở các phần quan trọng thuộc về logic. Sau đó, mỗi lần thay đổi code hay kiến trúc hệ thống, các bạn có thể chạy Unit Test, Integration Test và E2E.

Nguyên tắc tái sử dụng (Reusability)

Nguyên tắc về khả năng tái sử dụng tập trung vào cách xây dựng hệ thống theo cách cho phép sử dụng lại các phần nhỏ bên trong ứng dụng để tránh việc lặp lại trong code base.

Các ngôn ngữ lập trình luôn khuyến khích khả năng tái sử dụng này với các tính năng như Class cho phép bạn xác định một chủ thể cùng với các thuộc tính và phương thức của nó. Sau đó, khi bạn tạo một biến là chủ thể của class đó, bạn có thể sử dụng lại tất cả các phương thức đã được tích hợp.

Nguyên tắc bảo mật (security)

Nguyên tắc bảo mật nêu rõ rằng chúng ta cần xây dựng các ứng dụng của mình sao cho an toàn nhất có thể, người dùng chỉ truy cập vào các phần của ứng dụng mà họ được cho phép.

Bảo mật được xem là một phần của kiến trúc hệ thống vậy nên hãy cân nhắc về bản chất của ứng dụng web và đưa ra giải pháp phù hợp. Nếu bạn đang xây dựng một trang web cung cấp tin tức, bạn có thể muốn xem xét tính toàn vẹn của dữ liệu mà bạn hiển thị để đảm bảo nó không bị xâm phạm gây ảnh hưởng đến uy tín của trang web. Nếu bạn xây dựng một mạng xã hội (như Facebook hoặc Twitter), bạn sẽ muốn đảm bảo rằng các bài đăng chỉ được chia sẻ với những người mà người dùng cho phép.

Các developer phát triển nhiều ứng dụng web theo nhiều mục đích sử dụng khác nhau. Mỗi ứng dụng web là duy nhất và tồn tại những yêu cầu của riêng nó. Vậy nên, cấu trúc của ứng dụng web cần xây dựng dựa trên những yêu cầu trên thực tế mà hệ thống của bạn phải đáp ứng.


Tác giả: Jonathan Fielding

Dịch bởi Devera Academy