Upload
lynh-lynh-candy
View
438
Download
3
Embed Size (px)
Citation preview
Kiến trúc 3 layerKiến trúc 3 Layer: Hướng tiếp cận của phần mềm là chia nhỏ phần mền thành các tầng, mỗi tầng có vai trò đặc trưng riêng để thuận tiện cho việc dùng lại, sẵn sàng cho việc mở rộng hệ thống,dễ bảo trì, đặc biệt là dễ dàng trong việc phân chia công việc cho các thành viên trong nhóm…bao gồm:+ Presentation Layer(gui): tầng này để giao tiếp với người dùng để thu thập dữ liệu và hiển thị kết quả thông qua giao diện, tầng này sử dụng các dịch vụ do tầng business cung cấp+ Bussiness Layer(bus): tầng này để xử lý nghiệp vụ chính của hệ thống sử dụng các dịch vụ do tầng Data cung cấp và cung cấp các dịch vụ cho tầng Presentation+ Datalayer(dao): tầng này chịu trách nhiệm lưu trữ và xử lý dữ liệu như (insert, update, delete,…) Tất cả các tầng này trao đổi dữ liệu thông qua Data Transfer Object (dto)
Lập trình theo Mô hình 3 lớp
Đăng ngày: Chủ Nhật, 08/04/2012 12:00 AM
Lượt xem: 2192
Khi bạn mới tiếp xúc với Windows Form và ADO.NET, việc lập trình bắt đầu trở lên phức tạp khi dự án lớn dần. Bởi vậy để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau. Một trong những mô hình lập trình như vậy đó là Mô hình 3 lớp (Three Layers).
Trong bài viết này không tôi không tham vọng trình bày lại chi tiết mô hình thiết kế ứng dụng 3 lớp mà chỉ tóm tắt ngắn gọn lại những điểm chính của nó mà tôi đã nghiên cứu, tham khảo từ nhiều nguồn khác nhau. Sau đó tôi gửi tới các bạn một số Links, Book liên quan đến mô hình 3 lớp. Và ở cuối bài viết là Link download một ứng dụng tôi viết Demo theo mô hình 3 lớp với Windows Form và ADO.NET - Ứng dụng quản lý bán sách - BookShop.
Mô hình 3 lớp được cấu thành từ: Presentation Layers, Business Layers, và Data Layers. Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ (services) mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi.
Kiến trúc mô hình 3 lớp
Bây giờ tôi sẽ mô tả tóm tắt về 3 lớp như sau:
1. Presentation Layers
Lớp này làm nhiệm vụ giao tiếp với người dùng cuối để thu thập dữ liệu và hiển thị kết quả/dữ liệu thông qua các thành phần trong giao diện người sử dụng. Lớp này sẽ sử dụng các dịch vụ do lớp Business Logic cung cấp. Trong .NET thì bạn có thể dùng Windows Forms, ASP.NET hay Mobile Forms để hiện thực lớp này.
Trong lớp này có 2 thành phần chính là User Interface Components và User Interface Process Components.
UI Components: là những phần tử chịu trách nhiệm thu thập và hiển thị thông tin cho người dùng cuối. Trong ASP.NET thì những thành phần này có thể là các TextBox, các Button, DataGrid…
UI Process Components: là thành phần chịu trách nhiệm quản lý các qui trình chuyển đổi giữa các UI Components. Ví dụ chịu trách nhiệm quản lý các màn hình nhập dữ liệu trong một loạt các thao tác định trước như các bước trong một Wizard…
Lưu ý : Lớp này không nên sử dụng trực tiếp các dịch vụ của lớp Data Access mà nên sử dụng thông qua các dịch vụ của lớp Business Logic vì khi bạn sử dụng trực tiếp như vậy, bạn có thể bỏ qua các ràng buộc, các logic nghiệp vụ mà ứng dụng cần phải có. Và hơn nữa nếu sử dụng như vậy thì đâu cần đến 3 lớp phải không bạn?
2. Business Logic Layer
Lớp này thực hiện các nghiệp vụ chính của hệ thống, sử dụng các dịch vụ do lớp Data Access cung cấp, và cung cấp các dịch vụ cho lớp Presentation. Lớp này cũng có thể sử dụng các dịch vụ của các nhà cung cấp thứ 3 để thực hiện công việc của mình.
Trong lớp này có các thành phần chính là Business Components, Business Entities và Service Interface.
Service Interface: là giao diện lập trình mà lớp này cung cấp cho lớpPresentation sử dụng. Lớp Presentation chỉ cần biết các dịch vụ thông qua giao diện này mà không cần phải quan tâm đến bên trong lớp này được hiện thực như thế nào.
Business Entities: là những thực thể mô tả những đối tượng thông tin mà hệ thống xử lý. Các Business Entities này cũng được dùng để trao đổi thông tin giữa lớp Presentation và lớp Data Layers.
Business Components: là những thành phần chính thực hiện các dịch vụ mà Service Interface cung cấp, chịu trách nhiệm kiểm tra các ràng buộc logic (constraints), các qui tắc nghiệp vụ (Business Rules), sử dụng các dịch vụ bên ngoài khác để thực hiện các yêu cầu của ứng dụng.
3. Data Layers
Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất dữ liệu của ứng dụng. Thường lớp này sẽ sử dụng các dịch vụ của các hệ quản trị cơ sở dữ liệu như SQL Server, Oracle,… để thực hiện
nhiệm vụ của mình. Trong lớp này có các thành phần chính là Data Access Logic, Data Sources, Servive Agents).
Data Access Logic Components (DAL) là thành phần chính chịu trách nhiệm lưu trữ vào và truy xuất dữ liệu từ các nguồn dữ liệu – Data Sources như RDMBS, XML, File systems…. Trong .NET Các DAL này thường được hiện thực bằng cách sử dụng thư viện ADO.NET để giao tiếp với các hệ cơ sở dữ liệu hoặc sử dụng các O/R Mapping Frameworks để thực hiện việc ánh xạ các đối tượng trong bộ nhớ thành dữ liệu lưu trữ trong CSDL. Chúng ta sẽ tìm hiểu các thư viện O/R Mapping này trong một bài viết khác.
Service Agents: là những thành phần trợ giúp việc truy xuất các dịch vụ bên ngoài một cách dễ dàng và đơn giản như truy xuất các dịch vụ nội tại.
Các bạn đã tìm hiểu qua các đặc điểm của từng lớp trong mô hình 3 lớp. Đây là những kiến thức tóm tắt về 3 lớp, bạn nào muốn tìm hiểu kỹ có thể tham khảo các bài viết do chính các chuyên gia của Microsoft viêt lên:
http://msdn.microsoft.com/en-us/library/ff648105.aspx
http://msdn.microsoft.com/en-us/library/ee658109.aspx
Hoặc bạn có thể Download cuốn sách “Application Architecture for .NET: Designing Applications and Services” của Microsoft. Đây là cuốn sách rất hữu ích và mô tả rất chi tiết về thiết kế ứng dụng theo mô hình 3 lớp. Tuy nhiên tài liệu này là Tiếng Anh. Hi vọng không quá khó khăn với các bạn đang đam mê Công nghệ.
Tại buổi Seminar gần đây, tôi cũng đã phân tích cho các bạn cách thiết kế một dự án Windows Forms theo mô hình 3 lớp. Ở đó các bạn đã được biết đến có rất nhiều cách đặt tên cho các thành phần của 3 lớp như:
Cách 1: GUI, BUS, DAL
Cách 2: GUI, BLL, DAO, DTO
Cách 3: Presentation, BLL, DAL
…..
Vậy lựa chọn cách nào là đúng!? Đó không hẳn là điều quan trọng mà quan trọng hơn là bạn biết cách viết, viết đúng bản chất của từng lớp. Cách chia dự án trong Ứng dụng demo BookShop của tôi cũng chỉ là 1 trong số rất nhiều cách. Hi vọng đó cũng là một cách để các bạn tham khảo.
Xây dựng Chương trình C# theo mô hình 3 lớp
Three_tier_Architecture_src.zip (17.5K)
Lượi tải: 724
I> Những Chỉ Dẫn
Trong mục này chúng ta sẽ thảo luận và xây dựng một chương trình C# thực thi theo mô hình 3 lớp và
một người dùng ảo sử dụng cơ sở dữ liệu MS Access . Trong mục này Tôi đã thử thực thi những thành
phần nhỏ có thể dùng lại (reusable) để bảo vệ người dùng trong việc xây dựng theo 3 lớp . Mục này sẽ
nói cho ta biết làm thế nào để thêm (add) , cập nhập (update), và tìm kiếm chi tiết người dùng .
II> Nền tảng :
Để bắt đầu chúng ta sẽ thảo luận về 1 vấn đề nhỏ sơ bộ về lý thuyết của việc xây dựng mô hình 3 lớp .
Tôi sẽ đi qua một cách vắn tắt để bạn biết cái gì gọi là mô hình 3 lớp và những thuận lợi khi bạn dùng
nó .
Cái gì để xây dựng một mô hình 3 lớp :
Mô hình 3 lớp là kiến trúc kiểu client - server trong đó nó sử dụng giao diện người dùng , quá trình diễn
biến , cất giữ và truy vập dữ liệu để người phát triển bảo vệ những modules (bộ phận tháo rời được) độc
lập hoặc nhiều nền riêng rẽ . Về cơ bản một chương trình có 3 lớp thì từng lớp sẽ làm những nhiệm vụ
sau :
+ Lớp 1 ==> Giới thiệu lớp , lớp GUI
+ Lớp 2 ==> Đối tượng của lớp này là các nhiệm vụ trong chương trình , những lớp nhiệm vụ mang tính
logic .
+ Lớp 3 ==> Lớp truy cập dữ liệu .
Ở đây lớp có thể phát triển và tách riêng ra để kiểm tra .
Cái gì cần để chia lớp ra làm 3 lớp ? Việc chia giao diện người dùng từ nhiệm vụ mang tính logic và truy
cập cơ sở dữ liệu có nhiều thuận lợi . Một vài thuận lợi ta có thê thấy phía dưới .
* Có thể dùng lại các lớp .Cho phép chúng ta có một module để thêm , cập nhập , xoá và tìm kiếm người
dùng trong hệ thống . Nếu như những thành phần này đã được kiểm tra và phát triển thì chúng ta có thể
dùng lại nó trong bất cứ project nào tương tự .
* Ta có thể thay đổi hệ thống một cách dễ dàng . Nếu ở đây các lớp của chúng ta có những thay đổi nhỏ
thì chúng ta cũng không cần phải cài đặt lại chương trình của chúng ta trên máy của người dùng (Dạng
như cập nhập phiên bản mới) . Nếu sự thay đổi đó trong khoảng từ 10 % đến 15% thì bạn chỉ cần cập
nhập lại các lớp này .
* Có những hàm riêng rẻ trong server cho phép phát triển song song những lớp riêng rẻ bởi chuyên gia
phần mềm .
* Cung cấp nhiều tài nguyên linh hoạt .
III> Sử dụng Code
Chương trình mà bạn tải ở trên có 3 lớp . Lớp thứ nhất hay còn gọi là FrmGUI , lớp thứ hai hoặc những
nhiệm vụ logic sẽ được gọi tắt BOCustomer cho đối tượng Customer và cuối cùng lớp thứ ba hay còn gọi
là lớp dữ liệu sẽ gọi tắt để truy cập dữ liệu của người dùng . Tôi có biên soạn tất cả lớp trong những
project giống nhau để làm việc nhẹ nhàng hơn . Tôi bao gồm lại những mã nguồn dọc theo cơ sở dữ liệu
Access , cái mà được sử dụng để kiểm tra trong project này bao gồm trong file zip .
Lớp Thứ Nhất (User Interface Tier)
Đây là một đoạn của code từ giao diện của người dùng . Tôi chỉ bao gồm những hàm được sử dụng để
gọi lớp giữa (lớp thứ hai) .
Tôi sẽ giữ tham chiếu đến lớp thứ hai như BOCustomer.
//This function get the details from the user via GUI //tier and calls the Add method of business logic layer. private void cmdAdd_Click(object sender, System.EventArgs e) { try {
cus = new BOCustomer(); cus.cusID=txtID.Text.ToString(); cus.LName = txtLName.Text.ToString(); cus.FName = txtFName.Text.ToString(); cus.Tel= txtTel.Text.ToString(); cus.Address = txtAddress.Text.ToString(); cus.Add(); } catch(Exception err) { MessageBox.Show(err.Message.ToString()); } } //This function gets the ID from the user and finds the //customer details and return the details in the form of //a dataset via busniss object layer. Then it loops through //the content of the dataset and fills the controls. private void cmdFind_Click(object sender, System.EventArgs e) { try { String cusID = txtID.Text.ToString(); BOCustomer thisCus = new BOCustomer(); DataSet ds = thisCus.Find(cusID); DataRow row; row = ds.Tables[0].Rows[0]; //via looping foreach(DataRow rows in ds.Tables[0].Rows ) { txtFName.Text = rows["CUS_F_NAME"].ToString(); txtLName.Text = rows["CUS_L_NAME"].ToString(); txtAddress.Text = rows["CUS_ADDRESS"].ToString(); txtTel.Text = rows["CUS_TEL"].ToString(); } } catch (Exception err) { MessageBox.Show(err.Message.ToString()); } } //this function used to update the customer details. private void cmdUpdate_Click(object sender,
System.EventArgs e) { try { cus = new BOCustomer(); cus.cusID=txtID.Text.ToString(); cus.LName = txtLName.Text.ToString(); cus.FName = txtFName.Text.ToString(); cus.Tel= txtTel.Text.ToString(); cus.Address = txtAddress.Text.ToString(); cus.Update(); } catch(Exception err) { MessageBox.Show(err.Message.ToString()); } }
Lớp Thứ Hai (Business Logic Layer)
Ở đây tôi sẽ bao gồm tất cả những đoạn code trong lớp này . Những thuộc tính cơ bản của nó là để định
nghĩa cho đối tượng người dùng . Nhưng như tôi đã đề cập thì đây là những người dùng ảo và có khi
phải cập nhập thêm vào khi sử dụng . Nó cũng có tất cả các phương thức bao gồm những việc như thêm
, tìm kiếm , sửa chữa được sử dụng để bảo quản chi tiết người dùng .
Đây là lớp thứ hai (lớp giữa) sẽ thực thi những hành động giữa lớp thứ nhất và thứ ba . Nó giữ một tham
chiếu đến lớp truy cập dữ liệu (lớp thứ ba ) chẳng hạn như cusData = new DACustomer() . Nó cũng tham
chiếu đến namespace System.Data và đôi khi nó chả về chi tiết trong Form của Dataset đến lớp thứ
nhất .
using System; using System.Data; namespace _3tierarchitecture { /// <SUMMARY> /// Summary description for BOCustomer. /// </SUMMARY> public class BOCustomer { //Customer properties private String fName; private String lName; private String cusId; private String address;
private String tel; private DACustomer cusData; public BOCustomer() { //An instance of the Data access layer! cusData = new DACustomer(); } /// <SUMMARY> /// Property FirstName (String) /// </SUMMARY> public String FName { get { return this.fName; } set { try { this.fName = value; if (this.fName == "") { throw new Exception( "Please provide first name ..."); } } catch(Exception e) { throw new Exception(e.Message.ToString()); } } } /// <SUMMARY> /// Property LastName (String) /// </SUMMARY> public String LName {
get { return this.lName; } set { //could be more checkings here eg revmove ' chars //change to proper case //blah blah this.lName = value; if (this.LName == "") { throw new Exception("Please provide name ..."); } } } /// <SUMMARY> /// Property Customer ID (String) /// </SUMMARY> public String cusID { get { return this.cusId; } set { this.cusId = value; if (this.cusID == "") { throw new Exception("Please provide ID ..."); } } } /// <SUMMARY> /// Property Address (String) /// </SUMMARY> public String Address { get
{ return this.address; } set { this.address = value; if (this.Address == "") { throw new Exception("Please provide address ..."); } } } /// <SUMMARY> /// Property Telephone (String) /// </SUMMARY> public String Tel { get { return this.tel; } set { this.tel = value; if (this.Tel == "") { throw new Exception("Please provide Tel ..."); } } } /// <SUMMARY> /// Function Add new customer. Calls /// the function in Data layer. /// </SUMMARY> public void Add() { cusData.Add(this); } /// <SUMMARY> /// Function Update customer details.
/// Calls the function in Data layer. /// </SUMMARY> public void Update() { cusData.Update(this); } /// <SUMMARY> /// Function Find customer. Calls the /// function in Data layer. /// It returns the details of the customer using /// customer ID via a Dataset to GUI tier. /// </SUMMARY> public DataSet Find(String str) { if (str == "") throw new Exception("Please provide ID to search"); DataSet data = null; data = cusData.Find(str); return data; } } }
Lớp Thứ Ba (Data Access Layer)
Đây là lớp dữ liệu có chi tiết về cơ sở dữ liệu MS Access . Tuy nhiên tất cả những chi tiết thì cũng rõ ràng
và không ảnh hưởng đến lớp thứ hai . Module này sẽ tham chiếu đến lớp thứ hai như BOCustomer cus .
Để có thể dễ dàng sử dụng bởi bất kì một cơ sở dữ liệu khác tôi đã tạo một vài hằng số bao gồm có tên
cơ sở dữ liệu và tên vùng cần thay đổi như bảng chi tiết về người dùng . Đây là một module có thể dùng
cho bất kì một cơ sở dữ liệu nào sau khi đã thay đổi .
using System;using System.Data.OleDb;using System.Data;
namespace _3tierarchitecture
{
/// <SUMMARY>
/// Summary description for DACustomer.
/// </SUMMARY>
public class DACustomer { private OleDbConnection cnn; //change connection string as per the
//folder you unzip the files
private const string CnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data " + "Source= D:\\Rahman_Backup\\Programming\\" + "Csharp\\3tierarchitecture\\customer.mdb;";
//local variables private String strTable=""; private String strFields=""; private String strValues=""; private String insertStr=""; //this needs to be changed based on customer //table fields' Name of the database! private const String thisTable = "tblCustomer"; private const String cus_ID = "CUS_ID"; private const String cus_LName = "CUS_L_NAME"; private const String cus_FName = "CUS_F_NAME"; private const String cus_Tel = "CUS_TEL"; private const String cus_Address = "CUS_ADDRESS";
public DACustomer() { } public DACustomer(BOCustomer cus) { // A reference of the business object class } //standard dataset function that adds a new customer
public void Add(BOCustomer cus) {
String str = BuildAddString(cus); OpenCnn();
//Open command option - cnn parameter is imporant OleDbCommand cmd = new OleDbCommand(str,cnn);
//execute connection cmd.ExecuteNonQuery(); // close connection CloseCnn(); } //standard dataset function that updates //details of a customer based on ID public void Update(BOCustomer cus) { OpenCnn(); String selectStr = "UPDATE " + thisTable + " set " + cus_LName + " = '" + cus.LName + "'" + ", " + cus_FName + " = '" + cus.FName + "'" + ", " + cus_Address + " = '" + cus.Address + "'" + ", " + cus_Tel + " = '" + cus.Tel + "'" + " where cus_ID = '" + cus.cusID + "'";
OleDbCommand cmd = new OleDbCommand(selectStr,cnn);
cmd.ExecuteNonQuery(); CloseCnn(); } //standard dataset function that finds and //return the detail of a customer in a dataset public DataSet Find(String argStr) { DataSet ds=null;
try { OpenCnn(); String selectStr = "select * from " + thisTable + " where cus_ID = '" + argStr + "'"; OleDbDataAdapter da = new OleDbDataAdapter(selectStr,cnn); ds = new DataSet(); da.Fill(ds,thisTable); CloseCnn();
} catch(Exception e) { String Str = e.Message; }
return ds; }
private void OpenCnn() { // initialise connection String cnnStr = CnnStr; cnn = new OleDbConnection(cnnStr); // open connection cnn.Open(); }
private void CloseCnn() { // 5- step five cnn.Close(); } // just a supporting function that builds // and return the insert string for dataset. private String BuildAddString(BOCustomer cus) { // these are the constants as // set in the top of this module. strTable="Insert into " + thisTable; strFields=" (" + cus_ID + "," + cus_LName + "," + cus_FName + "," + cus_Address + "," + cus_Tel + ")"; //these are the attributes of the //customer business object. strValues= " Values ( '" + cus.cusID + "' , '" + cus.LName + "' , '" + cus.FName + "' , '" + cus.Address + "' , '" + cus.Tel + "' )";
insertStr = strTable + strFields + strValues; return insertStr; } }}
L ậ p trình h ướ ng đ ố i t ượ ng v ớ i mô hình 3 l ớ p (3 layers)
10JUN
L ư u ý : Các bạn không nên nhầm lẫn khái niệm lớp(layer) trong phần này với khái niệm
lớp(class) của các ngôn ngữ lập trình hướng đối tượng.
Trong phát triển ứng dụng, để dễ quản lý các thành phần của hệ thống, cũng như không
bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại
với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và
ảnh hưởng lẫn nhau. Ví dụ trong một công ty bạn có từng phòng ban, mỗi phòng ban sẽ
chịu trách nhiệm một công việc cụ thể nào đó, phòng này không được can thiệp vào công
việc nội bộ của phòng kia như Phòng tài chính thì chỉ phát lương, còn chuyện lấy tiền đâu
phát cho các anh phòng Marketing thì các anh không cần biết.
Trong phát triển phần mềm, người ta cũng áp dụng cách phân chia chức năng này. Bạn
sẽ nghe nói đến thuật ngữ kiến trúc đa tầng/nhiều lớp, mỗi lớp sẽ thực hiện một chức năng
nào đó, trong đó mô hình 3 lớp là phổ biến nhất. 3 lớp này là gì?
Là Presentation, Business Logic, và Data Access. Các lớp này sẽ giao tiếp với nhau
thông qua các dịch vụ(services) mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng
không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho
mình và sử dụng nó mà thôi.
1. Giới thiệu các thành phần của mô hình 3layer
Mô hình layer gồm có 3 layer:
o Layer GUI (Graphics User Interface)
o Layer Business Logic (Đây là layer để xử lý các dữ liệu, thông tin trước khi đưa lên giao
diện hoặc đưa xuống dữ liệu.)o Layer Data Access – Layer này sẽ nói chuyện Data.
1.1. GUI Layer.o Đây là layer tạo lên giao diện cho người dùng, nó sẽ là nơi tiếp nhận và kết xuất ra kết quả
của chương trình cho bạn.o Nó có nhiệm vụ xử lý, kiểm tra các dữ liệu nhập vào ( ví như ở TextBox này nó phải là số,
số phải từ 1-9….).o Nó tiếp nhận các Event của người dùng, kiểm tra dữ liệu được nhập vào, gửi yêu cầu xử lý
xuống tầng kế tiếp.
1.2. Business Logic Layero Đây là layer xử lý chính các dữ liệu trước khi được đưa lên hiển thị trên màn hình hoặc xử
lý các dữ liệu trước khi lưu dữ liệu xuống cơ sở dữ liệu.o Đây là nơi đê kiểm tra các yêu cầu nghiệp vụ, tính toán các yêu cầu nghiệp vụ.
o Tại đây các tính năng tính toán trong chương trình sẽ được thực thi. (Như tính lương theo
một công thức.)
1.3. Data Access Layero Layer này sẽ lo nhiệm vụ là đọc cơ sở dữ liệu lên, cập nhật cơ sở dữ liệu, update cơ sở dữ
liệu.o Nói chung là nó làm nhiệm vụ là nói chuyện phải trái với database.
1.4. Cách các layer “nói chuyện” với nhau.
Vấn đề đặt ra ở đây là 3 layer này ‘Nói chuyện’ với nhau như thế nào
Nhìn vào sơ đồ ta cũng sẽ nhận được câu trả lời:
Quá trình hiển thị dữ liệu:
Data Access layer nói chuyện với Database và lấy dữ liệu lên theo một cách nào đó (có
thể là bằng câu lệnh select hay thông qua proceduce) lúc này sau khi lấy được dữ liệu lên
thì nó sẽ đẩy lên Business layer tại đây Business cần nhào bột, thêm mắm muối rồi đẩy nó
lên trên GUI và tại GUI nó sẽ hiển thị lên cho người dùng
Quá trình đưa dữ liệu xuống.
Người dùng thao tác với GUI layer sau đó ra lệnh thực hiện (ví như Insert) sau đó hệ
thống sẽ kiểm tra các thông tin người dùng nhập vào nếu thỏa đi xuống tiếp layer
Business để tiếp tục được nhào nặn, tính toán và kiểm tra sau khi xong thì dữ liệu được
đẩy xuống thông tin phía dưới Data Access Layer sau đó tại DataAccess Layer sẽ thực thi
nó xuống database.
1.5. Cách xử lý “lỗi” trong mô hình 3 layer.
Một khi gặp lỗi (các trường hợp không đúng dữ liệu) thì đang ở layer nào thì quăng lên
trên layer cao hơn nó 1 bậc cho tới GUI thì sẽ quăng ra cho người dùng biết.
1.6. Demo mô hình 3 layer trong chương trình quản lý