Business Component
description
Transcript of Business Component
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,
name
Được liên kết đến TeamLeader
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
• Các trường khác: name, taskID
Liên kết đến Status thông qua mối kết hợp
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.
• Sau đó kiểm tra lại kết nối
đến CSDL tại button
Test Connection
Chọn Server
Chọn DataBase
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 Method
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ệuTạo một thể hiện của bảng CustomerGiá trị trả về của phương thức
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òngDuyệ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 project2.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.