Chương 1 tìm hiểu về các khái niệm trong hệ thống dựa thành phần, kiến trúc dựa thành phần và phát triển hệ thống phần mềm dựa thành phần. Tìm hiểu, phân tích một số mô hình thành phần hiện tại và đưa ra lựa chọn mô hình phù hợp cho phát triển phần mềm hiện nay. Chương 2 tìm hiểu về lịch sử, kiến trúc và các đặc tính của OSGi. Từ đó hiểu rõ về kiến trúc, mục đích thiết kế giúp OSGi có được những đặc tính phù hợp với việc phát triển hệ thống dựa thành phần, bổ sung và khắc phục những nhược điểm còn tồn tại trong Java chuẩn.
Chương 3 trình bày việc áp dụng OSGi để xây dựng một hệ thống bán hàng trực tuyến theo kiến trúc dựa thành phần. Trình bày việc phân tích kiến trúc hệ thống, tìm hiểu những z 2 công nghệ liên quan và những công cụ tốt nhất hiện có sử dụng cho quá trình phát triển. Đưa ra những lựa chọn khi thiết kế, phân tách các thành phần sao cho phát huy được tốt nhất những ưu điểm của kiến trúc dựa thành phần và OSGi. Hệ thống sau khi hoàn thành sẽ bao gồm đầy đủ các thành phần cơ bản như một ứng dụng doanh nghiệp.
Như một giao diện Web frontend cho phép khách hàng xem và đặt mua sản phẩm thông qua chức năng giỏ hàng và một trang quản trị dành cho quản trị viên. Web frontend sẽ giao tiếp với hệ thống backend xử lý nghiệp vụ thông qua dịch vụ Web RESTful. Dịch vụ Web RESTful giao tiếp với các thành phần OSGi bên dưới thông qua các dịch vụ OSGi, bản thân dịch vụ Web RESTful cũng là một dịch vụ OSGi. Các dịch vụ OSGi bên dưới cũng truy cập đến cơ sở dữ liệu NoSQL thông qua các dịch vụ OSGi.
Chương 4 là kết luận, đánh giá những kết quả đạt được và định hướng phát triển của đề tài. Phần cuối cùng là tài liệu tham khảo và phụ lục. TỔNG QUAN VỀ PHÁT TRIỂN PHẦN MỀM DỰA THÀNH PHẦN 1. Giới thiệu hệ thống dựa thành phần “Xây dựng hệ thống dựa thành phần là hướng tiếp cận dựa trên ý tưởng sử dụng lại các thành phần phần mềm thay vì phát triển các thành phần lại từ đầu” [4].
Từ quan điểm đó các thành phần được định nghĩa, cài đặt và sau đó các thành phần độc lập, có mối quan hệ không chặt chẽ với nhau được kết hợp đưa vào hệ thống. Xây dựng hệ thống dựa thành phần mang lại nhiều ưu điểm như phát triển nhanh, giảm giá thành, khả năng sử dụng lại tốt hơn.1 minh họa việc sử dụng lại các thành phần từ các nguồn cung cấp sau đó sắp xếp và cài đặt thành một hệ thống phần mềm.1: Phát triển hệ thống phần mềm dựa thành phần Các hệ thống phần mềm ngày càng trở nên phức tạp và cung cấp nhiều tính năng hơn. Để có thể tạo ra các sản phẩm phần mềm như thế với chi phí hợp lý. Các nhà cung cấp thường sử dụng công nghệ dựa thành phần thay vì phát triển tất cả các phần của hệ thống từ đầu.
Động lực đằng sau việc sử dụng các thành phần là giảm thiểu giá thành phát triển, nhưng về sau nó trở thành việc quan trọng hơn đó là giảm thiểu thời gian để đưa sản phẩm ra thị trường, nhằm đáp ứng nhu cầu cấp thiết của khách hàng. Các kỹ sư phần mềm quan tâm đến các thành phần như một phần nền móng cho hướng dịch vụ (Service Orientation). Ví dụ trong dịch vụ Web (Web Service) hay gần đây là kiến trúc hướng dịch vụ (SOA), một thành phần được chuyển đổi bởi dịch vụ Web thành một dịch vụ (service) và do đó nó kế thừa các đặc tính cao hơn vượt ra khỏi phạm vi của một thành phần thông thường. Kiến trúc phần mềm dựa thành phần Định nghĩa một thành phần phần mềm: “Một thành phần phần mềm (software component) là một đơn vị kết cấu (composition) tuân thủ các quy định của mô hình thành phần.
Các thành phần giao tiếp với nhau thông qua các giao diện (interface). Thành phần phần mềm có thể được triển khai (deploy) độc lập, là đối tượng để cấu thành hệ thống phần mềm và cũng là đối tượng được cung cấp bởi bên thứ ba (third party) trong phát triển phần mềm dựa thành phần” [6]. Mô hình thành phần: “Mô hình thành phần định nghĩa định dạng và giao diện chuẩn giữa các thành phần. Chúng cho phép các thành phần có thể được triển khai và giao tiếp với nhau” [4].
Phần mềm dựa thành phần được cấu tạo nên bởi các thành phần phần mềm. Tất cả các quy trình của hệ thống được đặt trong các thành phần tách biệt, do đó tất cả các chức năng và dữ liệu bên trong mỗi thành phần là có liên quan với nhau về mặt ý nghĩa nào đó. Do vậy người ta thường nói các thành phần có tính module và gắn kết. Các thành phần có thể sử dụng lại các thành phần có sẵn và chỉ phải phát triển những thành phần nghiệp vụ riêng của ứng dụng.2 mô tả kiến trúc của một hệ thống dựa thành phần, ứng dụng 1 có thể sử dụng chung thành phần 2 và A với ứng dụng 2 và nó chỉ phải phát triển các thành phần A, B, C.2: Kiến trúc hệ thống dựa thành phần Mỗi thành phần có một giao diện được định nghĩa rõ ràng và chúng giao tiếp với các thành phần khác qua giao diện này.
Khi một thành phần cung cấp dịch vụ cho phần z 5 còn lại của hệ thống, nó thông qua giao diện để xác định dịch vụ mà các thành phần khác có thể sử dụng và sử dụng như thế nào. Giao diện này có thể được xem như là chữ ký của thành phần.3 mô tả các thành phần trong một hệ thống dựa thành phần và giao tiếp giữa các thành phần trong hệ thống.3: Ví dụ hệ thống dựa thành phần 1. Đặc tính của thành phần phần mềm Một thành phần phần mềm có những đặc tính sau [6]: - Đóng gói (Encapsulated): Client có thể sử dụng mà không cần biết về cài đặt cụ thể cũng như là các công việc bên trong của thành phần. Ví dụ hệ thống trong hình 1.3 trên thì thành phần đặt phòng khách sạn sẽ sử dụng dịch vụ của thành phần thanh toán.
Nó chỉ cần biết đến giao diện IBilling để sử dụng và không cần biết thành phần thanh toán sử dụng thanh toán qua credit card, tiền mặt hay một phương thức thanh toán nào khác. - Chuẩn hóa (Standardised): Chuẩn hóa thành phần có nghĩa là các thành phần sử dụng trong hệ thống dựa thành phần phải tuân theo một số mô hình thành phần đã được chuẩn hóa. Mô hình này có thể định nghĩa các giao diện cho thành phần, meta-data, cấu tạo của thành phần, triển khai (deployment). Khi đó thì các hệ thống có thể sử dụng lại các thành phần và dễ dàng triển khai.
- Độc lập (Independent): Một thành phần nên độc lập, nó nên được tạo ra và triển khai mà không cần sử dụng các thành phần khác. Trong một số trường hợp khi mà thành phần cần các dịch vụ từ bên ngoài thì điều này nên được khai báo trong một bản đặc tả giao diện được yêu cầu. - Có thể thay thế (Substitutable): Một thành phần có thể được thay thế bởi một thành phần khác (trong thời gian thiết kế hoặc thời gian chạy – run time), nếu một thành phần đáp ứng được các yêu cầu của thành phần ban đầu (yêu cầu này mô tả thông qua giao diện). Theo đó một thành phần có thể được thay thế bởi một phiên bản cập nhật z 6 hoặc thay thế hoàn toàn mà không làm ảnh hưởng đến hệ thống mà thành phần này đang hoạt động.4 mô tả ví dụ về đặc tính này, bộ xử lý văn bản có thể dễ dàng sử dụng phiên bản mới của từ điển thay cho phiên bản cũ.
- Khả năng sử dụng lại (Reusability): Đây là một đặc tính quan trọng của một thành phần phần mềm có chất lượng tốt. Các lập trình viên nên thiết kế và cài đặt nên các thành phần phần mềm theo cách này, khi đó nhiều chương trình khác nhau có thể sử dụng lại chúng. - Triển khai độc lập (deployable): Để có thể triển khai độc lập thì một thành phần cần phải tự bao hàm (self-contained) và có thể hoạt động như một thực thể độc lập trên một số nền tảng thực thi mô hình thành phần.4: Sự kết hợp có thể giữa client cũ và mới và các thành phần của nó 1. Một số mô hình thành phần hiện tại Common Object Request Broker Architecture (CORBA) Được phát triển từ mô hình đối tượng CORBA và được giới thiệu như một mô hình cơ bản của đặc tả thành phần OMG.
Đặc tả mô hình thành phần CORBA định nghĩa một mô hình chung, một mô hình lập trình, một mô hình đóng gói, một mô hình triển khai, một mô hình thực thì và một mô hình meta. Mô hình meta định nghĩa các khái niệm và quan hệ giữa các mô hình khác nhau. Các thành phần CORBA giao tiếp với thế giới bên ngoài thông qua các cổng. Mô hình thành phần CORBA sử dụng ngôn ngữ riêng để đặc tả thành phần: IDL (Interface Defination Language).
Mô hình thành phần CORBA cung cấp một framework gọi là framework cài đặt thành phần CIF (Component Implementation Framework) dựa trên ngôn ngữ định nghĩa cài đặt thành phần CIDL (Component Implementation Definition Language) và mô tả các phần chức năng và phi chắc năng của một thành phần nên tương tác với nhau như thế nào. Thêm nữa, mô hình thành phần CORBA sử dụng XML để xác định các thông tin về đóng gói và triển khai. Mô hình thành phần CORBA cũng có một bộ mô tả cài đặt, nó bao gồm meta-data về việc làm thế nào hai hoặc nhiều thành phần có thể được kết hợp cùng nhau [12]. z 7 JavaBeans Được phát triển bởi Sun Microsystems dựa trên ngôn ngữ lập trình Java.
Trong đặc tả JavaBeans một bean là một thành phần phần mềm có thể sử dụng lại và có thể được sử dụng trực quan vào trong các applet, các ứng dụng, servlet, các thành phần tổng hợp, sử dụng công cụ xây dựng ứng dụng trực quan. Lập trình một thành phần Java yêu cầu định nghĩa của ba tập hợp dữ liệu: thuộc tính (tương tự các thuộc tính trong một class); phương thức; sự kiện, sự kiện là một thay thế cho việc gọi phương thức khi gửi dữ liệu. JavaBeans ban đầu được thiết kế cho việc xây dựng giao diện đồ họa người dùng (Graphic User Interface). Mô hình định nghĩa ba dạng của tương tác điểm, được xem như cổng (port): phương thức, như trong Java; thuộc tính, sử dụng để tham số hóa các thành phần ở thời điểm xây dựng (composition time); nguồn sự kiện, nơi lắng nghe sự kiện (listener) cho việc giao tiếp dựa sự kiện (event-based) [13].