Transcript File

Business Component
Nội dung
• Đưa ra các yêu cầu của hệ thống.
• Phát triển CSDL của hệ thống.
• Xây dựng mô hình tương tác các thành phần với
các chức năng được đóng gói trong hệ thống.
Các đối tượng nghiên cứu
• Hiểu được kiến trúc mô hình N – tầng.
• Hiểu được cách sử dụng các thành phần.
• Tạo ra mô hình các thành phần trong .NET, sử
dụng C# để tương tác CSDL.
Giới thiệu
• Trình bày kiến trúc N – tầng và các thành phần,
hiểu được làm cách nào có thể được sử dụng
trong hệ phân tán.
• Xây dựng mô hình tương tác giữa thành phần với
các chức năng chính được đóng gói trong hệ
thống.
Kiến trúc N – tầng
• Kiến trúc N – tầng mô tả một cách logic sự phân
biệt của tầng presentation, tầng business, tầng dữ
liệu.
Kiến trúc N – tầng
• Tầng dữ liệu: quản lý dữ liệu.
– Quản lý CSDL đã được xây dựng
• Tầng presentation: Điều khiển những gì mà các
user thấy được và có thể thực hiện trong hệ thống
– Sẽ xây dựng một vài ứng dụng cho tầng này
• Tầng Business (tầng giữa): điều khiển mọi thứ
còn lại.
Tầng Business
• Tầng Business chứa các chức năng chính của hệ thống,
gồm:
– Business rule
– Work Flows
• Cung cấp cách điều khiển việc truy cập dữ liệu
• Xử lý dữ liệu và tạo ra sự hợp lệ dữ liệu đầu vào.
• Tầng business sẽ được định nghĩa bằng cách sử dụng
class
• Thư viện các class mô tả tầng business được thực thi như
những component.
Component
• Các component bao gồm một tập các class được
xây dựng đầy đủ của ứng dụng.
• Có thể được tái sử dụng
• Phải được đóng gói tất cả các thuộc tính.
• Phải cung cấp một interface cho phép được truy
cập bởi các client (thậm chí là được truy xuất từ
các thành phần khác)
Bắt đầu
• Chúng ta tạo tạo các component trong tầng
Business như là một thư viện trong VS2005
• Tạo một project
– Mở Microsoft Visual Studio 2005
– Vào File \ New Project
– Chọn kiểu project là Visual C# và sau đó chọn Class
Library
– Tên của project là PTSLibrary trong cùng một vị trí
của project PTS
Use – Case Diagram
Class Diagram
Tạo Project
Cấu trúc PTSLibrary
• Có ba kiểu class có trong project
– Business Object
– DAO (Data Access Object)
– Các Object giao tiếp
Business object
• Business object hoặc là domain object là các mô
tả trừu tượng các thực thể của hệ thống.
• Mô tả các khái niệm quan trọng về hoạt động
tương tác của hệ thống tạo thành mô hình.
• Trong hệ thống, đây là sự trừu tượng hóa của các
đối tượng quản lý liên quan đến các khai niệm
như: project, team, task,…
Business object
• Business object trong thành phần hệ thống là:
–
–
–
–
–
–
–
–
–
Project
Task
Subtask
User
Team
TeamLeader
TeamMember
Customer
Status
Business object
• Một số business object có cùng tên với các thực
thể trong mô hình dữ liệu, và một số business
object không có trong mô hình dữ liệu.
• Mô hình dữ liệu quan hệ yêu cầu các tiếp cận
khác hơn với mô hình hướng đối tượng.
– Mô hình đối tượng dựa trên các nguyên lý về CNPM.
– Mô hình quan hệ dưa trên các nguyên lý toán học
DAO
• DAO – Data Access Object cung cấp một giao
tiếp trừu tượng đến CSDL.
• Chúng ta cần viết code và kết hợp qua lại giữa mô
hình business class và CSDL
– Không phải lẫn lộn giữa business logic và SQL code
– Không phải viết lại tất cả các business class nếu có
thay đổi trong CSDL.
DAO
• DAO bao gồm tất cả các lệnh SQL để đọc và ghi vào
CSDL.
• Có thể có một đối tượng DAO cho project, nhưng chúng
ta có nhiều dạng user, thực hiện các dữ liệu khác nhau,
nên chúng ta có đối tượng DAO với các vai trò:
–
–
–
–
SupperDAO.
AdminDAO.
CustomerDAO
ClientDAO (Các nhóm trưởng sử dụng .NET /Java)
Các đối tượng giao tiếp – Façade
Objects
• Project PTSLibrary là một thư viện các lớp.
– Không có giao diện đồ họa
– Được sử dụng bởi các section khác nhau trong hệ thống và
không biết được cấu trúc bên trong của các thành phần business
• Hệ thống cung cấp các giao tiếp đến các thành phần
business thông qua các đối tượng giao tiếp.
Các đối tượng giao tiếp – Façade
Objects
• Chúng ta sẽ có một lớp giao tiếp ứng với mỗi dạng user
để truy cập vào các thành phần business
– Cho phép chúng ta thấy được từng vai trò của các user gồm chỉ
những gì cần phải thấy.(ví dụ như: một nhóm trưởng không thể
tạo ra một dự án, và chỉ có PM mới có thể thực hiện được).
• Các lớp giao tiếp bao gồm:
–
–
–
–
PTSAdminFacade
PTSClientFacade
PTSCustomerFacade
PTSSuperFacade
Tạo class
• Xóa file Class1.cs mặc định và tạo Class như sau
Tạo class
• Cửa số Solution Explorer sẽ gồm các Class sau:
• Với mỗi lớp được tạo ra chỉ chứa
các câu lệnh mặc định, các khai
báo namespace, và khai báo class
• Chúng ta chỉ thực thi một tập nhỏ
các chức năng được yêu cầu để
minh họa cách sử dụng trong hệ
thống
Class User
• Lớp này mô tả các user chung của hệ thống:
• Đây là lớp cha (super) của tất
cả các lớp mô tả các user, gồm:
– Customer
– TeamLeader
– TeamMember
• Ba lớp trên kế thừa từ lớp User
Class User
• Lớp này có hai biến protected:
– Username
– Password
• Các biến này chỉ cho phép đọc
• Cho các lớp con kế thừa và sử
dụng hai biến này là private
Class Customer
• Lớp này mô tả các khách hàng.
• Chức năng của lớp này đơn giản, bao gồm;
– Lưu lại tên và hiển thị lại khi yêu cầu.
– Chức năng này đã tồn tại trong lớp User, vì vậy tạo ra sự thừa
kế từ lớp User
• Mỗi thể hiện của lớp này được đặt lại tên, vì vậy cần tạo
ra phương thức khởi tạo cho phép thực hiện điều này
Class Customer
• Các lệnh cần phải viết là:
– Tạo lớp Customer kế thừa từ lớp User
– Thêm một phương thức khởi tạo
để lấy tên và ID
Class Customer
Lớp Customer kế
thừa từ lớp User
name và id
được kế thừa
từ lớp User
Class TeamLeader
• Mô tả một nhóm trưởng
của các nhóm bên trong
hoặc các nhóm bên ngoài
Lớp được kế thừa từ lớp User
Thêm vào phương thức khởi
tạo cho lớp TeamLeader
Class TeamLeader
Tạo một trường
mới
Cho phép
truy cập đến
TeamID
Phương thức
khởi tạo
Class Team
• Mô tả một nhóm bên trong
hoặc nhóm bên ngoài
đang làm việc cho
công ty
• Các trường khác gồm:
id, location, Được liên kết
đến TeamLeader
name
Class Team
Class Team
Enum Status
•
•
•
•
Enum cho phép tạo ra các giá trị khác nhau
Lưu trữ một tập các tên của các thể hiện
Có thể được chuyển đổi thành một số nguyên integer
Dễ dàng để đọc và xử lý:
– if(currentStatus == 3)
– if(currentStatus == Status.Completed)
Enum Status
• Trạng thái:
task, subtask
Sự thay đổi từ
Class sang Enum
Các số nguyên được
gán cho từng trạng
thái được ánh xạ
đến trường StatusID
trong bảng Status
của CSDL
Class Task
• Mô tả công việc bên trong của
project và được phân công cho
từng nhóm và có thể được chia
thành các subtask
Liên kết đến
Status thông qua
mối kết hợp
• Các trường khác: name, taskID
Class Task
Chú ý có sử
dụng kiểu dữ
liệu Guid
Class Task
Class Project
• Mô tả một dự án
liên kết đến Customer và
Task thông qua mối kết hợp
• Có hai phương thức khởi tạo
– Phụ thuộc trên ngữ cảnh của
đối tượng Project được sử dụng
Class Project
• Chú ý các kiểu dữ liệu
khai báo các biến
• task được khai báo generic
– Cho phép tạo ra kiểu Collections
– Task là một danh sách chứa
các đối tượng kiểu Task
– Khai báo sử dụng <Type>
Danh sách chứa các đối
tượng kiểu Task
Class Project
• Hai phương thức khởi tạo (một cho Customer và một cho
task)
Tạo DAO – Data Access Object
• Chúng ta lưu tất cả các
đối tượng DAO trong thư
mục con của project.
• Tạo một folder DAO trong
Project PTSLibrary
Tạo DAO – Data Access Object
• Tạo ra 4 class mới trong thư mục DAO:
–
–
–
–
SuperDAO
AdminDAO
CustomerDAO
ClientDAO
• Các lớp này có code tương tác với CSDL
– Để truy cập đến các lớp được yêu cầu,
ta cần phải thêm một namespace sau
vào trong mỗi lớp DAO:
System.Data và System.Data.SqlClient
Truy cập đến CSDL
• Để truy cập đến CSDL đã được tạo, cần phải thêm đối
tượng datasource
• Phải chắc chắn rằng SQL Server đang hoạt động và
CSDL truy cập được.
• Chọn Add New Data Source từ menu Data
Truy cập đến CSDL
• Tiếp tục, ta chọn mục Database
Truy cập đến CSDL
• Trong màn hình kế tiếp click
vào button new Connection
và chọn Server và CSDL.
Chọn Server
Chọn DataBase
• Sau đó kiểm tra lại kết nối
đến CSDL tại button
Test Connection
Truy cập đến CSDL
• Chọn check box để đồng ý lưu kết nối
• Tên của kết nối là ConnectionString
Truy cập đến CSDL
• Click chọn các check box của các table và click Finish
• Bây giờ ta đã có
kết nối đến CSDL
và chuỗi kết nối
được tạo trong file
Settings.settings
DAO
• Cung cấp một giao tiếp trừu tượng đến data source
• DAO cung cấp sự liên kết rõ ràng giữa mô hình business
và mô hình dữ liệu.
• DAO sẽ chứa tất cả các lệnh SQL để đọc và ghi dữ liệu
Cấu trúc UML của các đối tượng DAO
Class – Super DAO
• Là lớp DAO cơ sở
• Chứa hai phương thức cung
cấp hai thuộc tính được chia sẻ
của các đối tượng DAO:
– GetCustomer
– GetListOfTask
Class – Super DAO – GetCustomer
Khai báo các đối
tượng kết nối CSDL
Câu lệnh SQL
truy vấn thông
tin khách hàng
ConnectionString
Câu lệnh SQL trả về
một dòng dữ liệu
Tạo một thể hiện
của bảng Customer
Giá trị trả về của
phương thức
Method
Class – Super DAO – GetListTask
Method
Chú ý rằng sử dụng dấu nháy
đơn: ProjectID là kiểu GUID và
không phải là một số
Kết quả trả về có thể nhiều hơn một dòng
Duyệt qua tất cả các dòng dữ liệu
Phương thức khởi tạo của
Task cần Guid và Task
Class – CustomerDAO
• Cung cấp các phương thức truy cập CSDL ứng với vai
trò của khách hàng.
• Kế thừa từ lớp SuperDAO
• Hai phương thức:
– Authenticate
– GetListOfProjects
CustomerDAO – Phương thức Authenticate
Thành phần {0} được thay thế bởi giá trị của username
Cần chắc chắn khi đọc từ SQL Datareader thì
phải có một CustomerID được trả về, nếu
không thì trả về 0
CustomerDAO – Phương thức GetListProject
Trong phương thức này tạo
ra hai tập dữ liệu:
1. Các project
2. Tất cả các task của từng
project
Class – ClientDAO
• Tương tự như lớp CustomerDAO.
• Cung cấp các phương thức truy cập CSDL đối với vai trò
của TeamLeader
• Kế thừa từ lớp SuperDAO
• Hai phương thức:
– Authenticate
– GetListOfProjects
• Lớp này cung cấp việc
truy cập CSDL cho các
Java Client
Class – ClientDAO
• Câu lệnh SQL trong phương thức Authenticate.
sql = String.Format("SELECT DISTINCT Person.Name, UserId,
TeamId
FROM
Person
INNER
JOIN
Team
ON
(Team.TeamLeaderId = Person.UserId) WHERE Username='{0}'
AND Password='{1}'", username, password);
• Phương thức GetListOfProjects trả về tất cả các project
của từng nhóm (không phải các project của từng khách
hàng như trong lớp CustomerDAO)
public List<Project> GetListOfProjects(int teamId)
Class – AdminDAO
• Cung cấp phương thức truy cập CSDL ứng với vai trò
của Administrator
• Kế thừa từ lớp SuperDAO
• Có 6 phương thức:
–
–
–
–
–
–
Authenticate
CreateProject
CreateTask
GetListOfCustomers
GetListOfProjects
GetListOfTeams
AdminDAO – Phương thức CreateProject
Tạo ra một Guid mới
Thực thi câu lệnh INSERT thay vì câu lệnh SELECT
Class – AdminDAO
• Câu lệnh SQL đối với phương thức Authenticate chắc
chắn rằng chỉ có Administrator có thể thực thi.
• Phương thức CreateTask chèn một task mới vào CSDL.
• GetListOfCustomer trả về tất cả khách hàng trong CSDL.
• GetListOfProjects chỉ trả về các project tương ứng với
PM đã tạo ra.
• GetListOfteams trả về tất cả các nhóm có trong CSDL.
Các đối tượng giao tiếp
• Cung cấp các giao tiếp đến các thành phần Business.
Class – PTSSuperFacade
• Đây là lớp giao tiếp cơ sở.
• Chứa các phương thức cung cấp các thuộc tính được chia
sẻ bởi các lớp giao tiếp khác
• Phương thức:
– GetListOfTask
Class – PTSSuperFacade
Truy cập một lớp trong
thư mục con DAO
Giá trị trả về là một mảng các Task
Class – PTSCustomerFacade
• Cung cấp một giao tiếp public cho dịch vụ web của
khách hàng
• Kế thừa từ lớp PTSSuperFacade
• Một phương thức:
– GetListOfProjects
Class – PTSCustomerFacade
Đưa ra việc khởi tạo
từ lớp cha
Lớp giao tiếp gọi đối tượng DAO. Điều này cho
phép chúng ta chỉ ra các lớp hiện hành từ DAO
Class – PTSClientFacade
• Cung cấp một giao tiếp public cho dịch vụ web client sử
dụng Java
• Kế thừa từ lớp PTSSuperFacade.
• Có hai phương thức:
– GetListOfProject
– Authenticate
Class – PTSClientFacade
Username và
password phải
được cung cấp
Class – PTSAdminFacade
• Cung cấp một giao tiếp public cho Administrator điều
khiển các client
• Kế thừa từ lớp PTSSupperFacade
• Các phương thức
–
–
–
–
–
–
Authenticate
CreateProject
CreateTask
GetListOfCustomers
GetListOfProjects
GetListOfTeams
Class – PTSAdminFacade
Username và
password phải
được cung cấp
Tổng kết
• Trong phần này đã làm việc trên các thành business của
project PTSLibrary
• Ta phải build project bằng cách chọn Build PTSLibrary
từ menu Build và sửa lại tất cả các lỗi.