最近刚学三层结构,我划分了表示层(winform 公司项目要求),逻辑层,数据访问层,然后加了一个封装数据库表的实体类(不太清楚概念)。
但是我觉得在逻辑层中,几乎是空的,除了创建数据访问层中某个实例,没有其他的操作,然后我在各层之间用DataTable来传递数据,但是我在数据访问层中获得的table是与数据库对应的,这样的话,我在表示层上要怎么处理?比如说,我要隐藏这个数据中的某一个列。需不需要在表示层上定义一个固定的表,然后再用从数据库中获得的数据去填充数据?还是直接将返回的数据设置为datagrid的数据源?
但是我觉得在逻辑层中,几乎是空的,除了创建数据访问层中某个实例,没有其他的操作,然后我在各层之间用DataTable来传递数据,但是我在数据访问层中获得的table是与数据库对应的,这样的话,我在表示层上要怎么处理?比如说,我要隐藏这个数据中的某一个列。需不需要在表示层上定义一个固定的表,然后再用从数据库中获得的数据去填充数据?还是直接将返回的数据设置为datagrid的数据源?
2.数据模式
3.对象模式你用的表模式(NET中用的比较多 应为有DataSet等),实体类在对象模式中用的较多
就是把数据表对象化~ ,其实实体类对你来说没什么意义~
逻辑层 还是有用的~ UI层 和Access 层的逻辑 尽量移到 逻辑层中~ 小项目体现不出 ,业务较多的比较明显(不过大家好像都习惯把逻辑放在存储过程中 呵呵~)
但我不太明白的是,比如说我在数据访问层中做增加、删除、修改和查询操作,对数据库进行操作是使用存储过程的,然后返回datatable给逻辑层,这样的话,我在表现层上是直接显示这个datatable的数据,还是要进行设置呢?比如说我直接设置datagrid的datasource属性为从逻辑层返回的datatable数据,如果这样的话,我要设置这个数据中的某一个列不可见要怎么实现呢?(web中好像datagrid对每个列可以设置可见和不可见,但是我不知道在winform中,datagrid中对每个列的可见性如何设置?)
----------------------
你的意思是把facade做到UI里,不设model,然后把其他的bll都扔到dal里面?这样做性能倒是没问题,不过维护和扩展会很难......
然后在表现层、逻辑层和数据层都引用这个entity层
不知道和您说的model是不是一回事?土问一句:这样的话,是不是查询返回结果时是返回一个对象集合,然后通过IList来绑数据?
然后在表现层、逻辑层和数据层都引用这个entity层
不知道和您说的model是不是一回事?土问一句:这样的话,是不是查询返回结果时是返回一个对象集合,然后通过IList来绑数据?
------------------------------------------
两个差不多是同一个东西.如果抛弃掉逻辑层,可以考虑直接用DataSet了,开发会更快,如果定义了entity class,应该是用的datareader吧,速度会快些,但扩展性的优势因为没有bll化为乌有。如果你用实体类,那么返回的结果是对象集合。
可以根据这个来是否现实相关列!
using System;
namespace CodematicDemo.Model.Folder
{
/// <summary>
/// 实体类cdcurr 。(属性说明自动提取数据库字段的描述信息)
/// </summary>
public class cdcurr
{
public cdcurr()
{}
#region Model
private string _curr;
private string _name;
private decimal _rate;
private decimal _rate1;
private string _ybitem;
private string _yjitem;
private string _ysitem;
private string _yusitem;
private string _yfitem;
/// <summary>
///
/// </summary>
public string curr
{
set{ _curr=value;}
get{return _curr;}
}
/// <summary>
///
/// </summary>
public string name
{
set{ _name=value;}
get{return _name;}
}
/// <summary>
///
/// </summary>
public decimal rate
{
set{ _rate=value;}
get{return _rate;}
}
/// <summary>
///
/// </summary>
public decimal rate1
{
set{ _rate1=value;}
get{return _rate1;}
}
/// <summary>
///
/// </summary>
public string ybitem
{
set{ _ybitem=value;}
get{return _ybitem;}
}
/// <summary>
///
/// </summary>
public string yjitem
{
set{ _yjitem=value;}
get{return _yjitem;}
}
/// <summary>
///
/// </summary>
public string ysitem
{
set{ _ysitem=value;}
get{return _ysitem;}
}
/// <summary>
///
/// </summary>
public string yusitem
{
set{ _yusitem=value;}
get{return _yusitem;}
}
/// <summary>
///
/// </summary>
public string yfitem
{
set{ _yfitem=value;}
get{return _yfitem;}
}
#endregion Model }
}
//生成和数据库的操作using System;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using Maticsoft.DBUtility;//请先添加引用
namespace CodematicDemo.DAL.Folder
{
/// <summary>
/// 数据访问类cdcurr。
/// </summary>
public class cdcurr
{
public cdcurr()
{}
#region 成员方法 /// <summary>
/// 得到最大ID
/// </summary>
public int GetMaxId()
{
return DbHelperSQL.GetMaxID("curr", "cdcurr");
} /// <summary>
/// 是否存在该记录
/// </summary>
public bool Exists(string curr)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select count(1) from cdcurr where curr='"+curr+"'");
return DbHelperSQL.Exists(strSql.ToString());
} /// <summary>
/// 增加一条数据
/// </summary>
public string Add(CodematicDemo.Model.Folder.cdcurr model)
{
//model.curr=GetMaxId();
StringBuilder strSql=new StringBuilder();
strSql.Append("insert into cdcurr(");
strSql.Append("curr,name,rate,rate1,ybitem,yjitem,ysitem,yusitem,yfitem");
strSql.Append(")");
strSql.Append(" values (");
strSql.Append("'"+model.curr+"',");
strSql.Append("'"+model.name+"',");
strSql.Append(""+model.rate+",");
strSql.Append(""+model.rate1+",");
strSql.Append("'"+model.ybitem+"',");
strSql.Append("'"+model.yjitem+"',");
strSql.Append("'"+model.ysitem+"',");
strSql.Append("'"+model.yusitem+"',");
strSql.Append("'"+model.yfitem+"'");
strSql.Append(")");
DbHelperSQL.ExecuteSql(strSql.ToString());
return model.curr;
} /// <summary>
/// 更新一条数据
/// </summary>
public void Update(CodematicDemo.Model.Folder.cdcurr model)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("update cdcurr set ");
strSql.Append("name='"+model.name+"',");
strSql.Append("rate="+model.rate+",");
strSql.Append("rate1="+model.rate1+",");
strSql.Append("ybitem='"+model.ybitem+"',");
strSql.Append("yjitem='"+model.yjitem+"',");
strSql.Append("ysitem='"+model.ysitem+"',");
strSql.Append("yusitem='"+model.yusitem+"',");
strSql.Append("yfitem='"+model.yfitem+"'");
strSql.Append(" where curr='"+model.curr+"'");
DbHelperSQL.ExecuteSql(strSql.ToString());
} /// <summary>
/// 删除一条数据
/// </summary>
public void Delete(string curr)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("delete cdcurr ");
strSql.Append(" where curr='"+curr+"'");
DbHelperSQL.ExecuteSql(strSql.ToString());
} /// <summary>
/// 得到一个对象实体
/// </summary>
public CodematicDemo.Model.Folder.cdcurr GetModel(string curr)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select ");
strSql.Append(" [curr],[name],[rate],[rate1],[ybitem],[yjitem],[ysitem],[yusitem],[yfitem] ");
strSql.Append(" from cdcurr ");
strSql.Append(" where curr='"+curr+"'");
CodematicDemo.Model.Folder.cdcurr model=new CodematicDemo.Model.Folder.cdcurr();
DataSet ds=DbHelperSQL.Query(strSql.ToString());
model.curr=curr;
if(ds.Tables[0].Rows.Count>0)
{
model.name=ds.Tables[0].Rows[0]["name"].ToString();
if(ds.Tables[0].Rows[0]["rate"].ToString()!="")
{
model.rate=decimal.Parse(ds.Tables[0].Rows[0]["rate"].ToString());
}
if(ds.Tables[0].Rows[0]["rate1"].ToString()!="")
{
model.rate1=decimal.Parse(ds.Tables[0].Rows[0]["rate1"].ToString());
}
model.ybitem=ds.Tables[0].Rows[0]["ybitem"].ToString();
model.yjitem=ds.Tables[0].Rows[0]["yjitem"].ToString();
model.ysitem=ds.Tables[0].Rows[0]["ysitem"].ToString();
model.yusitem=ds.Tables[0].Rows[0]["yusitem"].ToString();
model.yfitem=ds.Tables[0].Rows[0]["yfitem"].ToString();
return model;
}
else
{
return null;
}
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select [curr],[name],[rate],[rate1],[ybitem],[yjitem],[ysitem],[yusitem],[yfitem] ");
strSql.Append(" FROM cdcurr ");
if(strWhere.Trim()!="")
{ strSql.Append(" where "+strWhere);
}
return DbHelperSQL.Query(strSql.ToString());
} /*
/// <summary>
/// 分页获取数据列表
/// </summary>
public DataSet GetList(int PageSize,int PageIndex,string strWhere)
{
SqlParameter[] parameters = {
new SqlParameter("@tblName", SqlDbType.VarChar, 255),
new SqlParameter("@fldName", SqlDbType.VarChar, 255),
new SqlParameter("@PageSize", SqlDbType.Int),
new SqlParameter("@PageIndex", SqlDbType.Int),
new SqlParameter("@IsReCount", SqlDbType.Bit),
new SqlParameter("@OrderType", SqlDbType.Bit),
new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
};
parameters[0].Value = "cdcurr";
parameters[1].Value = "curr";
parameters[2].Value = PageSize;
parameters[3].Value = PageIndex;
parameters[4].Value = 0;
parameters[5].Value = 0;
parameters[6].Value = strWhere;
return DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");
}*/ #endregion 成员方法
}}
//bll给前台用
using System;
using System.Data;
using CodematicDemo.Model.Folder;
namespace CodematicDemo.BLL.Folder
{
/// <summary>
/// 业务逻辑类cdcurr 的摘要说明。
/// </summary>
public class cdcurr
{
private readonly CodematicDemo.DAL.Folder.cdcurr dal=new CodematicDemo.DAL.Folder.cdcurr();
public cdcurr()
{}
#region 成员方法 /// <summary>
/// 得到最大ID
/// </summary>
public int GetMaxId()
{
return dal.GetMaxId();
} /// <summary>
/// 是否存在该记录
/// </summary>
public bool Exists(char curr)
{
return dal.Exists(curr);
} /// <summary>
/// 增加一条数据
/// </summary>
public string Add(CodematicDemo.Model.Folder.cdcurr model)
{
return dal.Add(model);
} /// <summary>
/// 更新一条数据
/// </summary>
public void Update(CodematicDemo.Model.Folder.cdcurr model)
{
dal.Update(model);
} /// <summary>
/// 删除一条数据
/// </summary>
public void Delete(char curr)
{
dal.Delete(curr);
} /// <summary>
/// 得到一个对象实体
/// </summary>
public CodematicDemo.Model.Folder.cdcurr GetModel(char curr)
{
return dal.GetModel(curr);
} /// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
return dal.GetList(strWhere);
} /// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetAllList()
{
return dal.GetList("");
} /// <summary>
/// 获得数据列表
/// </summary>
//public DataSet GetList(int PageSize,int PageIndex,string strWhere)
//{
//return dal.GetList(PageSize,PageIndex,strWhere);
//} #endregion 成员方法
}
}