第三道菜——深入对象参数

     
    原创者:星火幽蓝                  创建时间: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~

posted @ 2009-10-01 13:45  星火幽蓝  阅读(194)  评论(0)    收藏  举报