第三道菜——深入对象参数
原创者:星火幽蓝 创建时间:2009-10-1
不知各位看到网上广为流传的属性写法,有什么看法,例如:
private int _activeID; //自动编号
public int ActiveID
{
set { _activeID = value; }
get { return _activeID; }
}
这样的写法,跟普普通通的public int ActiveID;字段有什么不一样,我不懂。
我个人觉得属性的写法,可以实现对某个字段读写控制,如果一个字段既可以读又可以写,并且除了对该字段只是读写操作而已,那属性跟字段没啥区别。
为什么要说这些呢?因为我下面就利用了属性来改造我的实体类。
namespace Model
{
public class EmployeeModel
{
private List<SqlParameter> list;
EmployeeModel()
{
list = new List<SqlParameter>();
}
//SqlParameter参数数组
public SqlParameter[] paras
{
get { list.ToArray(); }
}
private string m_EAccount;
public string EAccount
{
get { return m_EAccount; }
set
{
list.Add(new SqlParameter("@EAccount", m_EAccount));
m_EAccount = value;
}
}
private string m_Psw;
public string Psw
{
get { return m_Psw; }
set
{
list.Add(new SqlParameter("@EAccount", m_Psw));
m_Psw = value;
}
}
.....................................(略)
}
}
在数据访问层中,就可以改成:
public int Register(StudentModel model)
{
Database db = new Database();
SqlParameter[] paras =paras;
return db.RunProc("StudentRegister", paras);
}
是不是更方便了呢,呵呵!但是这样改写后,又遇到了一些问题:
(1)这样的实体类跟数据耦合太大了,实体类中用到了SqlParameter数组,这意味着你的实体类这能用在SQL Server数据库。
面向抽象编程,而不能面向具体编程,我们做到了吗?
(2)这样的类,不能序列化,因为SqlParameter不能序列化,所以我们的实体类不能包含SqlParameter对象。
为什么要序列化呢?因为我们在页面中常常需要把实体类的对象保存起来,假如保存在ViewState中,例如:ViewState["user"]=new Model();
这要求Model是可序列化的,不然会出错。所以我们的实体类必须要加上 [Serializable]的标签。
对于这个问题要怎么解决呢,请看下一道菜!O(∩_∩)O~
原创者:星火幽蓝 我的邮箱:nihaowoshijiang@126.com