看了一个博客系统的源代码,里面的这种设计觉得挺好,我不懂设计模式,反正用反射处理了,摘录分享下。
public class UserInfo : IComparable<UserInfo>
{
public int CompareTo(UserInfo other)
{
if (this.Displayorder != other.Displayorder)
return this.Displayorder.CompareTo(other.Displayorder);
return this.Id.CompareTo(other.Id);
}
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
/// <summary>
/// 用户名
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
private string _password;
/// <summary>
/// 密码
/// </summary>
public string Password
{
get { return _password; }
set { _password = value; }
}
private int _displayorder;
/// <summary>
/// 排序
/// </summary>
public int Displayorder
{
get { return _displayorder; }
set { _displayorder = value; }
}
//...
}
public interface IUser
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="_userinfo"></param>
/// <returns></returns>
int InsertUser(UserInfo _userinfo);
/// <summary>
/// 修改用户
/// </summary>
/// <param name="_userinfo"></param>
/// <returns></returns>
int UpdateUser(UserInfo _userinfo);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
int DeleteUser(int userID);
/ <summary>
/ 根据用户名和密码获取用户
/ </summary>
/ <param name="userName"></param>
/ <param name="password"></param>
/ <returns></returns>
//UserInfo GetUser(string userName, string password);
/// <summary>
/// 获取全部用户
/// </summary>
/// <returns></returns>
List<UserInfo> GetUserList();
/// <summary>
/// 是否存在
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
bool ExistsUserName(string userName);
}
public class DataAccess
{
private static readonly string path = "Web.Data.Access";
private static object lockHelper = new object();
public static IUser _iuser = null;
/// <summary>
/// 构造函数
/// </summary>
private DataAccess() { }
public static IUser CreateUser()
{
string className = path + ".User";
// return (IUser)Assembly.Load(path).CreateInstance(className);
return CreateInstance<IUser>(_iuser, className);
}
//.....
/// <summary>
/// 实例化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="_instance"></param>
/// <param name="className"></param>
/// <returns></returns>
public static T CreateInstance<T>(T _instance, string className)
{
if (_instance == null)
{
lock (lockHelper)
{
_instance = (T)Assembly.Load(path).CreateInstance(className);
}
}
return _instance;
}
}
public class UserManager
{
private static IUser dao = DataAccess.CreateUser();
/// <summary>
/// 列表
/// </summary>
private static List<UserInfo> _users;
private static object lockHelper = new object();
static UserManager()
{
LoadUser();
}
public static void LoadUser()
{
if (_users == null)
{
lock (lockHelper)
{
_users = dao.GetUserList();
}
}
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="_userinfo"></param>
/// <returns></returns>
public static int InsertUser(UserInfo _userinfo)
{
_userinfo.Id = dao.InsertUser(_userinfo);
_users.Add(_userinfo);
_users.Sort();
return _userinfo.Id;
}
/// <summary>
/// 修改用户
/// </summary>
/// <param name="_userinfo"></param>
/// <returns></returns>
public static int UpdateUser(UserInfo _userinfo)
{
_users.Sort();
return dao.UpdateUser(_userinfo);
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="userId">用户id</param>
public static int DeleteUser(int userId)
{
UserInfo user = GetUser(userId);
if (user != null)
{
_users.Remove(user);
}
return dao.DeleteUser(userId);
}
/// <summary>
/// 获取全部用户
/// </summary>
public static List<UserInfo> GetUserList()
{
return _users;
}
/// <summary>
/// 是否存在
/// </summary>
/// <param name="userName">用户名</param>
public static bool ExistsUserName(string userName)
{
return dao.ExistsUserName(userName);
}
/// <summary>
/// 获取用户
/// </summary>
/// <param name="userId">用户id</param>
public static UserInfo GetUser(int userId)
{
foreach (UserInfo user in _users)
{
if (user.Id == userId)
{
return user;
}
}
return null;
}
/// <summary>
/// 根据用户名获取用户
/// </summary>
/// <param name="userName">用户名</param>
public static UserInfo GetUser(string userName)
{
foreach (UserInfo user in _users)
{
if (user.Name.ToLower() == userName.ToLower())
{
return user;
}
}
return null;
}
/// <summary>
/// 根据用户名和密码获取用户
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <returns></returns>
public static UserInfo GetUser(string userName, string password)
{
foreach (UserInfo user in _users)
{
if (user.Name.ToLower() == userName.ToLower() && user.Password.ToLower() == password.ToLower())
{
return user;
}
}
return null;
}
}
namespace Web.Data.Access
{
public class User
{
/// <summary>
/// 获取全部
/// </summary>
/// <returns></returns>
public List<UserInfo> GetUserList()
{
string cmdText = "select * from [tb_users] order by [displayorder] asc,[userid] asc";
return DataReaderToUserList(SqliteDbHelper.ExecuteReader(cmdText));
}
/// <summary>
/// 数据转换
/// </summary>
/// <param name="read"></param>
/// <returns></returns>
private List<UserInfo> DataReaderToUserList(SqliteDataReader read)
{
List<UserInfo> list = new List<UserInfo>();
while (read.Read())
{
UserInfo _userinfo = new UserInfo();
_userinfo.Id = Convert.ToInt32(read["Id"]);
_userinfo.Name = Convert.ToString(read["Name"]);
_userinfo.Displayorder = Convert.ToInt32(read["Displayorder"]);
list.Add(_userinfo);
}
read.Close();
return list;
}
//.....
}
}