首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

新人求帮!asp.net三层架构困惑,小弟我这样算三层结构么

2012-01-22 
新人求帮!asp.net三层架构困惑,我这样算三层结构么?小弟是asp.net新手,最近看了网上的很多关于asp.net三层

新人求帮!asp.net三层架构困惑,我这样算三层结构么?
小弟是asp.net新手,最近看了网上的很多关于asp.net三层结构的资料,petshop又看不懂,还是迷糊的很!自己想了很久,做一个小例子!请个各位大侠看看这算“三层结构”么!

功能是   输入产品名称查寻信息

1、vs2005新建了一个解决方案,添加了2个项目和1个网站,DataLayer(处理数据层),
LogicLayer(处理业务层),WebSite(表现层)。添加好了引用和依赖关系!

2,在DataLayer项目里建一个处理数据库操作的类AccDataBase

  public   class   AccDataBase
        {
                private   string   connectionString   =   ConfigurationManager.AppSettings[ "AccessConntionString "];
             
                private   OleDbConnection   myConn;
                private   OleDbCommand   myComm;
                private   OleDbDataReader   myReader;

                public   void   Open()
                {
                        myConn   =   new   OleDbConnection(connectionString);
                        myConn.Open();
                }
                public   OleDbDataReader   GetReader(string   sqlStr)
                {
                        Open();
                        myComm   =   new   OleDbCommand(sqlStr,   myConn);
                        myReader   =   myComm.ExecuteReader(CommandBehavior.CloseConnection);
                        return   myReader;
                }              
}


3,在业务曾LogicLayer项目里建一个类Goods

  public   class   Goods
        {
                public   OleDbDataReader   GetGoodsInfor(string   keyworks)
                {
                        AccDataBase   ADB   =   new   AccDataBase();                                     OleDbDataReader   myReader;
                        myReader   =   ADB.GetReader( "select   *   from   TbGoods   where   name   = ' "   +   keyworks+ " ' ");//===========调用了数据层

                        return   myReader;
                }
        }

4,在表现层WebSite的default.aspx.cs按钮事件里


                Goods   goods=   new   Goods();
                OleDbDataReader   myReader   =   goods.GetGoodsInfor(TextBox1.Text);//=调用了业务曾


                if   (myReader.Read())
                {
                        Response.Write(myReader[0].ToString()   +   myReader[1].ToString()...);//这里显示出来
                }
                myReader.Close();


5、完了

以前我都是将DataLayer放在App_Code的类里的,然后在default.aspx.cs里就直接将sql语句传给它,就返回DataReader,多简单明了。为什么要多出个业务层!?

我不明白asp.net三层架构的思想!   希望哪位高人醍醐灌顶一下




[解决办法]
楼主的程序算是三层了。不要为分层而分层,分层会带来性能的损耗。但是如果一个项目大了就需要分层了。要在开发效率和效率直接找一个平衡点。
[解决办法]
你这个怎么算三层啊.
AccDataBase只能算是一个数据操作类
业务曾LogicLayer项目里建一个类Goods,你做的是数据层的事情.
表现层WebSite的default.aspx.cs按钮事件里你做了部分的业务处理层的事情
你这个只能算是比后台写代码稍微好点,建议楼主看看PETSHOP,用个简单的三层就知道了
DAL BLL UI
[解决办法]
LogicLayer 居然在拼 SQL —— SQL 属于数据访问层!

LogicLayer 应关注业务逻辑的处理。

三层仅仅是一个逻辑三层,真正实现时很可能多于三个 Project。

有时间多读读 .NET 示例程序吧!

不读代码永远不会写代码——这是俺做开发两年来的经验总结,信不信由你,哈
[解决办法]
public class Goods
{
public OleDbDataReader .....
————————————————————————————————————————
仅看这开头两行就没有面向对象设计的味道了。

没有面向对象风格代码习惯做支持,谈分层就是无本之木永远争论不清了。
[解决办法]
对于三层架构一直没有一个统一的模式,尤其是业务罗基层究竟做什么.网上关于这个话题很多,可以搜搜.三层架构是逻辑关系,不一定对应3个项目(或网站).而且对于小项目用三层架构不一定便利.应该根据实际情况而定.
[解决办法]
分层的思想不是三言两语就能解释清楚的,从你的代码来看,完全没有一点分层的概念。
看看你所谓的表现层:
Response.Write(myReader[0].ToString() + myReader[1].ToString()...);
这里的myReader[0],[1] 表示什么意思?如果用分层的思想,这里是不应该这样调用的,或者说你在表现层,不应该关心数据库里面有哪些表,哪些字段,每个字段表示什么意思。
考虑你这一句:OleDbDataReader myReader = goods.GetGoodsInfor(TextBox1.Text);
他是获得一个产品的信息,但是产品有哪些信息?你如果只给表现层的编程人员提供一个datareader,这显然是不够的,他就必须去弄清楚这个datareader每个值的含义,那就必须要去看数据库的表结构,如果以后表结构一旦发生变化,那可能myreader[0]的含义也会发生变化,这样表现层也必须做出相应的修改,这是不符合分层逻辑的。
那么该如何做呢?
你可以专门编写一个产品类 :GoodInfo
这个类包含了产品的一些基本信息,比如编号,名称,价格等等
public class GoodInfo
{
public int ID;
public string Name;
public decimal Price;
}
//注意这里只是个示例,不是实际代码
然后 goods.GetGoodsInfo 这个方法就可以用来返回一个 GoodInfo 的对象
public GoodInfo GetGoodsInfo(int goodId);
这样表现层的编程人员就不需要关心数据库的结构了
你的代码就可以改成:
Goods goods= new Goods();
GoodInfo goodInfo = goods.GetGoodsInfo(id);
Response.Write(goodInfo.ID+goodInfo.Name+goodInfo.Price);
这样就可以帮助表现层的开发人员脱离数据库的限制,达到分层的目的。
时间问题,就不多说了,希望可以在这里起个抛转引玉的作用,有兴趣的可以一起研究,我的email:reman83@gmail.com
[解决办法]
you can, i think,read this book: < <export C# business object> > ;

---------------------------------------------
EMail:bdbox@163.com 请给我一个与您交流的机会!

热点排行