今天看到圆子里的文章有一些想法.
    先说以下我的WEB项目是怎么做的:以以前做的航空定票项目举例.
    首先有一个数据库类:这个类里定义了日志的位置和连接字符串.
    namespace PlanOrder
{
 public class DBBase_seatOffice
 {
  protected static string ErrFile=@"D:\DBPlanOrder\DBPlanOrder.log";
  protected static readonly string strConn=System.Configuration.ConfigurationSettings.AppSettings["strConnection"];
  public DBBase_seatOffice()
  {
  }
 }
}
然后是表类:定义了旅客表的数据库接口
[System.Serializable]
public class DBPlanOrderCustomer
 {
  public int ID;
  public Int64 OrdID;
  public string CustomerName;
  public string Nationality;
  public System.Byte sex;
  public int TypeOfID;
  public string IDNO;
  public DBPlanOrderCustomer()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  public DBPlanOrderCustomer(Int64 pOrdID,string pCustomerName,
   string pNationality,System.Byte psex,int pTypeOfID,string pIDNO)
  {
   OrdID=pOrdID;
   CustomerName=pCustomerName;
   Nationality=pNationality;
   sex=psex;
   TypeOfID=pTypeOfID;
   IDNO=pIDNO;
  }
}
然后是表的操作类:
这个类里几乎全部是静态函数,算是应用层
public class DBPlanOrderCustomer_Manage:DBBase_seatOffice
 {
    /*
   * 得到数据集
   */
  public static System.Data.DataSet GetCustomerDs2(int ID)
  {
   try
   {
    string strSQL="Select * from PlanOrderCustomer where ID="+ID.ToString();
    return SqlHelper.ExecuteDataset(strConn,CommandType.Text,strSQL);
   }
   catch(System.Exception e)
   {
    string Err="DBPlanOrderCustomer.GetCustomerDs2:"+e.Message;
    Error.SaveErr(ErrFile,Err);
    return null;
   }
 }
/*
   * 删除定单用户
   */
  public static string PlanOrderCustomer_Del(int ID,int InvokeUser)
  {
   try
   {
    SqlParameter prmID=new SqlParameter("@ID",SqlDbType.Int);
    prmID.Value=ID;
    SqlParameter prmInvokeUser=new SqlParameter("@InVokeUser",SqlDbType.Int);
    prmInvokeUser.Value=InvokeUser;
    SqlParameter prmerr_string=new SqlParameter("@err_string",SqlDbType.NVarChar,500);
    prmerr_string.Direction=System.Data.ParameterDirection.Output;
    SqlHelper.ExecuteNonQuery(strConn,CommandType.StoredProcedure,"sp_PlanOrderCustomer_Edit",
     prmID,prmInvokeUser,prmerr_string);
    return Convert.ToString(prmerr_string.Value);
   }
   catch(System.Exception e)
   {
    string Err="DBPlanOrderCustomer.PlanOrderCustomer_Del:"+e.Message;
    Error.SaveErr(ErrFile,Err);
    return "删除定单用户失败!";
   }
  }
//其他函数
......
.......
}
这样定义数据库层与应用层的好处是:表示层可以很容易的在WEB,WINFORM,WEBSERVICE...之间切换.
缺点:没有考虑数据库的切换,大量采用存储过程,如果数据库换成ORACLE就没有办法了.
但是:一个好的设计真的会在初次编码时使用MSSQL,下次升级的时候变为ORACLE吗??也许真的如JGTM'2004 [MVP] 说的那样:,在这种小程序中你感觉不到太多不妥罢了
觉得需要继续的发掘自己的想法,写一系列东西出来.下次才真正发表圆子里的文章的看法.