Phát triển ứng dụng đa tầng

8 251 0
Phát triển ứng dụng đa tầng

Đang tải... (xem toàn văn)

Thông tin tài liệu

Phát triển ứng dụng đa tầng Phát triển ứng dụng đa tầng Bởi: Khoa CNTT ĐHSP KT Hưng Yên Chúng ta tìm hiểu qua lớp mô hình đa tầng (cụ thể tầng – lớp) Bây thử tìm hiểu qui trình cụ thể để biết lớp giao tiếp với Ví dụ ứng dụng có thao tác tạo chuyên mục mới, lớp ltương tác với sau: Lớp Presentation: • Trình bày web form, có text box cho phép người sử dụng nhập tên mô tả cho chuyên mục • Khi người dùng nhấn nút tạo form này, ứng dụng thực việc tạo Business Entity Category đoạn code sau minh họa: public void CreateNewCategory() { Category category = new Category(); category.Name = name.Text; category.Description = description.Text; // sử dụng dịch vụ lớp Business cung cấp để tạo chuyên mục CategoryService.CreateCategory(category); } Lớp Business Logic • Để cung cấp dịch vụ tạo chuyên mục, thành phần CategoryService cung cấp hàm sau: public static void CreateCategory(Category category) 1/8 Phát triển ứng dụng đa tầng { // kiểm tra xem tên khóa chuyên mục tồn chưa? // kiểm tra tên khóa chuyên mục có hợp lệ không? // sử dụng DV lớp Data Access để lưu chuyên mục vào CSDL CategoryDAO categoryDAO = new CategoryDAO(); categoryDAO.CreateCategory(category); } Lớp Data Access • Tương tự, để cung cấp dịch vụ lưu chuyên mục vào CSDL, thành phần CategoryDAO cung cấp hàm sau (sử dụng ADO.NET để kết nối với CSDL): public void CreateCategory(Category category) { // tạo connection // tạo command, khởi tạo tham số command.Parameters.Add(new SqlParameter("@KeyName", category.KeyName)); command.Parameters.Add(new SqlParameter("@Name", category.Name)); command.Parameters.Add(new SqlParameter("@Description", category.Description)); // lưu liệu command.ExecuteNonQuery(); } 2/8 Phát triển ứng dụng đa tầng Phân tích thiết kế: Ứng dụng viết ASP.NET 2.0 SQL Server 2000/2005 Ngôn ngữ dùng C# Trong ứng dụng tin tức mà tìm hiểu yêu cầu qua viết trước, thấy có hai đối tượng thông tin mà cần quản lý chuyên mục(category) tin tức(news) Ứng dụng quản lý thu thập đối tượng liệu từ người dùng(phóng viên, biên tập viên) trình bày lại cho người sử dụng khác xem(độc giả) Giờ bắt tay vào thiết kế thành phần Business Entities Business Entities: Ứng dụng bao gồm entity Category News Category: Một chuyên mục (Category) gồm thông tin sau: • CategoryId: Mã chuyên mục - sinh tự động tạo • Name: Tên chuyên mục VD: Vi tính, Kinh tế • KeyName: Tên gợi nhớ dùng để phân biệt chuyên mục với (không trùng nhau) • Description: Mô tả cho chuyên mục • Picture: Hình ảnh đại diện cho chuyên mục Trong ứng dụng đơn giản này, thiết kế chuyên mục có cấp, chuyên mục con, cháu Và ứng dụng phần quản lý nhà biên tập viên, nhà báo chế cấp quyền hạn duyệt bài, gửi News Mỗi tin có thông tin sau: • • • • • • • • • • • • • • NewsId: mã tin Sẽ sinh tự động tạo Title: tiêu đề tin Subtitle: tiêu đề phụ tin Excerpt: phần giới thiệu ngắn gọn tin Authors: danh sách tác giả tin VD: Nguyễn Văn A, Hoàng Thị B Keywords: danh sách từ khóa tin dùng để tìm kiếm VD: Microsoft, broken Body: Đây phần nội dung tin Picture: Hình ảnh minh họa cho tin CreationTime: Ngày tạo tin LastModificationTime: Ngày chỉnh sửa cuối tin PublishedTime: Ngày tin đăng TotalViews: Tổng số lượt người xem tin TotalRates: Tổng số lượt người đánh giá tin Rate: Điểm đánh giá trung bình tin 3/8 Phát triển ứng dụng đa tầng • Status: Trạng thái tin Có thể Writting(Đang viết), Approving(Đang chờ duyệt), Published(Đã đăng) Business Service Components: Bước phân tích thiết kế Business Service Components Các thành phần làm nhiệm vụ cung cấp dịch vụ cho lớp Presentation dùng để lấy lưu trữ thông tin Lớp CategoryService: Chúng ta cần thao tách đối tượng liệu Category: • • • • • • Tạo - CreateCategory(Category category) Cập nhật - UpdateCategory(Category category) Xóa - DeleteCategory(int categoryId) Lấy thông tin chi tiết - GetCategory(int categoryId) Lấy danh sách category - GetCategories() Kiểm tra Key xem có database chưa - CheckKey(string keyName) Thao tác dùng để kiểm tra xem tạo category KeyName tồn hệ thống chưa Thao tác dùng lớp Presentation để kiểm tra thông báo lỗi cho người dùng họ nhập tên khóa có hệ thống Lớp NewsService, dựa yêu cầu phân tích viết đầu tiên, cần thao tác sau đối tượng News: • • • • • Tạo - CreateNews(News news) Cập nhật - UpdateNews(News news) Xóa - DeleteNews(int newsId) Lấy thông tin chi tiết - GetNews(int newsId) Lấy danh sách tin thuộc chuyên mục đó, xếp theo tin - GetNewsOfCategory(int categoryId, int page, int pageSize, out int totalRecords) • Cập nhật số lần xem tin - UpdateTotalViews(int newsId) • Cập nhật đánh giá cho tin - UpdateRate(int newsId, int rate) • Tìm viết dựa từ khóa - SearchNews(string keyWords, int page, int pageSize, out int totalRecords) Trong hàm trên, bạn ý đến hàm GetNewsOfCategory Trong hàm có tham số dùng để phân trang tin Chúng ta cần đến chức trình bày trang tin, trình bày số lượng có hạn tin chuyên mục trình bày tất hình Khi người dùng muốn xem thêm, họ chọn trang nhấp vào link Xem tiếp, lúc ứng dụng trình bày tin trang Tham số totalRecords cho biết tổng số tin thật có chuyên mục 4/8 Phát triển ứng dụng đa tầng Data Access Components Bây thiết kế lớp dùng để truy xuất cập nhật liệu Các hàm lớp DAO đơn giản, làm nhiệm vụ cập nhật liệu vào database truy xuất liệu từ database Các bạn thấy chức giống lớp Business Logic, ràng buộc logic gì, đơn giản thực việc truy xuất liệu mà Các business logic kiểm tra lớp Business Logic Hiện thực lớp Business Logic & Data Access Sau xong bước thiết kế, tiến hành thực lớp Business Data Access Các bạn xem source code đính kèm để biết chi tiết cách thực lớp Lớp Presentation thiết kế thực viết Hiện thực Data Access Components Do ứng dụng đơn giản nên giới hạn dùng với CSDL SQL Server 2000/2005 nên lớp không thiết kế để chạy lúc với nhiều loại database khác Chúng ta dùng Stored Procedures để truy xuất liệu an toàn dễ thay đổi hơn, tránh bị lỗi SQL Injection(không thể tránh hoàn toàn bạn không thực đúng) Các bạn xem qua cách thực hàm nào: public void CreateCategory(Category category) { using (SqlConnection connection = GetConnection()) { SqlCommand command = new SqlCommand("spCategoriesCreate", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@KeyName", category.KeyName)); command.Parameters.Add(new SqlParameter("@Name", category.Name)); command.Parameters.Add(new SqlParameter("@Description", category.Description)); command.Parameters.Add(new SqlParameter("@Picture", category.Picture)); 5/8 Phát triển ứng dụng đa tầng SqlParameter paramCategoryId = new SqlParameter("@CategoryId", SqlDbType.Int, 4); paramCategoryId.Direction = ParameterDirection.Output; command.Parameters.Add(paramCategoryId); connection.Open(); command.ExecuteNonQuery(); if (paramCategoryId.Value != DBNull.Value) category.CategoryId = (int)paramCategoryId.Value; else throw DataAccessException(String.Format(Resources.Strings.CreateEntityException, "Category")); new } } Stored Procedure spCategoriesCreate đơn giản viết sau: CREATE PROCEDURE dbo.spCategoriesCreate @Name nvarchar(50), @KeyName varchar(30), @Description ntext, @Picture varchar(256), @CategoryId int output AS INSERT INTO Categories ( 6/8 Phát triển ứng dụng đa tầng Name, KeyName, Description, Picture ) VALUES ( @Name, @KeyName, @Description, @Picture ) SELECT @CategoryId = SCOPE_IDENTITY() Hiện thực lớp Business Logic Hiện thực lớp Business Logic đòi hỏi bạn phải nắm rõ business logic ứng dụng Ví dụ ứng dụng tin tức tạo chuyên mục mới, bạn phải kiểm tra xem KeyName chuyên mục có hệ thống chưa? Nếu có phải báo lỗi, chưa có kiểm tra KeyName có hợp lệ hay không? (Chỉ chứa kí tự alphabet, chữ số, gạch gạch ngang ) public static void CreateCategory(Category category) { // Has this key name existed? if (!CheckKey(category.KeyName)) throw new BusinessException(String.Format(Resources.Strings.KeyNameExisted, category.KeyName)); 7/8 Phát triển ứng dụng đa tầng // is this key name valid? if (!ValidateKey(category.KeyName)) throw new BusinessException(String.Format(Resources.Strings.InvalidKeyName, category.KeyName)); // ok , now save it to database CategoryDAO categoryDAO = new CategoryDAO(); categoryDAO.CreateCategory(category); } 8/8 ... liệu command.ExecuteNonQuery(); } 2/8 Phát triển ứng dụng đa tầng Phân tích thiết kế: Ứng dụng viết ASP.NET 2.0 SQL Server 2000/2005 Ngôn ngữ dùng C# Trong ứng dụng tin tức mà tìm hiểu yêu cầu qua... đánh giá tin Rate: Điểm đánh giá trung bình tin 3/8 Phát triển ứng dụng đa tầng • Status: Trạng thái tin Có thể Writting(Đang viết), Approving(Đang chờ duyệt), Published(Đã đăng) Business Service... chọn trang nhấp vào link Xem tiếp, lúc ứng dụng trình bày tin trang Tham số totalRecords cho biết tổng số tin thật có chuyên mục 4/8 Phát triển ứng dụng đa tầng Data Access Components Bây thiết

Ngày đăng: 31/12/2015, 14:52

Mục lục

  • Phát triển ứng dụng đa tầng

  • Lớp Presentation:

  • Lớp Business Logic

  • Lớp Data Access

Tài liệu cùng người dùng

Tài liệu liên quan