Stella 知识库--模型类的设计
 -- 系列文章与Stella Forum v2.0搭配使用效果更好 -- 
      
      这里的模型类,在有些地方也叫“业务实体”等名字,一句话,是一些代表了软件世界需求的剥离了行为的类。
      没有了行为,这些类自然就是一些数据的集合,而他们的作用,自然也是传递数据。在分层的架构中,使用模型类来传递数据更加的有意义。
      说了这么多,下面来看为什么要使用这个
      1.方便在层间传递数据
      2.面向对象设计的需要
      
      
      先来看一个例子。
      private void doLogin()
{
//构造一个游客
Model.Guest g=new Stella2.Model.Guest();
g.Name=this.uname.Text;
g.Pwd=this.pwd.Text;
//系统检查出示的凭证
Business.Forum f=new Stella2.Business.Forum();
//返回一个登录用户
Model.User user=f.Login(g);
 if(user==null)
  {
  //错误处理  
  }
  else
  {
  //这里是把当前用户保存到session中
  
  StellaContext.Current.User=user;  
  //其他设置
  }
  }
第一眼看这个程序,基本上就和现实世界中的情况差不多,一个游客过来,出示他的身份凭证(用户名和密码),然后系统检查,如果合法,那就让游客进入,这时
该游客就成了一个登录用户,如果他提供的凭证不合法,那就禁止入内。所有这一切都很自然,这也是面向对象设计的魅力吧。
  Guest和User是用到的两个模型,篇幅限制,我们只看前者的定义吧。
        /// <summary>
/// 游客
/// </summary>
public class Guest
{
private String m_Name; //用户姓名
private String m_Pwd; //用户密码
 ///<summary>
  ///用户姓名
  ///</summary>
  public String Name
  {
  get { return m_Name;}
  set { m_Name = value;}
  }
  ///<summary>
  ///用户输入的明文密码
  ///</summary>
  public String Pwd
  {
  get { return m_Pwd;}
  set { m_Pwd = value;}
  }
  }
想象一下,如果不这样,那我们就需要这样来做验证
Business.Forum f=new Stella2.Business.Forum();
//返回是否合法
bool isLogin=f.Login(this.uname.Text,this.pwd.Text);
if(isLoginl)
{
//繁琐的session,cookie设置
}
else
{
//错误处理
}
想象一下那里的设置都需要做什么,把用户资料一个一个的保存到session,然后设置权限...
更恐怖的是:
Business.Forum f=new Stella2.Business.Forum();
string msg=f.CreateUser(newUser);
这个是用户注册时的代码,如果不使用模型类,那就需要这样
Business.Forum f=new Stella2.Business.Forum();
string msg=f.CreateUser(name,pwd,email,answer,question,qq,homepage,signature,honour,skins);
好长啊……
别忘了,分层结构意味着,这种方法签名至少要出现三次!!!
所以……
模型类的讨论到这基本结束,最后要说的一句,模型类也并不是万能的。如您的数据结构很复杂,比如说有一百多张表……要全部建模型类估计就不是那么容易,这 个时候,或许有更好的选择,那就是:DataSet。从本文的观点看,DataSet的缺点,或许只是不符合面向对象的设计而已。
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号