MỞ ĐẦU<br />
Một ứng ứng dụng có thể được phát triển với kiến trúc tốt, sử dụng<br />
công nghệ mới nhất và có giao diện tốt nhất, … nhưng nếu nó không giải<br />
quyết được yêu cầu nghiệp vụ được đề ra thì ứng dụng đó không thể được<br />
xem là hữu ích. Do đó, thiết kế hướng miền DDD được đưa ra. Thiết kế<br />
hướng miền DDD nhằm phát triển phần mềm một cách lặp đi lặp lại xung<br />
quanh một mô hình miền thực tế. Cả phần mềm và mô hình miền đều nắm<br />
bắt triệt để các yêu cầu miền và khả thi để cài đặt xét về mặt kỹ thuật [9]. Ý<br />
tưởng chính của DDD là mô hình hóa miền cho phát triển phần mềm [2].<br />
Về lý thuyết, đội phát triển chỉ cần tập trung chủ yếu vào xây dựng mô hình<br />
miền, và tuân thủ các nguyên tắc DDD khi cài đặt. Khi bộ xương của hệ<br />
thống rắn chắc, mọi thứ trở nên dễ dàng hơn và việc triển khai các tính<br />
năng mới tương tự như việc lắp ghép các viên gạch xếp hình.<br />
Trên thực tế, việc xây dựng một phần mềm hướng miền không hề đơn<br />
giản, quá nhiều công việc cần phải thực hiện: từ phân tích miền, xây dựng<br />
mô hình miền, cài đặt dưới dạng mã nguồn sử dụng ngôn ngữ lập trình nhất<br />
định, đảm bảo các nguyên tắc của DDD là gắn chặt cài đặt với mô hình, cô<br />
lập lớp miền và chứa các thành phần cơ bản cấu thành nên DDD. Để tăng<br />
hiệu suất tạo ra phần mềm, một công cụ Java hỗ trợ phát triển phần mềm<br />
hướng miền tên là DomainAppTool, đã được nhóm tác giả [7] đề xuất.<br />
Công cụ này sử dụng các nghiên cứu gần đây trong DDD là tập trung vào<br />
mở rộng các ngôn ngữ lập trình hướng đối tượng dựa trên annotation để<br />
xây dựng mô hình miền. Mô hình này không chỉ là cơ sở cho ngôn ngữ<br />
chung giữa các thành viên nhóm phát triển mà còn được sử dụng như đầu<br />
vào để sinh ra phần mềm [8].<br />
DomainAppTool tự động hóa tạo ra phần mềm từ một tập các lớp<br />
miền được thiết kế với các tính năng thiết kế hướng miền. Lợi ích chính<br />
của công cụ là cho phép các nhà phát triển chỉ tập chung vào thiết kế mô<br />
hình miền để đưa ra một tập các lớp miền của phần mềm, toàn bộ phần<br />
mềm bao gồm giao diện đồ họa người dùng và đối tượng lưu trữ sẽ được<br />
tạo ra tự động vào thời gian chạy. Một trong những hạn chế của công cụ là<br />
chưa có giao diện người dùng, người sử dụng phải thực hiện thủ công một<br />
loạt các lệnh command line để tạo ra phần mềm. Phát triển phần mềm là<br />
một quá trình lặp đi lặp lại để sinh ra phần mềm cuối cùng. Trong mỗi vòng<br />
lặp phát triển, nếu sử dụng công cụ thì người dùng lại phải thực hiện các<br />
<br />
lệnh đó, gây ra không ít khó khăn và tốn nhiều thời gian. Vì vậy, tôi xin<br />
chọn đề tài “Nghiên cứu và cài đặt một công cụ trên nền tảng Eclipse để<br />
hỗ trợ phát triển các ứng dụng Java” . Mục tiêu của luận văn là tạo ra<br />
một gói mở rộng plug-in cài trên công cụ hỗ trợ lập trình Eclipse cho<br />
DomainAppTool. Từ đó, các chức năng của nó sẽ được trực quan hóa,<br />
người dùng có thể sử dụng bất kỳ khi nào trong quá trình phát triển phần<br />
mềm. Điều này có ý nghĩa quan trọng giúp cho công cụ hỗ trợ phát triển<br />
phần mềm hướng miền được sử dụng rộng rãi hơn.<br />
Trong luận văn, tôi tập trung vào trình bày chi tiết hai đóng góp của<br />
mình là xây dựng thuật toán tạo ra cấu hình phần mềm và xây dựng gói<br />
Eclipse plug-in; cuối cùng, các bước thực hiện thực nghiệm và kết quả đạt<br />
được. Về phần bố cục, luận văn được chia thành 3 chương chính như sau:<br />
Chương 1. Kiến thức nền tảng : Trình bày cơ sở lý thuyết và các<br />
công nghệ chính được sử dụng trong luận văn. Bao gồm: Thiết kế hướng<br />
miền, phương pháp phát triển phần mềm hướng miền, công cụ hỗ trợ phát<br />
triển phần mềm hướng miền và thành phần mở rộng Eclipse Plug-in.<br />
Chương 2. Xây dựng Eclipse Plug-in cho phần mềm hướng<br />
miền : Trình bày mô hình thiết kế Plugin và cài đặt chi tiết của thiết kế.<br />
Các thuật toán tự động sinh phương thức cho lớp miền và cấu hình mô-đun<br />
phần mềm cũng được giới thiệu nhưng trọng tâm tập trung vào trình bày<br />
chi tiết thuật toán sinh cấu hình phần mềm.<br />
Chương 3. Cài đặt và thực nghiệm : Trình bày các yêu cầu về<br />
môi trường cài đặt thực nghiệm, bài toán thực nghiệm và cuối cùng là các<br />
kết quả đạt được.<br />
<br />
CHƯƠNG 1. KIẾN THỨC NỀN TẢNG<br />
1.1. Giới thiệu chương<br />
Chương này sẽ trình bày cơ sở lý thuyết và các công nghệ chính<br />
được sử dụng trong luận văn. Bao gồm ba nội dung chính:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Thiết kế hướng miền DDD: khái niệm, ngôn ngữ chung, thiết kế<br />
hướng mô hình và kiến trúc ứng dụng sử dụng DDD<br />
Phương pháp phát triển phần mềm hướng miền DDSDM: khái<br />
niệm, các pha trong phát triển các nguyên mẫu phần mềm từ mô<br />
hình miền.<br />
Công cụ hỗ trợ phát triển phần mềm hướng miền: lịch sử phát<br />
triển, tổng quan kiến trúc, phát triển các lớp miền và các bước xây<br />
dựng nguyên mẫu phần mềm từ các lớp miền.<br />
Thành phần mở rộng Eclipse Plug-in: Kiến trúc mở của Eclipse và<br />
môi trường phát triển Plug-in.<br />
<br />
1.2. Thiết kế hướng miền<br />
Thiết kế hướng miền là một cách tiếp cận để phát triển phần mềm<br />
có các yêu cầu phức tạp về việc liên kết cài đặt với mộ mô hình phát triển.<br />
Tiền đề của thiết kế hướng miền là:<br />
<br />
<br />
<br />
<br />
Đặt trọng tâm chính của dự án tập trung vào miền lõi và logic<br />
miền.<br />
Các thiết kế phức tạp được xây dựng dựa trên một mô hình miền.<br />
Sự cộng tác giữa chuyên gia miền và chuyên gia phát triển để trau<br />
dồi lặp đi lặp lại một mô hình miền khái niệm giải quyết các vấn<br />
đề miền cụ thể.<br />
<br />
Thiết kế hướng miền phát triển từ tiền đề coi trái tim của phát triển<br />
phần mềm là kiến thức về vấn đề cần giải quyết và tìm các cách hữu ích<br />
nhất để hiểu vấn đề đó. Sự phức tạp cần giải quyết chính là sự phức tạp<br />
của miền chứ không phải là kiến thức kỹ thuật, không phải là giao diện<br />
người dùng hay thậm chí không phải chức năng cụ thể. Điều này có nghĩa<br />
là thiết kế mọi thứ xung quanh hiểu biết và quan niệm về hầu hết các khái<br />
niệm cần thiết của nghiệp vụ, chứng minh cho bất kỳ sự phát triển nào khác<br />
bằng cách nó hỗ trợ miền lõi đó như thế nào.<br />
1.2.1. Xử lý kiến thức<br />
<br />
Phát triển phần mềm là quy trình xây dựng ra phần mềm để giải<br />
quyết các bài toán nghiệp vụ thực tế hay miền vấn đề. Phần mềm bắt nguồn<br />
và liên quan chặt chẽ với miền này. Mặt khác, phần mềm được làm từ mã<br />
nguồn. Nhà phát triển thường xa đà vào việc dành nhiều thời gian tạo ra mã<br />
nguồn và nhìn phần mềm như các đối tượng và phương thức đơn giản.<br />
Xem xét ví dụ sản xuất ô tô. Công nhân liên quan trực tiếp đến việc<br />
lắp ráp linh kiện ô tô có góc nhìn hạn chế về quy trình sản xuất một chiếc ô<br />
tô. Họ coi ô tô là một tập khổng lồ những linh kiện và cần lắp ráp chúng<br />
với nhau; thực ra quy trình tạo ra một chiếc ô tô phức tạp hơn thế nhiều.<br />
Một chiếc xe tốt bắt nguồn từ một tầm nhìn và nó được đặc tả một cách chi<br />
tiết, tiếp theo là thiết kế (rất, rất nhiều thiết kế). Sau nhiều tháng, thậm chí<br />
có thể vài năm; thiết kế đó lại được thay đổi, cải tiến cho tới khi thiết kế trở<br />
nên hoàn hảo nhất. Quá trình thiết kế có thể không làm luôn trên giấy,<br />
nhiều phần thiết kế bao gồm việc mô hình hóa và kiểm thử dưới điều kiện<br />
cụ thể để xem xe hoạt động hay không. Sau đó, thiết kế được thay đổi theo<br />
kết quả kiểm thử. Cuối cùng, chiếc xe được đưa vào sản xuất bao gồm sản<br />
xuất linh kiện và lắp ráp chúng vào nhau. Việc phát triển phần mềm cũng<br />
tương tự như vậy, không thể tạo ra phần mềm phức tạp mà chỉ ngồi viết mã<br />
nguồn. Để tạo ra phần mềm tốt, nhà phát triển cần hiểu về miền vấn đề mà<br />
phần mềm cần giải quyết thông qua việc trao đổi với chuyên gia miền.<br />
Những kiến thức thô về nghiệp vụ không dễ dàng chuyển hóa thành cấu<br />
trúc phần mềm trừ khi miền được “trừu tượng hóa”. “Trừu tượng hóa”<br />
miền vấn đề là việc xây dựng một mô hình miền. Theo Eric Evans, một mô<br />
hình miền không phải là một giản đồ cụ thể, quan trọng là ý tưởng mà giản<br />
đồ đó muốn truyền đạt; quan trọng không phải là kiến thức trong đầu của<br />
chuyên gia miền mà là sự trừu tượng hóa miền kết hợp chặt chẽ với kiến<br />
thức đó và cả nhóm phát triển có thể hiểu được.<br />
Mô hình là một sự thể hiện của miền cần xem xét và rất cần thiết<br />
trong suốt quá trình phát triển phần mềm. Mô hình hóa miền đòi hỏi kiến<br />
thức xử lý theo cách tương tự các nhà phân tích tài chính xử lý những con<br />
số để hiểu hiệu suất hàng quý của một công ty. Khi làm việc với chuyên gia<br />
miền, người mô hình hóa miền sẽ thử đưa ra một số ý tưởng tổ chức tập các<br />
khái niệm, sau đó, tạo các mô hình, dùng thử chúng, một số mô hình bị loại<br />
bỏ trong khi một số khác bị biến đổi.<br />
<br />
Phát triển là lặp đi lặp lại, xử lý kiến thức là liên tục trong suốt vòng<br />
đời của dự án. Các nỗ lực mô hình hóa được tạo ra trong các vòng lặp đầu<br />
tiên thường hời hợt. Sự trừu tượng hóa xuất hiện theo thời gian và phải<br />
được tái cấu trúc và sử dụng vào trong mô hình. Để đạt được điều này cần<br />
duy trì một mối quan hệ chặt chẽ, liên tục với các chuyên gia miền.<br />
1.2.2. Ngôn ngữ chung<br />
Yêu cầu đầu tiên của cách tiếp cận DDD là ngôn ngữ chung cho<br />
phép chuyên gia miền và chuyên gia phần mềm có thể hiểu nhau và cộng<br />
tác với nhau. Thông thường, lập trình viên chỉ nghĩ tới lớp, phương thức,<br />
thuật toán và khuynh hướng diễn đạt mọi vấn đề dưới dạng mã nguồn. Khi<br />
nhìn vào các đối tượng nào đó và quan hệ mô hình giữa chúng, lập trình<br />
viên nghĩ đến kế thừa, đa hình, lập trình hướng đối tượng,… Tuy nhiên,<br />
chuyên gia miền thường không hiểu những khái niệm đó. Để vượt qua rào<br />
cản giao tiếp này, DDD khuyến khích xây dựng mô hình, trao đổi ý tưởng<br />
về mô hình, về những thành phần liên quan đến mô hình. Giao tiếp tốt ở<br />
mức này rất quan trọng cho sự thành công của dự án. Khi trao đổi về mô<br />
hình, có nhiều khái niệm chuyên ngành rất dễ bị hiểu sai với người ngoài<br />
ngành. Vì vậy, cần có một từ điển thuật ngữ dự án giải thích chi tiết các<br />
khái niệm đó, đảm bảo tất cả các bên liên quan đến dự án đều hiểu đúng về<br />
mô hình.<br />
Nguyên tắc cốt lõi của thiết kế hướng miền là sử dụng ngôn ngữ<br />
dựa trên mô hình. Vì mô hình là xuất phát điểm chung, là đầu vào cho phần<br />
mềm giải quyết miền vấn đề. Ngôn ngữ chung kết nối mọi phần của thiết<br />
kế cũng như hoạt động của nhóm phát triển.<br />
1.2.3. Rằng buộc mô hình và cài đặt<br />
Đối tượng điển hình trong mô hình có các liên kết phức tạp với các<br />
đối tượng khác và mạng lưới liên kết này có một vài đường biên tự nhiên.<br />
Khi nhà phát triển bắt đầu cài đặt ứng dụng, họ nhanh chóng phát hiện ra<br />
rằng mớ hỗn độn các liên kết không chuyển thành các đơn vị có thể lữu trữ,<br />
có thể phục hồi cùng nhờ tính toàn vẹn dữ liệu. Nếu dự án sử dụng cơ sở dữ<br />
liệu đối tượng thì nhà phát triển thậm chí phải đối mặt với những thách<br />
thức của việc ánh xạ các đối tượng vào các bảng quan hệ. Ở mức độ cơ<br />
bản, mô hình không cung cấp hướng dẫn để cài đặt.<br />
<br />