Nghiên cứu xây dựng hệ thống sinh tự động mã nguồn các website ASP.NET MVC
TÓM TẮT - Tác giả tiến hành nghiên cứu lý thuyết sinh mã nguồn tự động và ứng dụng để tạo ra chương trình sinh tự động
mã nguồn các website ASP.NET theo mô hình MVC của Microsoft. Đầu vào là siêu dữ liệu từ cơ sở dữ liệu (CSDL), các khuôn mẫu
các trang web có cấu trúc theo tiêu chuẩn của thư viện StringTemplate và cấu hình của người dùng. Đầu ra là một ứng dụng web
hoạt động theo mô hình MVC trên nền tảng ASP.NET. Website được sinh ra có các chức năng thao tác dữ liệu như hiển thị kết quả
thực thi truy vấn, thêm mới, cập nhật, xóa trên các bảng, khung nhìn. Đối với khung nhìn đã có sẵn trong CSDL hoặc truy vấn do
người dùng định nghĩa, dựa trên siêu dữ liệu của các bảng tham gia thu được từ CSDL, bài báo đề xuất thuật toán xác định bảng để
khuyến cáo cập nhật, thêm mới và xóa dữ liệu cũng như giới hạn các cột có thể chọn cho các trang web đó. Người dùng cũng có thể
chọn khuôn mẫu riêng biệt cho mỗi trang web. Website được chương trình sinh ra có thể được triển khai ngay trên máy chủ web IIS
mà không cần thêm bất cứ thành phần nào khác.
Tóm tắt nội dung tài liệu: Nghiên cứu xây dựng hệ thống sinh tự động mã nguồn các website ASP.NET MVC
Kỷ yếu Hội nghị Quốc gia lần thứ VIII về Nghiên cứu cơ bản và ứng dụng Công nghệ thông tin (FAIR); Hà Nội, ngày 9-10/7/2015 DOI: 10.15625/vap.2015.000188 NGHIÊN CỨU XÂY DỰNG HỆ THỐNG SINH TỰ ĐỘNG MÃ NGUỒN CÁC WEBSITE ASP.NET MVC Nguyễn Trần Quốc Vinh1, Nguyễn Văn Vương2, Nguyễn Ngọc Cương3 1,2Trường Đại học Sư phạm - Đại học Đà Nẵng, 3Học viện An ninh Nhân dân 1ntquocvinh@gmail.com, 2vanvuong2610@gmail.com, 3cuongnn.hvan@gmail.com TÓM TẮT - Tác giả tiến hành nghiên cứu lý thuyết sinh mã nguồn tự động và ứng dụng để tạo ra chương trình sinh tự động mã nguồn các website ASP.NET theo mô hình MVC của Microsoft. Đầu vào là siêu dữ liệu từ cơ sở dữ liệu (CSDL), các khuôn mẫu các trang web có cấu trúc theo tiêu chuẩn của thư viện StringTemplate và cấu hình của người dùng. Đầu ra là một ứng dụng web hoạt động theo mô hình MVC trên nền tảng ASP.NET. Website được sinh ra có các chức năng thao tác dữ liệu như hiển thị kết quả thực thi truy vấn, thêm mới, cập nhật, xóa trên các bảng, khung nhìn. Đối với khung nhìn đã có sẵn trong CSDL hoặc truy vấn do người dùng định nghĩa, dựa trên siêu dữ liệu của các bảng tham gia thu được từ CSDL, bài báo đề xuất thuật toán xác định bảng để khuyến cáo cập nhật, thêm mới và xóa dữ liệu cũng như giới hạn các cột có thể chọn cho các trang web đó. Người dùng cũng có thể chọn khuôn mẫu riêng biệt cho mỗi trang web. Website được chương trình sinh ra có thể được triển khai ngay trên máy chủ web IIS mà không cần thêm bất cứ thành phần nào khác. Từ khóa - sinh tự động mã nguồn, khuôn mẫu, trang web aspx, mô hình MVC, thao tác dữ liệu, truy vấn và khung nhìn I. ĐẶT VẤN ĐỀ Sinh mã nguồn là kỹ thuật viết và sử dụng các chương trình để xây dựng các ứng dụng hay hệ thống mã cụ thể nào đó một cách tự động [1]. Sinh mã nguồn tự động sẽ giúp tiết kiệm thời gian viết mã. Mã nguồn được sinh ra dễ đọc và đảm bảo ít lỗi do được sinh ra trên cơ sở các khuôn mẫu chuẩn. Các mô tả cho mã nguồn đầu ra là độc lập với nền tảng công nghệ, tức là không phụ thuộc vào công nghệ sử dụng là .NET, Java hay là PHP. Ngày nay, việc phát triển ứng dụng công nghệ thông tin, đặc biệt là ứng dụng web đang trở nên phổ biến. Các nhà phát triển ứng dụng web thường xuyên phải lặp lại các công việc tương tự nhau trong suốt quá trình phát triển các website, các trang web một cách vô nghĩa. Việc đó chiếm một khoảng thời gian lớn, đồng nghĩa với gia tăng một khoản chi phí đáng kể đối với doanh nghiệp. Để giảm bớt khối lượng công việc cho các nhà phát triển, sinh mã nguồn một cách tự động là giải pháp được đánh giá là tốt nhất hiện nay. Trên thế giới, có nhiều phần mềm sinh mã nguồn tự động với rất nhiều phiên bản miễn phí hoặc thương mại. Nổi bật nhất là phần mềm ASP.NET Maker [2] và CodeSmith Generator [3]. Cả hai phần mềm đều tính phí sử dụng. Công trình [4] dùng StringTemplate thực hiện sinh mã nguồn website đơn giản trên nền tảng ASP.NET. Nhìn chung, các hệ thống sinh mã nguồn hiện tại gặp phải các hạn chế sau: - Chưa sinh được mã nguồn website trên nền tảng ASP.NET theo mô hình MVC của Microsoft sử dụng Razor View Engine. - Không tạo được chương trình hoàn chỉnh, chỉ sinh mã cho các loại đối tượng cụ thể, ví dụ chỉ sinh mã nguồn C#, không sinh được giao diện; - Mã nguồn được sinh ra cần phải biên dịch mới có thể triển khai ứng dụng trên máy chủ web được; - Người sử dụng không thể thêm, bớt hoặc kế thừa mã nguồn được sinh ra; - Không thể tùy chỉnh khuôn mẫu, chỉ cho phép chọn một khuôn mẫu cho mỗi dự án, không cho phép cấu hình bố trí cho từng trang web; - Không sinh được mã cho chức năng thêm, sửa, xóa đối với bảng tham gia vào truy vấn và khung nhìn. Hạn chế này là nghiêm trọng, bởi lẽ hầu hết người dùng trong hầu hết trường hợp đều có nhu cầu thao tác dữ liệu dựa trên ngữ cảnh – thao tác dữ liệu ở bảng này nhưng cần thông tin bổ trợ từ nhiều bảng khác. Nếu sinh mã thao tác dữ liệu chỉ dựa trên thông tin từ một bảng thì sẽ rất khó khăn. Chẳng hạn cho trường hợp bảng điểm của sinh viên có thể chỉ bao gồm các cột mã-môn-học, mã-sinh-viên và điểm. Mô hình MVC (model-view-controler) tiêu chuẩn có nhiều ưu điểm so với mô hình web truyền thống. Ngoài các đặc điểm chung của mô hình MVC tiêu chuẩn, mô hình MVC của Microsoft còn được bổ sung các tính năng mở rộng khác. Tác giả nghiên cứu việc sinh mã nguồn tự động các trang web ASP.NET theo mô hình MVC của Microsoft. Các website được sinh ra cho phép tìm kiếm và thao tác dữ liệu trên các bảng cũng như khung nhìn và truy vấn. Tác giả tiến hành nghiên cứu kỹ thuật sinh mã nguồn tự động bằng cách lập trình sử dụng thư viện StringTemplate, ứng dụng các kỹ thuật đó để xây dựng chương trình sinh mã nguồn trên CSDL SQL Server. Kết quả mong đợi là hệ thống chương trình có thể sinh ra một website hoàn chỉnh có thể chạy ngay trên máy chủ web IIS cho mỗi CSDL, với đầy đủ các chức năng thêm, sửa, xóa và tìm kiếm trên từng bảng, từng khung nhìn; cũng như khả năng chọn khuôn mẫu cho mỗi trang web và tuỳ chỉnh bố trí giao diện cho mỗi trang web sinh ra. Hệ thống được sinh ra phải được tích hợp quản Nguyễn Trần Quốc Vinh, Nguyễn Văn Vương, Nguyễn Ngọc Cương 507 lý đăng nhập và phân quyền. Việc cho phép chọn khuôn mẫu cho từng trang rất ý nghĩa, vì thông thường, các trang dành cho quản trị có giao diện khác so với các trang dành cho người dùng. Tính năng cho phép thay đổi thứ tự các cột là chưa đủ, vì các cột có độ rộng khác nhau, đòi hỏi không gian khác nhau để hiển thị giá trị. Theo đó, tính năng nâng cao cho phép điều chỉnh bố trí trang web là cần thiết cho các trang thêm, sửa, xem một bản ghi. Ngoài ra, chương trình sinh tự động mã nguồn còn tạo ra mã nguồn gồm các tính năng khác như: quản lý tệp trên máy chủ (tải lên, đổi tên, xóa), tính năng bảo mật, quản lý tài khoản người dùng và phân quyền; sử dụng AJAX... II. XÂY DỰNG CHƯƠNG TRÌNH SINH TỰ ĐỘNG MÃ NGUỒN A. StringTemplate StringTemplate là một thư viện máy sinh theo mẫu (Template Engine Library) dùng để tạo ra các văn bản dựa trên các mẫu dữ liệu có cấu trúc [5,6]. Thư viện này được tạo ra do nhu cầu phát triển các trang web “động” với nhiều khuôn mẫu khác nhau với mong muốn làm cho phát triển ứng dụng web dễ dàng hơn, cải thiện tính linh hoạt, giảm chi phí bảo trì và cho phép viết song song mã nguồn xử lý (C#, Java, PHP) và mã nguồn giao diện (HTML). B. Sinh mã mô-đun làm việc với CSDL Kiến trúc MVC (Model-View-Controller) đã trở thành khuôn mẫu tốt nhất trong việc phát triển phần mềm hiện nay. Kiến trúc MVC thể hiện sự chia tách mạnh mẽ các thành phần trong một phần mềm, ví dụ tách giữa thao tác dữ liệu, xử lý lô-gíc và hiển thị nội dung. Việc tách rõ các mối quan tâm giúp chia nhỏ sự phức tạp khi thiết kế một ứng dụng, tăng khả năng kiểm thử độc lập các thành phần trong quá trình phát triển, dễ dàng hơn trong việc nâng cấp. Kiến trúc MVC chia ứng dụng thành 3 thành phần chính, đó là: i) Model gồm một tập các lớp mô tả các dữ liệu mà người dùng đang làm việc và các quy tắc ràng buộc sự thay đổi dữ liệu; ii) View định nghĩa cách thức giao diện người dùng sẽ được hiển thị; iii) Controller là một tập các lớp điều khiển các luồng dữ liệu của người dùng, xử lý các sự kiện trong hệ thống. Trong ASP.NET MVC, model thực hiện đóng gói dữ liệu được lưu trữ trong CSDL, điều khiển và cập nhật các thay đổi của model vào các đối tượng cụ thể trong CSDL. Model sử dụng công cụ Entity Framework để truy xuất dữ liệu. Đối với view, ASP.NET MVC sử dụng Razor View Engine hoặc ASPX View Engine để xử lý hiển thị. Giống như ASPX View Engine, Razor cho phép viết mã HTML và C# hoặc VB.NET trên cùng 1 tệp. Tuy nhiên, với Razor người dùng sử dụng ít ký tự để viết mã hơn. Ví dụ khai báo khối lệnh C#, ASPX dùng cặp đánh dấu , còn Razor chỉ cần khai @. Ngoài ra, Razor cho phép viết đang mã HTML bên trong mã C# (VB.NET). Sự phối hợp này mang lại tính đơn giản và dễ sử dụng khi viết mã nguồn, đặc biệt là trong kiểm thử tự động. Cuối cùng là controller, thành phần điều khiển các yêu cầu của người dùng, làm việc với các model và lựa chọn view để hiển thị lên giao diện người dùng. Như vậy, để sinh mã nguồn cho một ứng dụng ASP.NET MVC ngoài sinh mã nguồn cho 3 thành phần chính, chúng ta cần sinh mã mô-đun làm việc với CSDL theo mô hình Entity Framework. Bên cạnh đó, cú pháp Razor sử dụng trên view phải được tuân thủ chặt chẽ nếu không muốn ứng dụng bị lỗi khi chạy. C. Xác định cấu trúc dữ liệu Chương trình sinh tự động mã nguồn sử dụng các siêu dữ liệu (meta-data) lấy từ CSDL như thông tin về bảng, về khung nhìn và các cột, cũng như thông tin về khoá chính và khoá độc nhất (unique, sau đây gọi chung là khoá) và khoá ngoại. Cụ thể, siêu dữ liệu có thể bao gồm tên bảng hoặc khung nhìn; tên các trường (field name), còn được gọi là tên cột (column), cấu tạo nên bảng hoặc khung nhìn cùng với kiểu dữ liệu, kích thước và cho phép trống (NULL) hay không; thông tin khoá; thông tin khoá ngoại; truy vấn định nghĩa các khung nhìn. Mối quan hệ giữa các bảng được xác định thông qua điều kiện của phép nối giữa các bảng trong truy vấn cùng với thông tin về khoá của các bảng. Mỗi bảng, khung nhìn sẽ được biểu diễn bằng một lớp với tên gọi là thực thể (Entity). Tập hợp các thực thể biểu diễn mô hình khái niệm của CSDL. Việc ánh xạ giữa cấu trúc lưu trữ CSDL và mô hình khái niệm được quản lý bởi những quy ước trong Entity Framework [7]. Ngoài ra, toàn bộ siêu dữ liệu của CSDL là những thông tin có dạng phân cấp, các bảng, khung nhìn và cột có mối quan hệ với nhau. Với ngôn ngữ XML, dữ liệu được lưu trữ dưới dạng cây [8], nên sử dụng XML để lưu lại các siêu dữ liệu. Việc đọc và ghi thông tin bằng XML rất thuận lợi và nhanh chóng thông qua các thư viện được hỗ trợ trong C#. D. Sinh mã giao diện sử dụng cú pháp Razor View Engine Razor View Engine được sử dụng lần đầu tiên trong ASP.NET MVC 3. Razor sử dụng Layout Page làm trang chính và View Page, View Page with Layout làm trang con. Razor có cú pháp đơn giản, sử dụng ký tự @ để bắt đầu viết mã C# (VB.NET). Điều này giúp cho việc lập trình giao diện trở nên nhanh hơn, ví dụ: để hiển thị một đoạn dữ liệu ta chỉ cần viết “@obj.Attribute” hoặc viết trong khối lệnh “@if (foo) {Plain Text}”. Ngoài ra, Razor hỗ trợ kiểm thử đơn vị cho các view mà không cần controller hoặc chạy ứng dụng trên máy chủ web. Với cú pháp Razor, chương trình sinh mã cần nhận biết được vị trí mã nguồn C# và vị trí mã nguồn HTML để tiến hành sinh mã chính xác. 508 NGHIÊN CỨU XÂY DỰNG HỆ THỐNG SINH TỰ ĐỘNG MÃ NGUỒN CÁC WEBSITE ASP.NET MVC E. Quá trình sinh mã Quá trình sinh mã nguồn được tiến hành theo quy trình chuẩn, bao gồm các bước thu thập, trích lọc, chuyển đổi thông tin CSDL về dạng phù hợp, áp dụng các quy tắc sinh mã và nạp khuôn mẫu. Các thông tin CSDL đầu vào phục vụ cho việc sinh mã được lấy từ bất kỳ CSDL quan hệ nào trên nền tảng SQL Server. Các khuôn mẫu có sẵn là một đầu vào khác của hệ thống. Các khuôn mẫu bao gồm các nhóm: nhóm khuôn mẫu view (.cshtml), nhóm khuôn mẫu controller (.cs), nhóm khuôn mẫu model (.cs), nhóm khuôn mẫu entities (.cs). Các khuôn mẫu được tổ chức lưu trữ thành các tệp trên đĩa cứng. Nội dung của các khuôn mẫu gồm hai phần, đó là phần không thay đổi (phần tĩnh) và phần thay đổi (phần động) trong suốt quá trình sinh mã. Khuôn mẫu được nạp ngay khi hệ thống có được các thông tin CSDL cần thiết và tùy vào việc sinh mã cho nhóm nào thì nhóm khuôn mẫu tương ứng sẽ được nạp. Việc sinh mã là công việc rất phức tạp, đòi hỏi phải trải qua nhiều bước và tuân thủ nhiều quy tắc. Tác giả đề xuất xây dựng một công cụ riêng để thực hiện việc này bằng ngôn ngữ lập trình C#. Sau khi nghiên cứu các kỹ thuật sinh mã nguồn tự động, tác giả đề xuất cấu trúc của hệ thống bao gồm các thành phần: giao diện cấu hình CSDL, giao diện tùy chọn sinh mã và ghi vết chương trình, giao diện cấu hình đầu ra, giao diện tạo khung nhìn và thực thi truy vấn, giao diện người dùng, bộ sinh mã, các khuôn mẫu, các gói tiện ích, biên dịch và đóng gói. Các thành phần này hoạt động độc lập với nhau và được điều khiển bởi bộ sinh mã để thực hiện chức năng sinh mã của hệ thống. Hình 1. Sơ đồ hoạt động của hệ thống Tác giả sử dụng công cụ Visual Studio 2013 và .Net Framework 4.5 để xây dựng các thành phần của hệ thống có cách thức hoạt động được mô tả trên hình 1. Trong đó, bước thứ 6 – thực hiện sinh mã nguồn gồm nhiều chức năng. Các chức năng đó là gọi tiện ích đọc tệp và nạp khuôn mẫu phù hợp; truyền thông tin CSDL từng bảng và từng khung nhìn vào khuôn mẫu; xuất ra kết quả dạng chuỗi từ khuôn mẫu đã nạp dữ liệu; ghi tệp kết quả ra đĩa cứng; ghi nhật ký cho quá trình sinh mã cho từng bảng và từng khung nhìn. F. Sinh mã nguồn cho khung nhìn và truy vấn Hệ thống sinh mã nguồn quan tâm đến một số cấu trúc đặc biệt của các truy vấn tạo khung nhìn từ CSDL, truy vấn tạo khung nhìn do người dùng định nghĩa trực tiếp trên hệ thống sinh mã nguồn hoặc các truy vấn. Khi các bảng tham gia tạo khung nhìn có các mối quan hệ theo một quy tắc nào đó, nếu hệ thống phát hiện được các cấu trúc này thì hoàn toàn có thể tạo các chức năng thêm, cập nhật, xóa dữ liệu. Sau khi nghiên cứu nhiều truy vấn, tác giả nhận thấy các truy vấn có cấu trúc chung rơi vào các trường hợp sau đây: Trường hợp 1: Trường hợp 2: Trường hợp 3: Trường hợp 4: Trường hợp 5: Nguyễn Trần Quốc Vinh, Nguyễn Văn Vương, Nguyễn Ngọc Cương 509 Các hình vẽ trên đây thể hiện xu hướng mối quan hệ của các bảng tham gia vào truy vấn. Tất nhiên, mô hình có thể được mở rộng. Trong đó, mỗi hình ô-van cùng với hệ số được gắn kèm đại diện cho một bảng dữ liệu, mũi tên có hướng biểu thị mối quan hệ một – nhiều, đường nối không có hướng biểu thị mối quan hệ một – một giữa hai bảng. Việc xác định mối quan hệ được thực hiện dựa trên thông tin khoá của các bảng tham gia vào truy vấn của các cột tham gia vào điều kiện phép nối. Thông tin về khoá ngoại chỉ được dùng để khuyến cáo tạo điều kiện phép nối trong quá trình thiết kế truy vấn. Nếu một đầu là khoá và đầu kia không phải là khoá, thì mối quan hệ là một – nhiều. Nếu cả hai đầu đều là khoá, thì mối quan hệ là một – một. Việc lựa chọn bảng để sinh mã thực hiện thao tác thêm, sửa, xoá được khuyến cáo theo mức độ ưu tiên tỉ lệ thuận với hệ số của mỗi bảng. Để có thể thực hiện gắn hệ số cho mỗi bảng, bài viết đề xuất xây dựng ma trận vuông n x n, với n – số lượng bảng tham gia vào truy vấn, để biểu diễn đồ thị thể hiện mối quan hệ giữa các bảng. Mỗi phần tử trong ma trận biểu thị mối quan hệ giữa hai bảng đứng ở hàng và cột giao nhau. Mỗi bảng trong mối quan hệ một – nhiều được đánh số sao cho giá trị của bảng này bằng tổng hoặc bằng hiệu của bảng liền kề với 1 và phải luôn lớn hơn 0 theo nguyên tắc: cộng cho 1 nếu đi cùng hướng mũi tên, trừ cho 1 nếu ngược lại. Đối với trường hợp mối quan hệ một – một, hai bảng có giá trị bằng nhau. Đồ thị thu được sau khi đã gắn hệ số cho các bảng được dùng vào hai mục đích, đó là để khuyến cáo người dùng chọn bảng để sinh mã nguồn thực hiện các thao tác dữ liệu và xác định các cột có thể tham gia vào trang web thao tác dữ liệu cũng như vai trò của nó. Thứ nhất, những bảng có hệ số cao hơn sẽ được khuyến cáo với mức độ cao hơn. Thứ hai, một khi một bảng có hệ số k được chọn để sinh mã nguồn thực hiện thao tác dữ liệu, i) chỉ các cột thuộc bảng đó mới có thể tham gia vào trang web với vai trò tiếp nhận giá trị mới (editable) hoặc hiển thị giá trị đã có; ii) các cột thuộc bảng có hệ số nhỏ hơn hoặc bằng k có thể xuất hiện trong trang web thao tác dữ liệu, nhưng chỉ với vai trò hiển thị giá trị; iii) các cột thuộc bảng có hệ số lớn hơn k không được phép chọn cho vào trang web thao tác dữ liệu. Với trường hợp truy vấn không bao gồm các hàm thống kê, chỉ bao gồm phép nối, phép chọn và phép chiếu, hệ thống luôn đề xuất lấy bộ giá trị khoá của bảng để gắn liền với mỗi bản ghi. Khi khoá không có mặt trong mệnh đề SELECT trong truy vấn, người dùng không thể chọn để cho phép hiển thị, nhưng luôn tồn tại các đối tượng ẩn được sinh ra chứa các bộ giá trị khoá đó gắn liền với mỗi bản ghi được hiển thị. Việc này nhằm mục đích hỗ trợ các thao tác sửa và xoá dữ liệu. Với trường hợp truy vấn đầu vào bao gồm các hàm thống kê, bài viết chỉ xét các bảng tham gia vào truy vấn với các cột đều nằm trong mệnh đề GROUP BY và trong số các cột đó phải bao gồm các cột tạo nên khoá chính hoặc một khoá độc nhất nào đó. III. KẾT QUẢ VÀ ĐÁNH GIÁ A. Kết quả Hệ thống sinh tự động mã nguồn được thiết kế để sinh mã nguồn cho các CSDL quan hệ khác nhau. Trước tiên, phải thiết lập cấu hình kết nối CSDL thông qua giao diện hệ thống. Người dùng nhập thông tin máy chủ CSDL, thể hiện của hệ quản trị CSDL, tên CSDL, cổng kết nối, tên đăng nhập và mật khẩu. Tất nhiên, yêu cầu đối với tài khoản đăng nhập phải có đủ quyền để có thể đọc được siêu dữ liệu. Sau khi hệ thống kết nối thành công đến CSDL thì giao diện sẽ tương tự như hình 2. Hình 2. Giao diện chính của chương trình Trên giao diện này, người dùng có thể thấy phía bên trái là danh sách các bảng và khung nhìn có trong CSDL. Bên phải là tùy chọn cấu hình cho từng bảng. Người dùng có thể lựa chọn khuôn mẫu bố trí cho từng trang web ở thông số “Using Template”. Người dùng có thể định nghĩa các khuôn mẫu bố trí trang web khác nhau ngoài hai khuôn mẫu phổ biến đã được hệ thống cung cấp sẵn, đó là bố trí theo dạng bảng chi tiết (list) và bố trí theo kiểu ma trận (matrix). Danh sách các khuôn mẫu bố trí tự động được nạp khi có khuôn mẫu mới. Khi người dùng nhấn chuột vào từng bảng cụ thể sẽ xuất hiện giao diện cấu hình thông tin cho các cột của bảng như trên hình 3. Hình 3. Giao diện tùy chỉnh cột 510 NGHIÊN CỨU XÂY DỰNG HỆ THỐNG SINH TỰ ĐỘNG MÃ NGUỒN CÁC WEBSITE ASP.NET MVC Hình 4. Giao diện tùy chọn bảng để thao tác dữ liệu Hình 4 cho thấy hệ thống khuyến cáo lựa chọn bảng LopTinChi để tạo trang web thao tác dữ liệu đối với khung nhìn Khoa_BM_GV_LopTC sử dụng 4 bảng theo thứ tự tăng dần của hệ số (xem II.F): Khoa, BoMon, GiangVien và LopTinChi. Trên trang web này, có thể thao tác dữ liệu trên các cột thuộc bảng LopTinChi. Các cột từ các bảng còn lại chỉ có thể được chọn để hiện thị trong chế độ chỉ đọc. Nếu người dùng chọn bảng BoMon, thì tương ứng sẽ là bảng Khoa; người dùng không thể chọn các cột từ các bảng GiangVien và LopTinChi để hiển thị trên trang web thao tác dữ liệu bảng BoMon. Đối với các trang web hiển thị dữ liệu cho khung nhìn hoặc truy vấn, hệ thống cung cấp tuỳ chọn để cho phép thao tác dữ liệu trên bảng bất kỳ tham gia vào khung nhìn hoặc truy vấn. Khi đó, người dùng sẽ được điều hướng sang trang web khác cho phép thao tác dữ liệu với bảng có trường được chọn, trên đó có thể hiện các cột từ các bảng có hệ số thấp hơn. Ngoài ra, hệ thống cho phép người dùng tạo khung nhìn bằng công cụ thiết kế truy vấn cơ bản. Người dùng chỉ cần chọn và kéo thả bảng hoặc cột vào lưới thì sẽ tự động sinh ra truy vấn như trên hình 5. Hình 5. Giao diện thiết kế truy vấn Đối với các truy vấn được tạo ra trực tiếp trên giao diện hỗ trợ viết truy vấn và các truy vấn tạo nên khung nhìn trong CSDL, chương trình đề xuất giao diện (hình 4) chọn bảng để sinh các trang web thực hiện thêm, cập nhật, xóa. Theo nguyên tắc đã đưa ra ở trên, tuỳ thuộc vào bảng được chọn, tại giao diện này có thể chọn các cột khác nhau từ các bảng khác nhau tham gia vào trang web thao tác dữ liệu và có một số cột từ một số bảng có thể không nằm trong danh sách lựa chọn này. B. Đánh giá Kết quả đạt được khi ứng dụng hệ thống sinh tự động mã nguồn cho thấy hệ thống đã sinh ra được mã nguồn _CSHTML, CS và các cấu hình cần thiết cho ứng dụng. Ứng dụng web được sinh ra chạy theo mô hình MVC. Với mô hình MVC, người dùng có thể dễ dàng kiểm thử, nâng cấp và chỉnh sửa chức năng giúp hệ thống hoạt động ổn định hơn. Hệ thống cũng đã đưa ra nhiều tùy chọn cấu hình, tạo nên một sự mềm dẻo, linh hoạt trong quá trình sinh mã. Đồng thời, hệ thống sinh mã đã khắc phục được các hạn chế của các hệ thống trên thị trường hiện nay. Về mặt hiệu năng, tuy chưa tiến hành kiểm tra các website được sinh ra bằng các công cụ chuyên dụng, nhưng có thể khẳng định rằng, chúng không thể có hiệu năng tốt như trường hợp website được xây dựng thủ công hoàn toàn với sự chú tâm tối ưu trong xử lý đến từng lệnh SQL đến CSDL. Nguyễn Trần Quốc Vinh, Nguyễn Văn Vương, Nguyễn Ngọc Cương 511 IV. KẾT LUẬN Trong phạm vi nghiên cứu, tác giả đã sử dụng thư viện StringTemplate để xây dựng được hệ thống sinh tự động mã nguồn với đầu vào là một CSDL quan hệ bất kỳ. Đầu ra của chương trình là một ứng dụng web theo mô hình MVC với các chức năng tương tác dữ liệu trên các bảng và các khung nhìn như thêm mới, cập nhật, xóa, tìm kiếm và trình bày dữ liệu. Hệ thống sinh tự động mã nguồn về căn bản đã giải quyết được vấn đề sinh mã nguồn toàn diện cho ứng dụng. Ngoài khả năng sinh mã như các hệ thống khác trên thị trường, hệ thống đã khắc phục một số nhược điểm của các hệ thống hiện có trên thị trường bằng các tính năng như khả năng chọn khuôn mẫu riêng biệt cho từng trang web, tuỳ chỉnh bố trí cho từng trang web, sinh mã thao tác dữ liệu cho truy vấn và khung nhìn. Nghiên cứu đã đề xuất các thuật toán để xác định bảng để khuyến cáo người dùng chọn bảng để sinh mã nguồn thực hiện các thao tác dữ liệu và xác định các cột có thể tham gia vào trang web thao tác dữ liệu cũng như vai trò của nó trên giao diện thao tác dữ liệu. Trên cơ sở đó, nghiên cứu xây dựng tính năng sinh mã nguồn thao tác dữ liệu cho trường hợp truy vấn hoặc khung nhìn từ CSDL. Chương trình cũng cung cấp công cụ thiết kế truy vấn thân thiện. Tuy nhiên, mã nguồn được sinh ra chỉ chạy ổn định nếu sử dụng công nghệ .NET 4.5. Việc sinh mã nguồn thao tác dữ liệu cho trường hợp các truy vấn chỉ dừng lại ở các truy vấn nối trong (INNER JOIN). Đối với truy vấn nối ngoài (OUTER JOIN), truy vấn lồng và truy vấn đệ quy, hệ thống chỉ có thể sinh mã nguồn các trang web hiển thị, chưa sinh được trang web thao tác dữ liệu. Hệ thống cũng chưa hỗ trợ các tính năng cho phép người dùng lập trình xử lý sự kiện trên các đối tượng khác nhau. Đây chắc chắn là hướng phát triển của nghiên cứu. V. TÀI LIỆU THAM KHẢO [1] Jack Herrington, “Code Generation”, (truy cập: 12/01/2013) [2] “ASPMaker v.12”, (truy cập: 24/05/2015) [3] “CodeSmith Generator”, (truy cập: 24/05/2014) [4] Nguyễn Trần Quốc Vinh, Nguyễn Văn Vương, “Nghiên cứu xây dựng hệ thống sinh tự động mã nguồn các website .ASPX trên cơ sở dữ liệu”, Tạp chí Khoa học và Công nghệ - Đại học Đà Nẵng, số 8(69), tr. 182- 188. 2013. [5] Terence Parr, “StringTemplate”, (truy cập: 14/05/2015) [6] Collin Fagan, “Generating a Builder Class using StringTemplate”, https://www.java.net/blogs/aberrant. (truy cập: 05/01/2015) [7] Morgridge Dane, “Entity Framework 4.1, Code First”, (truy cập: 11/5/2015) [8] Doug Tidwell, “Giới thiệu về XML”, (truy cập: 20/04/2015) BUILDING THE APPLICATION THAT GENERATES CODE AUTOMATICALLY FOR ASP.NET MVC WEBSITES Nguyen Tran Quoc Vinh, Nguyen Van Vuong, Nguyen Ngoc Cuong ABSTRACT - In this paper, the authors have done research on the theory of automatic code generating and apply this theory to build the software that can generate automatically code for ASP.NET MVC website. The input of the program is the database metadata, user’s configurations and templates of web pages. The output is the .NET MVC web application. The structure of the templates is based on the standard of stringtemplate library. The generated websites can manipulate data such as query, insert, update, delete records on tables directly as well as throught the database views and user’s defined views. For the database views or user’s defined queries, the paper puts forward algorithm to identify table for updating, inserting and deleting data. The user can choose template for each web page. The created by the program website can be directly implemented on IIS webserver without any modification. Keywords - automatic source code generating, templates, ASPX web page, MVC model, data manipulation, query and view.
File đính kèm:
- nghien_cuu_xay_dung_he_thong_sinh_tu_dong_ma_nguon_cac_websi.pdf