Mô hình MVC (Model-Control-View)

Một phần của tài liệu Khung làm việc và ứng dụng xây dựng hệ thống quản trị đơn nhãn hiệu (Trang 32)

2.2.1 Khái niệm

MVC là một kiến trúc phần mềm đƣợc chia ba phần tách biệt: Model (mô hình dữ liệu), View (phần hiển thị hay giao diện ngƣời dùng), Controlller (phần điều khiển hay điều khiển chức năng) của một thành phần hay một ứng dụng thành, vì thế khi thay đổi trên một trong ba thành phần đó sẽ ảnh hƣởng ít nhất đến các thành phần còn lại.

MVC thƣờng đƣợc hiểu là một mẫu thiết kế phần mềm. tuy nhiên MVC mang nhiều ý nghĩa về kiến trúc phần mềm hơn. MVC đƣợc tổng hợp từ nhiều các mẫu thiết kế nhỏ hơn: View áp dụng mẫu thiết kế Composite Pattern, giao tiếp giữa View và Model sử dụng mẫu Observer Pattern; Controller sử dụng mẫu Strategy Pattern hay command Pattern; và một số mẫu khác nhƣ: Mediator Pattern; Decorator Pattern, Adaptor Pattern,…

33

a. Model (Mô hình dữ liêu)

Model nắm giữ các dữ liệu, thực hiện các chức năng liên quan đến việc truy cập dữ liệu hay thay đổi các dữ liệu của chƣơng trình. Model thƣờng đƣợc chia thành hai hệ thống con: Các trạng thái nội tại của hệ thống và các hành động làm thay đổi trạng thái của hệ thống.

Mỗi một ứng dụng có một Model khác nhau. Ví dụ, Model của một thanh cuộn (Scrollbar) có thể chứa các thông tin hiện tại của nó, giá trị lớn nhất, nhỏ nhất hay độ rộng của thumb. Model có thể chịu trách nhiệm giao tiếp một cách gián tiếp với View và Controller. Gián tiếp có nghĩa là Model không hề biết các View và Controller của nó – nó không duy trì các tham chiếu đến chúng. Thay vào đó, Model gửi đi các thông báo đến View và Controller khi có sự thay đổi trạng thái của hệ thống.

b. View (Hiển thị hay giao diện người dùng)

View xác định việc hiển thị trực quan dữ liệu của Model. View chịu trách nhiệm cập nhật những thay đổi của nó trên màn hình. View có thể nhận những thông báo gián tiếp từ Model hoặc các thông điệp từ Controller.

c. Controller (Điều khiển hay Quản lý chức năng)

Controller là hành vi của ứng dụng. Nó tập trung việc nhận các yêu cầu của ngƣời dùng, chuyển các yêu cầu của ngƣời dùng đến chức năng xử lý yêu cầu của Model và chuyển kết quả trả về cho View hiển thị. Controller có thể nhận thông điệp từ View và những thông điệp gián tiếp từ Model.

Hình dƣới chỉ ra Model, View, Controller làm việc với nhau nhƣ thế nào để tạo ra thanh cuộn. Model nắm giữ thông tin về giá trị nhỏ nhất, lớn nhất. View xác định chính xác vẽ thanh cuộn. Controller chịu trách niệm xử lý các sự kiện chuột. Kết quả thanh cuộn mang đầy đủ chức năng của MVC.

34

2.2.2. Sự tương tác giữa các thành phần của MVC

Trong kiến trúc MVC, Model chịu trách nhiệm thông báo cho View biết khi có sự thay đổi và cho phép View lấy các thông tin về trạng thái và Controller có thể truy cập vào các chức năng của Model. View lấy dữ liệu từ Model và chịu trách nhiệm hiển thị chúng. Nó tự động cập nhật việc hiển thị khi có sự thay đổi trong Model. Đồng thời View cũng làm nhiệm vụ chuyển các yêu cầu của ngƣời dùng đến Controller. Controller lựa chọn chức năng xử lý yêu cầu của ngƣời dùng và lựa chọn thành phần hiển thị tiếp theo dựa vào tƣơng tác của ngƣời dùng hoặc dựa vào kết quả xử lý trả về từ Model.

Hình 2.3 Mô hình tƣơng tác MVC

Một ứng dụng thông thƣờng sử dụng một bộ điều khiển cho một nhóm các chức năng liên quan nào đó. Một số ứng dụng khác có thể sử dụng nhiều bộ điều khiển độc lập cho mỗi loại ngƣời dùng vì thế có thể có nhiều View khác nhau ứng với mỗi loại ngƣời dùng khác nhau.

2.2.3. Một số đặc điểm của MVC

Một điều dễ thấy đó là View thƣờng xuyên đƣợc thay đổi theo thời gian cho phù hợp với từng loại ngƣời dùng, trong khi Model thì lại rất ít khi thay đổi. Do đó, việc phân tách View và Model giữ cho Model không bị thay đổi khi viết lại giao diện. Hơn nữa, hoạt động của mỗi chức năng trong hệ thống thƣờng là phức tạp và khó hiểu cho tới khâu thực thi cuối cùng. Vì thế, trong một số dự án, các View có

35

thể đƣợc thiết kế ngay trong các khâu đầu tiên của quá trình thiết kế còn Model sẽ đƣợc hoàn thiện dần trong suốt quá trình phát triển.

Mặc dù Model và Controller là hai khái niệm riêng rẽ trong kiến trúc MVC nhƣng thực tế chúng lại có mối quan hệ rất chặt chẽ. Mỗi thay đổi liên quan đến Model sẽ tạo ra một thay đổi tƣơng ứng đến Controller.

Kiến trúc MVC cho phép một ứng dụng có thể đƣợc xây dựng trên nhiều ngôn ngữ lập trình khác nhau. Do Model và Controller là độc lập với View nên View chỉ cần thông báo cho Controller các sự kiện ngƣời dùng và cập nhật những thay đổi của Model.

Những ƣu điểm nổi bật của mô hình MVC

Đặc tính Mô tả

Khả năng mở rộng

Có thể mở rộng các chức năng của hệ thống thông qua việc bổ sung các Module mới tại View mà không phải xây dựng lại toàn bộ ứng dụng

Khả năng sử dụng lại ứng dụng

Các ứng dụng có thể đƣợc sử dụng lại thay vì phải phát triển mới khi có nhu cầu thay đổi hoặc bổ sung chức năng Tích hợp với các hệ

thống có sẵn

Dễ dàng xây dựng các cầu nối với các hệ thống khác do hệ thống đƣợc xây dựng theo Module và đƣợc tổ chức tốt Hỗ trợ nhiều loại cơ

sở dữ liệu

Với việc tách riêng phần Data Access, có thể sử dụng nhiều cơ sở dữ liệu khác nhau

2.3. Công cụ Mygeneration 2.3.1. Khái quát về Mygeneration 2.3.1. Khái quát về Mygeneration

Mygeneration là công cụ sinh mã chƣơng trình hỗ trợ các nhà phát triển để truy cập vào lƣợc đồ cơ sở dữ liệu. Nó rất hữu hiệu trong việc xây dựng các lớp thực thể dựa trên lƣợc đồ cơ sở dữ liệu. Mygenration đặc biệt rất thích hợp trong việc xây dựng ứng dụng đa tầng, nó hỗ trợ ở tầng truy cập dữ liệu. Mygeneration hỗ trợ Microsoft SQL, Microsoft Access, Oracle, IBM DB2, MySQL, PostgreSQL, FireBird, Interbase, SQLite, và VistaDB.

Mygeneration là phần mềm miễn phí mã nguồn mở và khá hoàn chỉnh. Hỗ trợ rất nhiều loại cơ sở dữ liệu và nhiều ngôn ngữ nhƣ: C#, VB.NET, jscript, vbscript…Và hỗ trợ đầu ra cho rất nhiều ngôn ngữ. Ta có thể tự viết mẫu template

36

hoặc sử dụng mẫu của ngƣời khác. Có rất nhiều mẫu sẵn có, một số đi kèm với chƣơng trình cài đặt, nhƣng nhiều hơn có thể tài từ thƣ viện của MyGeneration.

Trong luận văn này công cụ Mygeneration được sử dụng để sinh ra các lớp truy cập vào cơ sở dữ liệu. Do cấu trúc dữ liệu khá phức tạp, mối một đơn gồm nhiều thuộc tính thông tin, cho nên việc truy cập vào dữ liệu cũng sẽ rất phức tạp, nếu tự viết mã chương trình sẽ mất rất nhiều thời gian và bị lặp lại. Vì vậy, việc sử dụng công cụ sinh tự động này giúp giải quyết vấn đề một cách đơn giản, nhanh chóng. Chúng ta không cần quan tâm đến việc truy cập dữ liệu như thế nào, cách xử lý các biệt lệ…

2.3.2. Ưu nhược điểm của công cụ Mygeneration

a. Ưu điểm

 Công cụ hoàn toàn miễn phí  Dễ sử dụng, chính xác

 Có thƣ viện mẫu Template đa dạng

b. Nhược điểm

Do sinh tự động nên sẽ có khá nhiều đoạn mã chƣơng trình đƣợc sinh ra mà không thực sự cần, dẫn đến dƣ thừa. Có thể ảnh hƣởng đến bộ nhớ, tốc độ chƣơng trình. Tuy nhiên đó không thực sự là vấn đề vì ngày nay vấn đề bộ nhớ cũng nhƣ tốc độ bộ xử lý là đủ lớn.

2.3.3. Hướng dẫn sử dụng công cụ Mygeneration

2.3.3.1. Kết nối cơ sở dữ liệu

Hình 2.4 Màn hình thiết lập kết nối cơ sở dữ liệu. (1): tạo kết nối với cơ sở dữ liệu, (2): hiển thị nội dung để kết nối với cơ sở dữ liệu, (3): kiểm tra kết nối đã thành

37

Sau khi kết nối thành công với cơ sở dữ liệu, lƣợc đồ cơ sở dữ liệu sẽ đƣợc hiển thị trong màn hình MyMeta.

Hình 2.5 Màn hình MyMeta

2.3.3.2. Sinh mã các lớp truy cập cơ sở dữ liệu

Tạo mã để cập nhật dữ liệu một bảng trong hệ cơ sở dữ liệu  Chọn template tƣơng ứng

 Chạy chƣơng trình, đặt output vào thƣ mục DAL trong project của bạn, chọn bảng muốn thực hiện, khi đó hệ thống sẽ tự động sinh ra các lớp trừu tƣợng tƣơng ứng mỗi bảng.

Tạo các views

 Chọn template tƣơng ứng (ví dụ: Doodads Business View)

 Chạy template, đặt output vào thƣ mục BLL trong project của bạn, chọn views mà bạn muốn, khi đó các lớp tƣơng ứng sẽ đƣợc tự động sinh ra

2.3.3.3. Các lệnh cơ bản gọi hàm chức năng của các lớp đã sinh

Khởi tạo một đối tượng bảng: Employees emps = new Employees();  Lấy tất cả các rows: emps.LoadAll();

Lấy tất cả các rows theo khóa chính: emps.LoadByPrimaryKey(empID);  Insert một bản ghi:

Emps.AddNew();

Emps.LastName= "Smith";

emps.HireDate = DateTime.Now; emps.Save();

empID = emps.EmployeeID; //emps returns new key value  Xóa bản ghi

38

emps.Save();  Cập nhật bản ghi

emps.LastName = "Jones"; emps.Save();

Get number of rows TOC emps.RowCount;

Duyệt các bản ghi theo vòng lặp

if(emps.RowCount> 0) {

emps.Rewind(); //move to first record do

{

//do something with the current row } while(emps.MoveNext());

}

Sắp xếp dữ liệu theo một trường dữ liệu

emps.Sort= Employees.ColumnNames.LastName + " DESC";  Lọc dữ liệu

emps.Filter= Employees.ColumnNames.LastName + " LIKE A%";  Định nghĩa kết nối cơ sở dữ liệu:

emps.ConnectionString=

"User=me;Password=pw;Database=Employees;DataSource=MyServer"  Lấy dữ liệu các bản ghi

emps.Where.LastName.Value= "%A%";

emps.Where.LastName.Operator= WhereParameter.Operand.Like; //Note: Conjuction not Conjunction

emps.Where.HireDate.Conjuction= WhereParameter.Conj.Or;

emps.Where.HireDate.BetweenBeginValue= "2001-01-01 00:00:00.0"; emps.Where.HireDate.BetweenEndValue= "2001-12-31 23:59:59.9"; emps.Where.HireDate.Operator= WhereParameter.Operand.Between; emps.Query.Load();

Giới hạn trường dữ liệu trong bảng

emps.Query.AddResultColumn(Employees.ColumnNames.EmployeeID); emps.Query.AddResultColumn(Employees.ColumnNames.LastName);

39 emps.Query.Load(); Order By emps.Query.AddOrderBy(Employees.ColumnNames.HireDate, WhereParameter.Dir.DESC);  Select Distinct emps.Query.Distinct= true;  Select Top N emps.Query.Top= 10;

Dấu mở ngoặc đóng ngoặc (Parentheses)

emps.Query.OpenParenthesis(); emps.Query.CloseParenthesis();  Trả dữ liệu cho reader

SqlDataReader reader = emps.Query.ReturnReader() as SqlDataReader;

2.4. Công cụ TestWord

TestWord là thƣ viện mở đƣợc viết để điều khiển dữ liệu đầu ra của các tệp tin văn bản dựa trên bookmark (đánh dấu văn bản) từ các mẫu Template có sẵn. Do đặc tính của bài toán yêu cầu: tạo các file công báo có dữ liệu lớn bao gồm rất nhiều đơn, nhƣng mỗi đơn đều có các thuộc tính giống nhau. Hơn nữa bài toán cũng đặt ra phải tạo công cụ hỗ trợ các xét nghiệm viên soạn thảo Công văn (tiếng pháp) và lập phiếu thẩm định. Các loại tài liệu này đều cần trích xuất dữ liệu thông tin đơn và phải đúng chuẩn mẫu văn bản. Vì vậy, việc sinh dữ liệu tự động theo mẫu Template định nghĩa sẵn là rất thích hợp, nhờ vậy việc tạo ra các loại tài liệu này trở nên đơn giản, nhanh chóng.

2.4.1 Một số hàm chính trong thư viện TestWord

Thƣ viện hỗ trợ rất nhiều hàm để có thể soạn thảo đƣợc văn bản, dƣới đây là một số hàm cơ bản:

 AddBmk(string bmkName): thêm đánh dấu trong văn bản.

 GotoBmk(string bmkName): con trỏ đến tên bookmark đƣợc đánh dấu.  Copy(): sao chép dữ liệu.

 Cut(): cut dữ liệu  DelBack(): xóa trƣớc  DelWord(): xóa kí tự

 Bool FinStr(string findStr,bool mchCase, bool mchWhole,bool mchUpdown): tìm kiếm chuỗi kí tự.

40

 GotoBmkIns(string bmkName, string valStr): đi đến bookmark và thêm chuỗi kí tự

 GotoBmkInsDel(string bmkName, string valStr): đi đến bookmark và xóa chuỗi kí tự  ViewHeader()  ViewFooter()  ViewMain()  GetNumofPage()  InsFooter(string valStr)  InsPic(string valStr)  MoveRight()  MovePro()  MoveDown()  MoveUp() …

2.5. Công nghệ XSLT - Ngôn ngữ định kiểu mở rộng chuyển đổi (Extensible Stylesheet Language Transformations) đổi (Extensible Stylesheet Language Transformations)

Do dữ liệu đơn đƣợc tải về từ Văn phòng quốc tế đều đƣợc lƣu trong file XML (theo chuẩn MECA) nên các xét nghiệm viên không thể hiểu nội dung các file này. Mặt khác khi làm phiếu thẩm định, cần phải có đính kèm tài liệu đơn nên việc hiển thị thông tin đơn sang dạng hiểu đƣợc là rất cần thiết. Chính vì vậy mà công nghệ XLST đƣợc sử dụng để chuyển đồi định dạng XML sang dạng HTML.

2.5.1. Khái niệm

Ngôn ngữ định kiểu mở rộng chuyển đổi (Extensible Stylesheet Language Transformations - XSLT) cung cấp cách chuyển đổi dữ liệu XML từ dạng này sang dạng khác một các tự động. Định dạng muốn chuyển sang thƣờng có thể là là một tài liệu XML; bạn có thể chuyển đổi dữ liệu XML sang bất cứ dạng gì bằng cách tạo ra các bảng định kiểu XSLT và thực hiện chuyển đổi dữ liệu. Nếu bạn muốn thay đổi định dạng đích, bạn chỉ việc thay đổi bảng định kiểu XSLT và thực hiện việc chuyển đổi lần nữa. Điều này rất hiệu cho những ngƣời không phải là lập trình viên, ví dụ nhƣ nhà thiết kế, họ có thể thay đổi XSLT để có đƣợc kết quả nhƣ ý.

41

2.5.2. Quy tắc chung

Bản thân XSL cũng là một XML well-formed nhƣng nó chứa những lệnh của chính nó và dữ liệu HTML dùng y nguyên cho dữ liệu ra. Vì vậy chúng ta phải tuân thủ mọi quy tắc của một XML well-formed.

Để trình phân tích XML nhận diện đƣợc các lệnh của XSL thì chúng ta cần phải khai báo một namespace trong phần tử gốc. Một style sheet thƣờng chứa một trong hai namespace:

Namespace nguyên thủy: http://www.w3.org/TR/WD-xsl

Namespace của XSLT: http://www.w3.org/1999/XSL/Transform

Phần tử gốc trong tài liệu XSL thƣờng là một phần tử xsl:stylesheet, nó chứa một hay nhiều phần tử xsl:template.

Ví dụ, chúng ta có file test.xsl sau:

Thuộc tính match trong phần tử template để chỉ ra node xuất phát.

Để tham chiếu file một tài liệu xsl vào trong tài liệu XML bằng cách thêm vào đầu tài liệu XML dòng:

Trong đó URI/URL là địa chỉ của tài liệu xsl mà chúng ta muốn tham chiếu.

2.6. Chuẩn MECA

Do việc trao đổi thông tin đơn giữa văn phòng quốc tế với các quốc gia thành viên là thƣờng xuyên, nên việc trao đổi thông tin thông qua đƣờng bƣu điện sẽ có rất nhiều hạn chế nhƣ: Kinh phí vận chuyển, có khả năng trục trặc không đảm bảo thời gian (đối với nộp đơn nhãn hiệu thì thời gian rất quan trọng, nếu chậm trễ ngƣời nộp đơn sẽ chịu thiệt, họ có thể kiện tổ chức)…Chính vì vậy, cùng với sự phát triển của công nghệ thông tin, internet phát triển nên Văn phòng quốc tế đã đề

42

ra chuẩn MECA cho dữ liệu đơn, để việc trao đổi thông tin đơn đƣợc dễ dàng trên mạng Internet.

2.6.1. MECA là gì

MECAMadrid Electronic CommunicAtions : Là chuẩn trao đổi dữ liệu nhãn hiệu điện tử do Văn phòng quốc tế xây dựng.

MECA đƣợc xây dựng trên ngôn ngữ SGML (Standard Generalized Markup Language). Thực tế MECA chỉ sử dụng kỹ thuật “thẻ dữ liệu” và cấu trúc của SGML mà không sử dụng kỹ thuật định dạng dữ liệu của SGML.

MECA cũng sử dụng file DTD (Document Type Definition) để định nghĩa cấu trúc dữ liệu.

2.6.2. Áp dụng MECA với đơn nhãn hiệu quốc tế

MECA đƣợc áp dụng cho cả hai loại đơn: Thoả ƣớc Madrid (Madrid Agreement) và Nghị định thƣ Madrid (Madrid Protocol).

Trƣớc hết cần phân biệt các chủ thể liên qua đến một đơn nhãn hiệu quốc tế, đó là :

 Ngƣời nộp đơn

 Cơ quan SHTT của Ngƣời nộp đơn (Cơ quan SHTT yêu cầu bảo hộ)  Văn phòng quốc tế

 Cơ quan SHTT của nƣớc đƣợc chỉ định (Cơ quan SHTT nhận yêu cầu bảo hộ). Văn phòng quốc tế dùng định dạng MECA trong việc trao đổi dữ liệu điện tử nhãn hiệu quốc tế hai chiều giữa Văn phòng quốc tế và các Cơ quan sở hữu trí tuệ thành viên:

Công báo điện tử (ROMARIN),Thông báo điện tử.

Dữ liệu mà Văn phòng quốc tế cung cấp trên máy chủ FTP cho các Cơ quan sở hữu trí tuệ thành viên thuộc loại thông báo điện tử.

Thông báo điện tử của đơn nhãn hiệu quốc tế bao gồm tất cả các thông báo điện tử gửi tới một Cơ quan sở hữu trí tuệ về tất cả các sự kiện tác động đến những đơn liên quan tới Cơ quan sở hữu trí tuệ đó.

Mỗi một Cơ quan sở hữu trí tuệ thành viên có một thƣ mục riêng (folder) trên máy chủ FTP.

43

Mỗi tuần, Văn phòng quốc tế đƣa lên thƣ mục của Việt Nam một file nén (zip), trong đó là tất cả các thông báo về tất cả các sự kiện của tất cả các đơn liên

Một phần của tài liệu Khung làm việc và ứng dụng xây dựng hệ thống quản trị đơn nhãn hiệu (Trang 32)