您的位置:首页 > 运维架构 > 网站架构

迎接2012之三层架构简单设计

2011-11-11 16:14 337 查看
一、数据访问层的抽象公共类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data;

namespace ThreeLevelDAL
{
/// <summary>
/// 数据访问层的抽象公共类
/// </summary>
public abstract class DataAccess
{
private string connectionString = "";
/// <summary>
/// 连接数据库字符串
/// </summary>
protected string ConnectionString
{
get { return connectionString; }
set { connectionString = value; }
}

protected int ExecuteNonQuery(DbCommand cmd)
{
return cmd.ExecuteNonQuery();
}

protected IDataReader ExecuteReader(DbCommand cmd)
{
return cmd.ExecuteReader();
}

protected object ExecuteScalar(DbCommand cmd)
{
return cmd.ExecuteScalar();
}
}
}

二、用户类的抽象基类

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;

namespace ThreeLevelDAL
{
/// <summary>
/// 用户类的抽象基类
/// </summary>
public abstract class UsersDataAccess:DataAccess
{
/// <summary>
/// 用户类的构造函数
/// </summary>
public UsersDataAccess()
{
this.ConnectionString = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
}
/// <summary>
/// 得到所有的用户集合
/// </summary>
/// <returns></returns>
public abstract List<ThreeLevelMODEL.Users> GetUsers();
/// <summary>
/// 根据编号得到用户的信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public abstract ThreeLevelMODEL.Users GetUserId(int id);
/// <summary>
/// 增加用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public abstract int UserInsert(ThreeLevelMODEL.Users user);
/// <summary>
/// 修改用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public abstract int UserUpdate(ThreeLevelMODEL.Users user);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public abstract int UserDelete(int id);
/// <summary>
/// 分页得到用户信息
/// </summary>
/// <param name="PageSize"></param>
/// <param name="PageCount"></param>
/// <param name="PageNo"></param>
/// <param name="RecordCount"></param>
/// <returns></returns>
public abstract List<ThreeLevelMODEL.Users> UserGetList(int PageSize, ref int PageCount, int PageNo, ref int RecordCount);
/// <summary>
/// 得到用户信息
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
protected virtual ThreeLevelMODEL.Users GetUsersReader(IDataReader reader)
{
return new ThreeLevelMODEL.Users(
int.Parse(reader["Id"].ToString()),
reader["UserName"].ToString(),
reader["PassWord"].ToString(),
bool.Parse(reader["Sex"].ToString()));
}
/// <summary>
/// 得到用户信息的集合
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
protected virtual List<ThreeLevelMODEL.Users> GetUsersCollectionReader(IDataReader reader)
{
List<ThreeLevelMODEL.Users> users = new List<ThreeLevelMODEL.Users>();
while (reader.Read())
users.Add(GetUsersReader(reader));
return users;
}

}
}

三、用户类数据处理

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace ThreeLevelDAL
{
/// <summary>
/// 用户类数据处理
/// </summary>
public class User:UsersDataAccess
{
/// <summary>
/// 得到所有的用户集合
/// </summary>
/// <returns></returns>
public override List<ThreeLevelMODEL.Users> GetUsers()
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("Users_GetAll", cn);
cmd.CommandType = CommandType.StoredProcedure;
cn.Open();
return GetUsersCollectionReader(ExecuteReader(cmd));
}
}
/// <summary>
/// 根据编号得到用户的信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override ThreeLevelMODEL.Users GetUserId(int id)
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("Users_GetId", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;
cn.Open();
IDataReader reader = ExecuteReader(cmd);
if (reader.Read())
return GetUsersReader(reader);
else
return null;
}
}
/// <summary>
/// 增加用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public override int UserInsert(ThreeLevelMODEL.Users user)
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("Users_Insert", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserName", SqlDbType.VarChar,50).Value = user.UserName;
cmd.Parameters.Add("@PassWord", SqlDbType.VarChar,50).Value = user.PassWord;
cmd.Parameters.Add("@Sex", SqlDbType.Bit, 1).Value = user.Sex;
cn.Open();
return ExecuteNonQuery(cmd);
}
}
/// <summary>
/// 修改用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public override int UserUpdate(ThreeLevelMODEL.Users user)
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("Users_Update", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = user.Id;
cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = user.UserName;
cmd.Parameters.Add("@PassWord", SqlDbType.VarChar, 50).Value = user.PassWord;
cmd.Parameters.Add("@Sex", SqlDbType.Bit, 1).Value = user.Sex;
cn.Open();
return ExecuteNonQuery(cmd);
}
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override int UserDelete(int id)
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{
SqlCommand cmd = new SqlCommand("Users_Delete", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = id;
cn.Open();
return ExecuteNonQuery(cmd);
}
}
/// <summary>
/// 分页得到用户信息
/// </summary>
/// <param name="PageSize"></param>
/// <param name="PageCount"></param>
/// <param name="PageNo"></param>
/// <param name="RecordCount"></param>
/// <returns></returns>
public override List<ThreeLevelMODEL.Users> UserGetList(int PageSize, ref int PageCount, int PageNo, ref int RecordCount)
{
using (SqlConnection cn = new SqlConnection(this.ConnectionString))
            {
                using (SqlDataAdapter adapter = new SqlDataAdapter("Users_PageList", cn))
                {
                    adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                    adapter.SelectCommand.Parameters.Add("@PageSize", SqlDbType.Int).Value = PageSize;
                    adapter.SelectCommand.Parameters.Add("@PageCount", SqlDbType.Int).Value = PageCount;
                    adapter.SelectCommand.Parameters["@PageCount"].Direction = ParameterDirection.Output;
                    adapter.SelectCommand.Parameters.Add("@PageNo", SqlDbType.Int).Value = PageNo;
                    adapter.SelectCommand.Parameters.Add("@RecordCount", SqlDbType.Int).Value = RecordCount;
                    adapter.SelectCommand.Parameters["@RecordCount"].Direction = ParameterDirection.Output;
                    cn.Open();
                    adapter.SelectCommand.ExecuteNonQuery();
                    PageCount = int.Parse(adapter.SelectCommand.Parameters["@PageCount"].Value.ToString());
                    RecordCount = int.Parse(adapter.SelectCommand.Parameters["@RecordCount"].Value.ToString());
                    using (DataTable table = new DataTable())
                    {
                        adapter.Fill(table);
                        List<ThreeLevelMODEL.Users> user = new List<ThreeLevelMODEL.Users>();
                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                           user.Add(new ThreeLevelMODEL.Users(int.Parse(table.Rows[i]["Id"].ToString()),table.Rows[i]["UserName"].ToString(),table.Rows[i]["PassWord"].ToString(),bool.Parse(table.Rows[i]["Sex"].ToString())));
                        }
                        return user;
                    }
                }
            }        }
}
}

四、业务逻辑层

using System;
using System.Collections.Generic;
using System.Text;

namespace ThreeLevelBLL
{
/// <summary>
/// 用户类业务逻辑
/// </summary>
public class Users
{
private readonly ThreeLevelDAL.User DAL = new ThreeLevelDAL.User();
/// <summary>
/// 得到所有的用户集合
/// </summary>
/// <returns></returns>
public List<ThreeLevelMODEL.Users> GetUsers()
{
return DAL.GetUsers();
}
/// <summary>
/// 根据编号得到用户的信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public ThreeLevelMODEL.Users GetUserId(int id)
{
return DAL.GetUserId(id);
}
/// <summary>
/// 增加用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int UserInsert(ThreeLevelMODEL.Users user)
{
return DAL.UserInsert(user);
}

b159
/// <summary>
/// 修改用户
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int UserUpdate(ThreeLevelMODEL.Users user)
{
return DAL.UserUpdate(user);
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int UserDelete(int id)
{
return DAL.UserDelete(id);
}
/// <summary>
/// 分页得到用户信息
/// </summary>
/// <param name="PageSize"></param>
/// <param name="PageCount"></param>
/// <param name="PageNo"></param>
/// <param name="RecordCount"></param>
/// <returns></returns>
public List<ThreeLevelMODEL.Users> UserGetList(int PageSize, ref int PageCount, int PageNo, ref int RecordCount)
{
return DAL.UserGetList(PageSize, ref PageCount, PageNo, ref RecordCount);
}
}
}

五、实体层

using System;
using System.Collections.Generic;
using System.Text;

namespace ThreeLevelMODEL
{
/// <summary>
/// 用户类实体层
/// </summary>
public class Users
{
/// <summary>
/// 默认构造函数
/// </summary>
public Users()
{

}
/// <summary>
/// 构造函数重载实现带参
/// </summary>
/// <param name="id">编号</param>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <param name="sex">性别</param>
public Users(int id,string username,string password,bool sex)
{
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
}
private int id = 0;
/// <summary>
/// 编号
/// </summary>
public int Id
{
get { return id; }
set { id = value; }
}
private string username = "";
/// <summary>
/// 用户名
/// </summary>
public string UserName
{
get { return username; }
set { username = value; }
}
private string password = "";
/// <summary>
/// 密码
/// </summary>
public string PassWord
{
get { return password; }
set { password = value; }
}
private bool sex = false;
/// <summary>
/// 性别
/// </summary>
public bool Sex
{
get { return sex; }
set { sex = value; }
}
}
}

六、表

CREATE TABLE [dbo].[Users](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[PassWord] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Sex] [bit] NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自动增加ID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'COLUMN', @level2name=N'Id'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户名' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'COLUMN', @level2name=N'UserName'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'密码' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'COLUMN', @level2name=N'PassWord'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'COLUMN', @level2name=N'Sex'

七、存储过程

CREATE PROCEDURE [dbo].[Users_GetAll]

AS

SELECT * FROM USERS

CREATE PROCEDURE [dbo].[Users_Delete]
@Id int
AS
DELETE FROM Users WHERE Id=@Id

CREATE PROCEDURE [dbo].[Users_GetId]
@Id int
AS

SELECT * FROM USERS WHERE Id = @Id

CREATE PROCEDURE [dbo].[Users_Insert]
@UserName Varchar(50),
@PassWord Varchar(50),
@Sex bit
AS

INSERT INTO USERS(UserName,PassWord,Sex) VALUES(@UserName,@PassWord,@Sex)

CREATE PROCEDURE [dbo].[Users_PageList]
@PageSize int,
@PageCount int output,
@PageNo int ,
@RecordCount int output
AS
SELECT @RecordCount = COUNT(*) FROM Users
IF(@RecordCount%@PageSize = 0)
BEGIN
SET @PageCount = @RecordCount/@PageSize
END
ELSE
BEGIN
SET @PageCount = @RecordCount/@PageSize+1
END
SELECT TOP (@PageSize) * FROM Users WHERE Id NOT IN(SELECT TOP((@PageNo-1)*(@PageSize)) Id FROM Users)
SET NOCOUNT ON

CREATE PROCEDURE [dbo].[Users_Update]
@Id Int,
@UserName Varchar(50),
@PassWord Varchar(50),
@Sex bit
AS

UPDATE USERS SET UserName=@UserName,PassWord=@PassWord,Sex=@Sex WHERE Id=@Id

八、表示层

由于时间关系就不做了,主要还是数据处理层,由于未测试可能会有错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息