在几个朋友给的源码中,有个项目是Model,我不知道该怎么叫他,看一些资料称为《业务实体》,他把数据表结合业务规则抽象为类,表中的字段都抽象为属性,我们对类及其类的属性操作,最终结果是操作数据库。
我的问题是:既然该项目实现了这些具体功能,比如插入数据,我可以调用该类的构造函数,应该就可以实现插入功能,为什么所有代码更本不是按我理解的意思操作?代码如下:
《model》代码:
public class UserData
{
private string _userID;//登陆ID
private string _password;//密码
/// <summary>
/// 构造函数
/// </summary>
/// <param name="userID">登陆ID</param>
/// <param name="password">密码</param>
public UserData(string userID,string password)
{
_userID = userID;
_password = password;
}
/// <summary>
/// 登陆ID
/// </summary>
public string UserID
{
get{return _userID;}
set{_userID = value;}
} /// <summary>
/// 密码
/// </summary>
public string Password
{
get{return _password;}
set{_password = value;}
}
}
《页面调用》:
1,页面传值
INSERT(userID,password);
2。调用MODEL
INSERT(UserData userdata);
3。public bool Insert(UserData userdata)
{
//
//创建参数数组并赋值
//
SqlParameter[] parms = new SqlParameter[] {
new SqlParameter(变量1,SqlDbType.NVarChar,100),
new SqlParameter(变量2,SqlDbType.NVarChar,100)}
parms[0].Value = userdata.userID;
parms[1].Value = userdata.password;
bool ExecuteNonQuery(连接串,类型,parms )
——————————————————————————————————
以上的代码在第二步的时候不是通过属性的set写入数据库成功了吗?为什么还有执行第三步??
我的问题是:既然该项目实现了这些具体功能,比如插入数据,我可以调用该类的构造函数,应该就可以实现插入功能,为什么所有代码更本不是按我理解的意思操作?代码如下:
《model》代码:
public class UserData
{
private string _userID;//登陆ID
private string _password;//密码
/// <summary>
/// 构造函数
/// </summary>
/// <param name="userID">登陆ID</param>
/// <param name="password">密码</param>
public UserData(string userID,string password)
{
_userID = userID;
_password = password;
}
/// <summary>
/// 登陆ID
/// </summary>
public string UserID
{
get{return _userID;}
set{_userID = value;}
} /// <summary>
/// 密码
/// </summary>
public string Password
{
get{return _password;}
set{_password = value;}
}
}
《页面调用》:
1,页面传值
INSERT(userID,password);
2。调用MODEL
INSERT(UserData userdata);
3。public bool Insert(UserData userdata)
{
//
//创建参数数组并赋值
//
SqlParameter[] parms = new SqlParameter[] {
new SqlParameter(变量1,SqlDbType.NVarChar,100),
new SqlParameter(变量2,SqlDbType.NVarChar,100)}
parms[0].Value = userdata.userID;
parms[1].Value = userdata.password;
bool ExecuteNonQuery(连接串,类型,parms )
——————————————————————————————————
以上的代码在第二步的时候不是通过属性的set写入数据库成功了吗?为什么还有执行第三步??
解决方案 »
- SQL Server2008 是否支持缓存依赖SqlCacheDependency..
- Asp.Net定时发送邮件的问题.
- 连接数据库后有点问题。
- 有没有人听说过悦商网
- 动态创建的UserControl无法绑定数据源
- VS2005中怎么改变控件的默认事件,比如说双击TextBox默认是TextChanged,我想改成单击事件
- 请问用SqlDataAdapter更新数据时怎样不插入数据库已有的数据
- 关于使用installshield创建web程序安装包的问题,
- 为什么我新买的移动硬盘在我的XP上不能被发现???
- 请问shp是什么文件格式
- 绝对难题!!! 高手进!!! 页面传递多个参数问题!!!
- 除了WebHtmlEditor,还有什么好的在线编辑器吗
第一步:建立业务实体类第二步:在BLL层调用DAL层的具体数据插入方法(即Insert()方法),传入的参数是一个UserData实体第三步:你看到的Insert()方法是在DAL(数据访问层)定义的,进行ADO.NET数据库操作
你在set属性的时候,只是构造了一个UserData实体,并没有向数据库执行写入操作,必须调用具体的DAL层方法才可以实现
那意思是我可以直接传页面的具体数值值到DAL(数据访问层),那Model还有什么用处?那不是成了为了实现模式而建立多余的代码?
使用Model,这样才是传说中的面向对象的程序设计 ^o^我们要实现的是业务逻辑与数据操作的完全分离,你可以看一下PetShop,为了实现业务逻辑和数据操作的分离,PetShop特意引入了接口层IDAL
你当然可以不使用model,甚至可以在页面中直接写入SQL语句进行数据库操作,效果都是可以实现的但我们要考虑更多的是扩展性和可维护性比如,今天的的项目使用的是SQL Server数据库,你就直接把对SQL Server操作的语句写在页面当中了。明天,客户要求,全部改用Orcale~~~~哈哈,你就完了,全部重新做吧
弱弱的问一句,PetShop是个什么系统,那里可以得到?:(俺是学习中的菜鸟
而引入了接口层之后,你可以为不同的数据库产品编写一个数据访问层(DAL),当客户说要改用Orcale的时候,你需要的只是编写一个Orcale专用的DAL层组件,继承IDAL层接口而已,而上层的业务逻辑由于调用的是IDAL接口进行数据操作,所以不会受到任何影响!
PetShop是微软提供的一个演示程序,用于演示其标准的ASP.NET应用程序体系结构现在最新的版本是PetShop4.0你可以在http://download.microsoft.com/download/8/0/1/801ff297-aea6-46b9-8e11-810df5df1032/Microsoft%20.NET%20Pet%20Shop%204.0.msi下载或者google一下petshop,资料很多
fattycat老师,3QY.