Spring framework là gì?
Spring framework (viết tắt là Spring) là một application framework, là một phần của hệ sinh thái Java. Application framework là một tập hợp các chức năng phần mềm phổ biến cung cấp cấu trúc nền tảng để phát triển ứng dụng. Application framework giảm bớt nỗ lực viết ứng dụng bằng cách loại bỏ nỗ lực viết tất cả code chương trình từ đầu.
Ngày nay Spring được sử dụng để phát triển nhiều loại ứng dụng, từ các backend solutions lớn đến các automation testing apps. Theo nhiều báo cáo khảo sát về công nghệ Java (như báo cáo này của JRebel từ năm 2020: http://mng.bz/N4V7; hoặc báo cáo này từ JAXEnter: http://mng.bz/DK9a), Spring là Java framework được sử dụng nhiều nhất hiện nay.
Spring rất phổ biến và các developers đã bắt đầu sử dụng nó thường xuyên hơn với các ngôn ngữ JVM khác ngoài Java. Trong vài năm gần đây, đã có sự gia tăng ấn tượng của các developers sử dụng Spring với Kotlin (một ngôn ngữ được đánh giá cao khác từ họ JVM).
Framework là gì và tại sao bạn nên sử dụng framewrok?
Application framework là một tập hợp các chức năng trên đó để bạn xây dựng các ứng dụng. Application framework cung cấp cho bạn một bộ công cụ và chức năng đa dạng mà bạn có thể sử dụng để xây dựng ứng dụng. Bạn không cần sử dụng tất cả các tính năng mà framework cung cấp. Tùy thuộc vào yêu cầu của ứng dụng bạn tạo, bạn sẽ chọn các phần phù hợp của framework để sử dụng.
Đây là một sự tương tự mà tôi thích đối với các application frameworks. Bạn đã bao giờ mua một món đồ nội thất từ một cửa hàng nội thất chưa? Giả sử bạn mua tủ quần áo—bạn sẽ không nhận được tủ quần áo đã lắp ráp, nhưng bạn sẽ nhận được các bộ phận phù hợp để lắp ráp tủ quần áo đó và sách hướng dẫn cách lắp ráp đồ nội thất của bạn. Bây giờ, hãy tưởng tượng bạn đặt mua một chiếc tủ quần áo, nhưng thay vì chỉ nhận đúng bộ phận bạn cần, bạn lại lấy tất cả các bộ phận có thể sử dụng để lắp ráp bất kỳ món đồ nội thất nào: bàn, tủ quần áo, v.v. Nếu bạn muốn có một chiếc tủ quần áo, bạn phải tìm đúng bộ phận và lắp ráp chúng. Nó giống như một application framework. Application framework cung cấp cho bạn nhiều phần mềm khác nhau mà bạn cần để xây dựng ứng dụng của mình. Bạn cần biết nên chọn những tính năng nào và cách lắp ráp chúng để đạt được kết quả mong muốn.
Thành đã đặt mua tủ quần áo từ cửa hàng. Nhưng cửa hàng (framework) không chỉ cung cấp cho Thành (developer) các components (software capabilities) mà anh ấy cần để xây dựng tủ quần áo mới của mình (ứng dụng). Cửa hàng gửi cho anh ấy tất cả các bộ phận mà anh ấy có thể cần để đóng tủ quần áo. Đó là lựa chọn của Thành (developer) về components nào (software capabilities) là đúng và cách lắp ráp chúng để có được kết quả phù hợp (ứng dụng).
Ý tưởng về một framework không phải là mới. Trong suốt lịch sử phát triển phần mềm, các lập trình viên đã quan sát thấy họ có thể sử dụng lại các phần code mà họ đã viết trong nhiều ứng dụng. Ban đầu, khi không có nhiều ứng dụng được triển khai, mỗi ứng dụng là duy nhất và được phát triển từ đầu bằng một ngôn ngữ lập trình cụ thể. Khi domain phát triển phần mềm được mở rộng và ngày càng có nhiều ứng dụng bắt đầu published trên thị trường, việc quan sát thấy nhiều ứng dụng trong số này có các yêu cầu tương tự trở nên dễ dàng hơn. Ví dụ như:
Logging error, warning và info message happen
Hầu hết các ứng dụng sử dụng transactions để xử lý các thay đổi dữ liệu. Transactions đại diện cho một cơ chế quan trọng đảm bảo tính nhất quán của dữ liệu (data consistency).
Hầu hết các ứng dụng đều sử dụng cơ chế bảo mật chống lại các lỗ hổng phổ biến giống nhau.
Hầu hết các ứng dụng sử dụng các cách tương tự để giao tiếp với nhau.
Hầu hết các ứng dụng sử dụng các cơ chế tương tự để cải thiện hiệu suất của chúng, chẳng hạn như lưu vào cache hoặc nén dữ liệu (data compression).
Và danh sách vẫn tiếp tục. Hóa ra business logic code được triển khai trong một ứng dụng nhỏ hơn đáng kể so với các yêu cầu tương tự như trên.
Khi tôi nói “business logic code”, tôi đề cập đến code thực hiện các yêu cầu nghiệp vụ của ứng dụng. Code này là những gì thực hiện mong đợi của người dùng trong một ứng dụng. Ví dụ: “nhấp vào một đường link cụ thể sẽ tạo hóa đơn” là điều mà user mong muốn xảy ra. Một số code của ứng dụng mà bạn phát triển thực hiện chức năng này và phần code này được các developers gọi là business logic code. Tuy nhiên, bất kỳ ứng dụng nào cũng quan tâm đến một số khía cạnh khác: security, logging, tính nhất quán của dữ liệu, v.v...
Quan điểm của user giống như một tảng băng trôi. User chủ yếu quan sát kết quả của business logic code, nhưng đây chỉ là một phần nhỏ trong quá trình xây dựng chức năng hoàn chỉnh của ứng dụng. Giống như một tảng băng trôi có phần lớn nằm dưới nước, trong một enterprise app, bạn không thấy hầu hết code vì code được cung cấp bởi các phần phụ thuộc (dependencies).
Hơn nữa, business logic code là thứ làm cho ứng dụng này khác với ứng dụng khác từ quan điểm chức năng. Nếu bạn sử dụng hai ứng dụng khác nhau, chẳng hạn như hệ thống quản trị nhân sự và ứng dụng mạng xã hội, thì chúng có các trường hợp sử dụng khác nhau.
Trường hợp sử dụng đại diện cho lý do một người sử dụng ứng dụng. Ví dụ: trong ứng dụng gọi xe, trường hợp sử dụng là “yêu cầu một chiếc ô tô”. Đối với ứng dụng quản lý việc giao đồ ăn, trường hợp sử dụng là “đặt vịt quay”.
Bạn thực hiện các hành động khác nhau, nhưng cả hai đều cần lưu trữ dữ liệu, truyền dữ liệu, logging, security configurations, có thể caching nữa chẳng hạn, v.v. Các ứng dụng khác nhau có thể sử dụng lại các nonbusiness implementations này. Sau đó, việc viết lại các chức năng giống nhau có hiệu quả không? Dĩ nhiên là không:
Bạn tiết kiệm rất nhiều thời gian và tiền bạc bằng cách sử dụng lại thứ gì đó thay vì tự mình phát triển nó.
Một triển khai hiện có mà nhiều ứng dụng đã sử dụng có ít cơ hội gây ra lỗi hơn vì những ứng dụng khác đã test nó.
Bạn được hưởng lợi từ lời khuyên của cộng đồng vì hiện tại bạn có rất nhiều developers hiểu cùng chức năng. Nếu bạn đã triển khai code của riêng mình, sẽ chỉ có một số người biết điều đó.
Đó là 1 chút hiểu biết của tôi về framwork và Spring framework, hy vọng có thể giúp ích cho bạn. Cảm ơn !