Ngôn ngữ sinh mã

Một phần của tài liệu Ứng dụng mô hình SAAS xây dựng phần mềm quản trị tổng thể doanh nghiệp luận văn ths công nghệ thông tin 60 38 01 pdf (Trang 66 - 78)

Trong quá trình phát triển phần mềm SaaS từ năm 2006, chúng tôi nhận thấy:

1. Với số lượng module lớn (Khoảng 400 module) nếu lập trình theo phương pháp thông thường sẽ rất lâu mới hoàn thiện được.

2. Do nhiều người phát triển nên khó đạt được sự thống nhất, chuẩn hóa hoàn toàn (Mỗi người viết một cách, một giao diện).

3. Những module quan trọng sẽ được test kỹ nhưng những module ít quan trọng có khả năng bị bỏ sót.

4. Các module thường rất giống nhau, có thể chia thành 5,6 loại như: thêm sửa xóa, báo cáo, bảng tính, danh sách các mục, cây danh mục, …

Do đó cần phải phát triển một công cụ sinh mã tự động đáp ứng các yêu cầu sau: 1. Có thể sinh mã mà không cần phải lập trình.

2. Có thể phát triển nhiều mẫu khác nhau 3. Đơn giản dễ sử dụng

4. Có thể nhận dạng từ database để tạo ra các module một cách tự động 5. Phù hợp với hệ thống SaaS đang phát triển

Trên cơ sở đó đề ra giải pháp

1. Quá trình sản xuất phần mềm không theo mô hình thông thường mà theo các bước:

o Phân tích bài toán

o Xem có mẫu nào phù hợp không o Nều không có thì

 Tổng quát hóa bài toán

 Xây dựng mẫu tương ứng o Sinh mã tự động cho bài toán

o Chỉnh sửa cho phù hợp, cải tiến mẫu 2. Hệ thống sinh code gồm các công cụ:

o Ngôn ngữ mô hình pattern

o Bộ phân tích cú pháp và biên dịch

o Chương trình tạo giao diện nhập tham số sinh code cho người dùng o Bộ nhận dạng từ cơ sở dữ liệu

Sơ đồ hệ thống

Hình 48: Sơ đồ hệ thống sinh mã

3.5.1. Ngôn ngữ Pattern

3.5.1.1. Nguyên tắc

Pattern dùng để sinh mã nên gồm 2 bộ phận: Mã mẫu: Viết như mã thông thường

Các cấu trúc điều khiển + biến tham số. Sử dụng các ký hiệu đặc biệt

3.5.1.2. Cú pháp

Khai báo biến

Ký hiệu [[-tenbien-]]

Hệ thống sẽ tạo ra một ô input để nhập giá trị cho biến này Hoặc [[-tennhom.tenbien-]]

Hệ thống sẽ tạo ra một nhóm input, trong đó có một ô tenbien để nhập giá trị. Các nhóm có thể lồng nhau

Ví dụ

Hình 49: Form khai báo sinh mã

DECLARE

Cú pháp:

[[!—DECLARE:tenbien--]]Các khai báo[[!--/DECLARE--]] Các khai báo gồm có:

 Type = kiểu;

 (Kiểu có thể là text, select, checkbox hay textarea)

 Options = các tùy chọn;

 (Sử dụng khi type=select)

 Tips = mô tả ý nghĩa của biến;

 Display_condition = điều kiện để ô input được hiển thị;

 Style = Định dạng cho ô input;

 Recognize_class = lớp nhận dạng từ bảng;  Recognize_function = Hàm nhận dạng từ bảng; Ví dụ: [[!--DECLARE:test--]] Biến độc lập Nút để nhân bản 1 nhóm Nút để xóa 1 nhóm

Tương đương ký hiệu multiple_items.columns.name Nhóm

cha

Nhóm con

type = select; options = abc,123;

tips = Day la o input thu nghiem; [[!--/DECLARE--]]

LIST

Cú pháp:

[[!--LIST:tennhom--]] mã sinh code [[!--/LIST:tennhom--]] Ý nghĩa: Liệt kê các nhóm trong một danh sách, với mỗi nhóm thực hiện sinh code theo mã sinh code bên trong LIST. Một danh sách gồm nhiều nhóm, có khả năng thêm, sửa xóa các nhóm.

Ví dụ:

[[!--LIST:friends--]]

Hello Mr(s).[[-friends.name-]]!<br /> [[!--/LIST --]]

IF

Cú pháp: [[!--IF:bieuthuc--]]mã sinh code 1[[!--ELSE--]] mã sinh code 2[[!--/IF--]] Ý nghĩa: Trả về mã sinh code 1 nếu biểu thức đúng, mã sinh code 2 nếu sai

Biểu thức có thể là:

 Tên biến = các giá trị phân cách nhau bằng dấu phẩy

Bộ biên dịch sẽ so sánh giá trị của biến với từng giá trị, nếu có một giá trị bằng nhau thì trả về đúng. Hệ thống cũng tự động nhận dạng ô input cho biến là một hộp select box có các giá trị cho trong biểu thức bên phải

 Tên biến != các giá trị phân cách nhau bằng dấu phẩy

Bộ biên dịch sẽ so sánh giá trị của biến với từng giá trị, nếu có một giá trị bằng nhau thì trả về sai

 Bieuthuc1 or bieuthuc2

Bộ biên dịch sẽ trả về đúng nếu 1 trong các biểu thức đúng

 Tendanhsach[tenbien] = các giá trị phân cách nhau bằng dấu phẩy

Bộ biên dịch sẽ so sánh giá trị của từng biến trong các nhóm của danh sách với từng giá trị trong biểu thức bên phải, nếu có một giá trị bằng nhau thì trả về đúng

 Tendanhsach[tenbien] != các giá trị phân cách nhau bằng dấu phẩy

Bộ biên dịch sẽ so sánh giá trị của từng biến trong các nhóm của danh sách với từng giá trị trong biểu thức bên phải, nếu có một giá trị bằng nhau thì trả về sai

 (bieuthucPHP)

Bộ biên dịch sẽ thực hiện và trả về giá trị biểu thức PHP Ví dụ: [[!--LIST:friends--]] [[!--IF:friends.gender=male--]] Hello Mr.[[-friends.name-]]! [[!--ELSE--]] Hello Mrs.[[-friends.name-]]! [[!--/IF--]] [[!--/LIST --]] SCRIPT Cú pháp: [[!--SCRIPT--]] mã PHP [[!--/SCRIPT--]] Ý nghĩa: Thực hiện đoạn mã PHP lúc sinh code (runtime)

Để ghi nội dung vào file kết quả sinh code, nối thêm xâu vào biến $code

ORDER

Cú pháp: [[!--ORDER:tenbien--]] mã sinh code [[!--/ORDER--]] Ý nghĩa: Đánh dấu một đoạn code để sắp xếp thứ tự hiển thị theo biến ―tenbien‖ Ví dụ:

Hình 50: Sắp thứ tự cho tên biến

Trong database_fields sẽ xuất hiện một trường order để thể hiện thứ tự khi hiển thị trong form AUTO_ORDER_LIST Cú pháp: [[!--AUTO_ORDER_LIST--]] danh_sach_cac_menh_de_ORDER [[!--/AUTO_ORDER_LIST--]] Tự động sắp xếp các mệnh đề ORDER ORDER_LIST Cú pháp: [[!--ORDER_LIST--]] danh_sach_cac_menh_de_ORDER [[!--/ORDER_LIST--]]

Tạo một danh sách các mệnh đề ORDER, muốn sắp xếp thế nào thì viết SCRIPT sắp xếp tương ứng LOAD Cú pháp: [[!--LOAD:ten_file_hoac_thu_muc --]] cac_menh_de_REPLACE [[!--/LOAD--]]

Hoặc

[[!--LOAD:ten_bien=gia_tri_mac_dinh --]] cac_menh_de_REPLACE

[[!--/LOAD--]]

Ý nghĩa: Đọc nội dung của file hoặc thư mục đưa vào pattern

REPLACE

Cú pháp

[[!--REPLACE:ten_region_hoac_ten_bien--]] giá_trị_mới

[[!--/REPLACE--]]

Ý nghĩa: Thay đổi vùng hoặc tên biến thành giá trị mới. Dùng để kế thừa các pattern đã có sẵn bằng cách thay đổi một vài chi tiết

REGION

Cú pháp:

[[!--REGION:ten_vung--]] mã sinh code

[[!--/REGION--]]

Vùng dùng để đánh dấu một đoạn code có thể thay thế khi LOAD 3.5.2. Bộ nhận dạng từ bảng CSDL

Thông thường database được thiết kế tuân theo một số chuẩn quy ước. Ví dụ tên của đối tượng dữ liệu thường có chữ ―name‖, trường nối với bảng khác có ký hiệu ―_id‖ ở cuối, trường ngày tháng có kiểu là Date, … Ta có thể xây dựng một tập các luật để ánh xạ từ định dạng của một cột dữ liệu sang định dạng trong form nhập (hoặc cột trong báo cáo hay danh sách)

Hiện tại đã có bộ nhận dạng cho các pattern: 1. CRUD

2. Listing 3. Spreadsheet 4. Report

3.5.3. Một số pattern đã phát triển

3.5.3.1. CRUD

CRUD (Create, Read, Update, Delete) là kiểu module chủ yếu dùng trong hoạt động quản trị. Có một số lượng rất lớn các tính năng quản trị là các thao tác Thêm, Sửa, Xóa đơn giản.

Tác giả: Nguyễn Hữu Huân, Đoàn Chiến Thắng, Nguyễn Hoàng Long Một form điển hình:

Hình 51: Form CRUD điển hình Các thành phần chính của mẫu CRUD:

1. Fields: Các trường dạng dữ liệu thông thường. Một fields có các thành phần: o Name: Tên của field.

o Type: Kiểu. Text, Select, Int, Float, Date, Time, DateInt, DateTime, Const, File, Image, Textarea, RichEditor, SimpleRichEditor, Checkbox, Radio.

o Filtertype: kiểu tìm kiếm.

o displayInList: Có hiển thị ở list hay khong. o Required: Có bắt buộc hay không.

o Unique: Có duy nhất hay không.

2. Database_fields: Các trường liên kết với bảng khác. Có các thành phần. multiple_items

database_fields fields

o Name: Tên trường.

o Table: Tên bảng liên quan.

o Title_name: Cột dùng làm tiêu đề. o Filter_type: Kiểu lọc.

 Category select: Lọc dạng menu hình cây bên trái.

 Select: Lọc dạng select box xổ xuống.

 Text: Lọc dạng text.

o Display in list:có hiển thị ở danh sách không. o Condition: Điều kiện để liệt kê ở bảng.

3. Language_field: Những trường đa ngôn ngữ. Các thành phần o Name: Tên trường.

o type: Kiểu. Kiểu text, textarea, richeditor, … o Filter_type: Kiểu lọc.

 Text: Lọc dạng text.

 int: Lọc dạng số, từ bao nhiêu đến bao nhiêu.

 date: Lọc dạng ngày tháng.

o Display in list:có hiển thị ở danh sách không. o Required: Có bắt buộc không.

4. Multiple items: Các mục của các bảng khác liên quan đến bản ghi dưới dạng 1 nhiều. Có các thành phần:

o Table name: Tên bảng liên quan. o Reference name: Tên trường liên quan.

o Columns: List các cột trong bảng liên quan. Thành phần của columns gần giống thành phần của fields.

o Database_columns: List các cột dạng database trong bảng liên quan, liên quan đến bảng khác. Thành phần của database_columns gần giống thành phần của database_fields.

o Language_columns: List các cột đa ngôn ngữ trong bảng liên quan. Thành phần của language_columns gần giống thành phần của language_fields.

3.5.3.2. Report

Sinh ra các loại báo cáo khác nhau như Crystal Report

Hình 52: Một báo cáo mẫu

Spreadsheets

Cho phép chỉnh sửa trực tiếp ở tất cả các trường dưới dạng bảng tính Tác giả: Nguyễn Hoàng Long, Nguyễn Đăng Khoa

Hình 53: Form quản lý kiểu bảng tính

3.5.3.3. All in one

Module cho phép thực hiện tất cả các hành động như thêm, sửa, xóa, hiển thị danh sách trên một form duy nhất.

Ví dụ

Hình 54: Form dạng all in one

3.5.3.4. Listing

Module chuyên dùng để liệt kê danh sách.

Tác giả: Nguyễn Đăng Khoa, Cử nhân trường Công Nghệ

Hình 55: Form dạng listing

3.5.3.5. Detail

Đưa ra thông tin chi tiết về một đối tượng dữ liệu. Tác giả: Nguyễn Đăng Khoa

Hình 56: Form dạng detail

3.5.3.6. Các template khác đang phát triển

1. Invoice: Chuyên tạo các loại hóa đơn.

2. Ajax CRUD: Module như CRUD nhưng dùng Ajax cho việc cập nhật dữ liệu. 3. Game: Tạo game nhiều người chơi như trò http://rungchuongvang.vn.

4. Chart: Tạo biểu đồ.

5. DataMap: tổng hợp dữ liệu, kích vào một mục sẽ xem được chi tiết + sửa mục dữ liệu đó.

Chương 4 PHẦN MỀM QUẢN LÝ KHÁCH HÀNG THEO MÔ HÌNH SAAS

Một phần của tài liệu Ứng dụng mô hình SAAS xây dựng phần mềm quản trị tổng thể doanh nghiệp luận văn ths công nghệ thông tin 60 38 01 pdf (Trang 66 - 78)

Tải bản đầy đủ (PDF)

(102 trang)