日期:2014-05-18  浏览次数:20456 次

我理解的三层结构有没有错?
用ASP.NET的C#开发程序,我理解的三层机构是这样的:
程序代码跟HTML分离,即ASPX页面不包含C#代码,这是两层结构;
如果再把数据库操作相关的C#代码独立出来,这就成了三层结构。
分三层的目的是为了方便协同开发,维护和扩展。


------解决方案--------------------
用ASP.NET的C#开发程序,我理解的三层机构是这样的: 
程序代码跟HTML分离,即ASPX页面不包含C#代码,这是两层结构; 
---------------------------
这只是代码分离


如果再把数据库操作相关的C#代码独立出来,这就成了三层结构。 
分三层的目的是为了方便协同开发,维护和扩展。 
-----------------------
这是两层结构
------解决方案--------------------
我看一些书上介绍

是把对数据库的各种操作都写成存储过程,然后调用这些存储过程

这样是不是第三层?与直接在ASP.NET代码中直接操作数据库看相比,这样有什么好处?
------解决方案--------------------
数据持久层,进行数据的持久保存,对任何软件来说除了数据结构不同,其他的都是相同的,如果使用完全面向对象的数据结构,那么这也是相同的
商务逻辑层,封装项目的业务处理规则,不同的项目,业务逻辑是不同的
用户界面层,用户交互接口,aspx页面只能是用户界面层的表面的表面
------解决方案--------------------
使用objectdatasource结合数据绑定控件进行简单三层架构的开发http://blog.csdn.net/srym/archive/2008/04/03/2246926.aspx
------解决方案--------------------
其实不要把三层架构给定死了,之所以用三层架构一个是为了开发时的方便,一个是为了维护时的方便,在DAL里,主要是对数据库的操作,将关于数据库的所有操作封装在一起,在BLL中调用这些操作,打个比方,比如我现在正在做登录模块,我需要向数据库验证用户名跟密码,有两种办法,我直接就写链接数据库的语句,然后操作数据库,验证信息是否合法,但如果我要是数据库的地址换了呢,我是不是得在程序中的每个用到连接字符串的地方去改掉,又或者如果我对查询语句进行了优化,是不是也得找到每一个相似的语句去更改,也许我可以把这个做成一个函数但这不是最好的办法,因为大家是一起开发的,如果都同时操作一个文件,结果可想而知,所以就干脆把所有有关数据库的操作一起放到DAL中,当有操作数据库的请求时,直接调用BLL中的一个实例的方法,比如bool CheckUser(string username,string password),每个人做自己的事,而不需要考虑这个方法是怎么实现的,还有一点就是,如果程序可用的数据库不止一种呢,SQL语句有的也得换吧,难道你在程序中一个一个的判断当前使用的是什么数据库SQLServer还是Oracle又或者MYSQL,一个比较好的做法是将这些关于数据库的操作分别封装到DAL中,即SQLServerDAL,OracleDAL,在此之前设计一个接口,而DAL是对这个接口的实现,这样在BLL中你就不用管到底数据库是用的那种了,你只管调用这个接口,接口的名称是一样的,但在不同的DAL中有不同的实现,最后通过查找配置文件反射来决定到底是用哪个数据库,我说这么多也不知道你理解没有,其实最好去看看代码,就是微软的PetShop4.0,设计的真的很不错,建议你去看看。
------解决方案--------------------
model //模式层,处理业务逻辑,调用控制组件
view //显示层,也就是UI界面
control //控制层,处理具体的逻辑功能,连接数据库等操作
------解决方案--------------------
一个典型的三层结构:

表示层:Login.aspx.cs
逻辑层:Class BusinessLogic
数据层: Class DBManager

Login.aspx.cs:
protected void OnLoginButtonClick(object sender, EventArgs e)
{
if ( BusinessLogic.LoginService( user ))
{
...
}
else
{
...
}

}
------------------------
Class BusinessLogic
{
....
....

public static bool LoginService(object user)
{
return user==null ? false : DBManager.Login(user);
}
....
}

----------------------------------------------------
Class DBManager
{
.......
.......

public static bool Login(object user)
{
DBconnectionStringXXXXXX;
DBReaderXXXXX;
bool isValidUser = false;
try
{
connectionOpenXXXX..
....
....
}
catch
{
.....
}

return isValidUser;
}
}


 
------解决方案--------------------
探讨
model //模式层,处理业务逻辑,调用控制组件
view //显示层,也就是UI界面
control //控制层,处理具体的逻辑功能,连接数据库等操作

好像这个对吧!!!

------解决方案--------------------
探讨
。。。学习
好理论啊。。实际到代码上会怎么样呢。。

------解决方案--------------------