Ứng dụng kỹ thuật lập trình module 3 lớp của dotnetnuke vào winform

11 508 1
Ứng dụng kỹ thuật lập trình module 3 lớp của dotnetnuke vào winform

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Kỹ thuật lập trình Ứng dụng kỹ thuật lập trình module Dotnetnuke vào Winform, theo kỹ thuật mô hình 3 lớp: lớp thể hiện giao diện, lớp các thành phần thực hiện công việc, lớp thao tác dữ liệu.Tài liệu này rất đơn giản và thực tế, phù hợp để các bạn vừa nghiên cứu vừa áp dụng vào thực tiễn

HƯỚNG DẪN LẬP TRÌNH WINFORM THEO MÔ HÌNH 3 LỚP CỦA MODULE DOTNETNUKE Tác giả: vuathongtin – Bùi Thành Nhân THÁNG 05/2014 I. Mô hình 3 lớp của module DotNetNuke (gọi tắt là 3 lớp DNN) Lớp thể hiện giao diện Các thành phần của giao diện (Windows User Control) Lớp các thành phần thực hiện công việc Các thành phần thực thi (Bussiness Components) Lớp truy xuất/nhập dữ liệu Lớp truy nhập dữ liệu đa hình Mô tả truy nhập dữ liệu (Abstract Data Provider) Lớp thực thi truy nhập dữ liệu (Sql Data Provider) Các khối truy nhập dữ liệu Mô hình hóa của các đối tượng được thể hiện trong mô hình 3 lớp. Controller Class Đối tượng điều khiển, sự dụng các phương thức của DataProvider để truy xuất dữ liệu. Info Class Lớp mô tả các đối tượng lưu trữ thông tin DataProvider Class Lớp ảo (abstract) định nghĩa các phương thức truy nhập dữ liệu. Lớp ảo này cho phép phát triển độc lập các mô tả truy nhập dữ liệu. SqlDataProvider Class Controller Object Controller Object Info Object Info Object DataProvider Object DataProvider Object SQLDataProvider Object SQLDataProvider Object Store Procedure Store Procedure Đối tượng truy nhập dữ liệu thực sự Store Procedure Các thủ tục ở CSDL MSSQL server được SqlDataProvider sử dụng Sử dụng thư viện Microsoft.ApplicationBlocks.Data.dll Thư viện các hàm làm việc trực tiếp với CSDL Quy trình xây dựng project winform 3 lớp DNN: (Thực nghiệm với bài toán tạo form quản lý danh sách dự án. Gồm: tb_duan(duanid, tenduan,loaiduan,mota,namthuchien,khachhang) 1. Khởi tạo database 2. Tạo Project 3. Xây dựng Object 4. Xây dựng lớp giao diện 1.1.Tạo table 1.2. Tạo các store procedure - Tạo các thư mục chứa các Object - Tạo file App.config 3.1. Data Info 3.2. DataProvider 3.3. SqlDataProvider 3.4. Controller 4.1. Form danh sách (hiện dữ liệu) 4.2. Form cập nhật (thêm, sửa) Bước 1: Khởi tạo database nhatkyduan (table: tb_duan, store procedure: pr_duan_them, pr_duan_sua, pr_duan_xoa, pr_duan_thongtin) Table CREATE TABLE [dbo].[tb_duan]( [duanid] [bigint] IDENTITY(1,1) NOT NULL, [loaiduan] [int] NULL, [tenduan] [nvarchar](200) NULL, [mota] [ntext] NULL, [namthuchien] [int] NULL, [khachhang] [nvarchar](200) NULL ) Store Procedure CREATE proc [dbo].[pr_duan_them]( @tenduan nvarchar(200), @mota ntext, @loaiduan int, @namthuchien int, @khachhang nvarchar(200) ) AS BEGIN INSERT INTO tb_duan(tenduan,mota,loaiduan,namthuchien,khachhan g) create proc [dbo].[pr_duan_xoa]( @duanid bigint ) AS BEGIN DELETE FROM tb_duan WHERE duanid=@duanid END GO create proc [dbo].[pr_duan_thongtin]( @duanid bigint VALUES(@tenduan,@mota,@loaiduan,@namthuchie n,@khachhang) SELECT CAST(SCOPE_IDENTITY() as INT) END GO CREATE proc [dbo].[pr_duan_sua]( @tenduan nvarchar(200), @mota ntext, @loaiduan int, @namthuchien int, @khachhang nvarchar(200), @duanid bigint ) AS BEGIN UPDATE tb_duan SET tenduan=@tenduan,mota=@mota,loaiduan=@loaidua n,namthuchien=@namthuchien,khachhang=@khachha ng WHERE duanid=@duanid END GO ) AS BEGIN SELECT * FROM tb_duan WHERE duanid=@duanid END GO Bước 2: - Xây dựng mới 1 project Winform (Ví dụ: Project name NhatKyDuAn) - Tạo lần lượt các thư mục: Components, Data, SqlDataProviders, VguiLayers Đặc tả:  Components: Chứa các đối tượng Controller (thuộc lớp các thành phần thực hiện công việc) Ví dụ: DuAnController.cs.  Data: Chứa các đối tượng InfoObject và DataProvider Object Ví dụ: DuAnInfo.cs, DataProvider.cs  SqlDataProviders: Chứa đối tượng SqlDataProvider Object. Ví dụ: SqlDataProvider.cs  VguiLayers: Chứa các form giao diện người dùng (thuộc lớp thể hiện giao diện) Ví dụ: frm_duan.cs, frm_duan_capnhat.cs Bước 3: Xây dựng các đối tượng tương ứng với các thư mục được tạo ở Bước 2. Bước 3.1: Xây dựng đối tượng Data và DataProvider: nhấn phải chuột vào thư mục Data và lần lượt tạo 2 Class mới có tên: DuAnInfo.cs và DataProvider.cs public class DuAnInfo { public long duanid { get; set; } public string tenduan { get; set; } public int loaiduan { get; set; } public string mota { get; set; } public int namthuchien { get; set; } public string khachhang { get; set; } public DuAnInfo() { } public DuAnInfo(long duanid, string tenduan, int loaiduan, string mota, int namthuchien,string khachhang) { this.duanid = duanid; this.tenduan = tenduan; this.loaiduan = loaiduan; this.mota = mota; this.namthuchien = namthuchien; this.khachhang = khachhang; } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using NhatKyDuAn.Components; using NhatKyDuAn.Components.Data; namespace NhatKyDuAn.Data { public abstract class DataProvider { #region Shared/Static Methods private static DataProvider provider; // return the provider public static DataProvider Instance() { if (provider == null) { const string assembly = "NhatKyDuAn.SqlDataProviders.SqlDataProvider,NhatKyDuAn"; Type objectType = Type.GetType(assembly, true, true); provider = (DataProvider)Activator.CreateInstance(objectType); } return provider; } public static IDbConnection GetConnection() { string _connectionString; _connectionString = System.Configuration.ConfigurationManager.AppSettings["SiteSqlServer"]; IDbConnection newConnection = new System.Data.SqlClient.SqlConnection(); newConnection.ConnectionString = _connectionString.ToString(); newConnection.Open(); return newConnection; } #endregion #region Du An public abstract List<DuAnInfo> duan_danhsach(string tenduan); public abstract int duan_them(DuAnInfo DA); public abstract int duan_sua(DuAnInfo DA); public abstract int duan_xoa(long duanid); public abstract DuAnInfo duan_thongtin(long duanid); protected virtual List<DuAnInfo> duan_danhsachFromReader(IDataReader rdr) { List<DuAnInfo> LST = new List<DuAnInfo>(); while (rdr.Read()) { LST.Add(duanFromReader(rdr)); } return LST; } protected virtual DuAnInfo duanFromReader(IDataReader rdr) { return new DuAnInfo( Convert.ToInt64(rdr["duanid"]), rdr["tenduan"].ToString(), Convert.ToInt32(rdr["loaiduan"]), rdr["mota"].ToString(), Convert.ToInt32(rdr["namthuchien"]), rdr["khachhang"].ToString()); } #endregion } } Bước 3.2: Xây dựng đối tượng Controller: nhấn phải chuột vào thư mục Components, tạo Class mới có tên: DuAnController.cs. Nội dung class DuAnController: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using NhatKyDuAn.Components.Data; using NhatKyDuAn.Data; namespace NhatKyDuAn.Components { public class DuAnController { public static List<DuAnInfo> duan_danhsach(string tenduan) { return DataProvider.Instance().duan_danhsach(tenduan); } public static int duan_them(DuAnInfo DA) { return DataProvider.Instance().duan_them(DA); } public static int duan_sua(DuAnInfo DA) { return DataProvider.Instance().duan_sua(DA); } public static DuAnInfo duan_thongtin(Int64 duanid) { return DataProvider.Instance().duan_thongtin(duanid); } public static int duan_xoa(Int64 duanid) { return DataProvider.Instance().duan_xoa(duanid); } } } Bước 3.3: Xây dựng đối tượng SqlDataProvider: nhấn phải chuột vào thư mục SqlDataProvider, tạo mới class SqlDataProvider using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Microsoft.ApplicationBlocks.Data; using NhatKyDuAn.Components; using NhatKyDuAn.Data; using NhatKyDuAn.Components.Data; using System.Data.SqlClient; namespace NhatKyDuAn.SqlDataProviders { public class SqlDataProvider : DataProvider { #region Private Members private readonly string _connectionString; #endregion #region Constructors public SqlDataProvider() { if (string.IsNullOrEmpty(_connectionString)) { _connectionString = System.Configuration.ConfigurationManager.AppSettings["SiteSqlServer"]; } } #endregion #region Properties public string ConnectionString { get { return _connectionString; } } #endregion #region SqlData Du An public override List<DuAnInfo> duan_danhsach(string tenduan) { IDataReader rdr = (IDataReader)SqlHelper.ExecuteReader(ConnectionString, "pr_duan_danhsach", tenduan); return duan_danhsachFromReader(rdr); } public override int duan_them(DuAnInfo DA) { SqlParameter[] parameter = new SqlParameter[5]; parameter[0] = new SqlParameter("@tenduan", DbType.String); parameter[0].Value = DA.tenduan; parameter[1] = new SqlParameter("@mota", DbType.String); parameter[1].Value = DA.mota; parameter[2] = new SqlParameter("@loaiduan", DbType.Int32); parameter[2].Value = DA.loaiduan; parameter[3] = new SqlParameter("@namthuchien", DbType.Int32); parameter[3].Value = DA.namthuchien; parameter[4] = new SqlParameter("@khachhang", DbType.String); parameter[4].Value = DA.khachhang; return (int)SqlHelper.ExecuteScalar(ConnectionString, "pr_duan_them", parameter); } public override int duan_sua(DuAnInfo DA) { SqlParameter[] parameter = new SqlParameter[6]; parameter[0] = new SqlParameter("@tenduan", DbType.String); parameter[0].Value = DA.tenduan; parameter[1] = new SqlParameter("@mota", DbType.String); parameter[1].Value = DA.mota; parameter[2] = new SqlParameter("@loaiduan", DbType.Int32); parameter[2].Value = DA.loaiduan; parameter[3] = new SqlParameter("@namthuchien", DbType.Int32); parameter[3].Value = DA.namthuchien; parameter[4] = new SqlParameter("@khachhang", DbType.String); parameter[4].Value = DA.khachhang; parameter[5] = new SqlParameter("@duanid", DbType.Int64); parameter[5].Value = DA.duanid; return SqlHelper.ExecuteNonQuery(ConnectionString, "pr_duan_sua", parameter); } public override DuAnInfo duan_thongtin(long duanid) { IDataReader rdr = SqlHelper.ExecuteReader(ConnectionString, "pr_duan_thongtin", duanid); DuAnInfo DA = new DuAnInfo(); while (rdr.Read()) { DA = duanFromReader(rdr); } return DA; } public override int duan_xoa(long duanid) { return SqlHelper.ExecuteNonQuery(ConnectionString, "pr_duan_xoa", duanid); } #endregion } } Bước 4: Xây dựng lớp giao diện: nhấn phải chuột vào thư mục  Thiết kế 2 form: frm_duan, frm_duan_capnhat  Kế thừa các Object được tạo ở Bước 3 để code xử lý 2 form trên. public void duan_danhsach() { dgv_duan.AutoGenerateColumns = false; dgv_duan.DataSource = DuAnController.duan_danhsach(txt_timkiem.Text.Trim()); lbl_tongso.Text = dgv_duan.Rows.Count.ToString(); } private void btn_luulai_Click(object sender, EventArgs e) { if (txt_tenduan.Text.Trim() == "") { MessageBox.Show("Chưa nhập tên dự án!"); txt_tenduan.Focus(); } else { string tenduan = txt_tenduan.Text.Trim(); int namthuchien = int.Parse(cbo_namthuchien.Text); string mota = txt_mota.Text; DuAnInfo DA = new DuAnInfo (); DA.tenduan = tenduan; DA.namthuchien = namthuchien; DA.loaiduan =0; DA.mota = mota; DA.khachhang = txt_khachhang.Text.Trim(); if (duanid == 0) { if (DuAnController.duan_them(DA) > 0) { if (MessageBox.Show("Đã thêm! Bạn có muốn thêm dự án khác nữa không?", "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == System.Windows.Forms.DialogResult.OK) { txt_tenduan.Text = ""; cbo_namthuchien.SelectedIndex = 0; txt_mota.Text = ""; txt_tenduan.Focus();

Ngày đăng: 17/07/2014, 13:48

Từ khóa liên quan

Mục lục

  • Quy trình xây dựng project winform 3 lớp DNN:

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

Tài liệu liên quan