播客 > 设计模式  >  Asp.Net的N层模型编程探索  | 登录  | RSS订阅地址  | Code平台

Asp.Net的N层模型编程探索

  N层,这个滥用的词汇后面有多少含量了,现在已经可以把OOP作为设计模式的最基本的指导思想而使用的人,才能说这个N层,不敢恭维的是,这种开发师(程序员)我遇到的并不多(Tip:本人见识短浅)。我并没有批评多少人的那种get和set方式有问题(其实我也喜欢这两个单词),而是要指出的是这不是精华,应该更进一步的深入。这篇,就是为这个而来的。如果您已经熟悉那些常用的命令,行为和结构模式编程,请止步;同时如果您不确定了解OO的基本概念,请止步。

  更重要的是,我希望能和某些同学讨论一下编程过程处理中的应对措施(不局限在一种语言),先留下一个问题,如果有一天,您的技术总监让你把所有的客户资源单独出来处理(你们的很多应用程序都是有一些会员的),做好用户系统的整合(CWPS),你可能选择Soap处理,在已经很多应用的程序中处理这个逻辑并不容易,在那里处理?采用什么方式?如何处理?对,如果你能确定这些问题你能解决的话而能很好的在以后的应用中熟悉快速安全的使用的话,这篇,已经不需要读了。

  N层,在不同的模型编程中是小有出入的。如
  Win传统编程 :IIS,Win32 -->组件-->数据层
  .Net       :asp.net,客户端-->应用程序处理池(Web服务,.net组件等)-->数据层

  我这里说的 是web应用程序中的(Asp.net)N 层,把这个应用程序全部当作一个模型处理的。

  一般的说了,就是如下的过程:
按此在新窗口浏览图片

  客户端页面全部可以看作是控件,客户端发送请求,控件识别,返回给Receive对象处理,然后规矩请求的类型创建Command类,很可能是纯虚类DetailCMD。注意,这个Command还可以是是个应用程序的接口实例,使用接口IDealPool,不关注细节,知识一些基本处理处理必须的。实例的类是继承了纯虚类的子类。这些实例根据虚拟类,实现创建的细节。

  把接口IDealPool当作一个程序集这样更恰当,因为它实质上可能是一般的类,也可能是Web服务(可以实现Soap)等等.

   我们看一个简单的例子演示一下(某网站导航已经用户信息顶部全局信息),大体上是一个导航条和一些js的调用。

  首先,当然要创建一个控件:Catalogue.ascx
<%@Control Inherits ="Test.Control.Page.Catalogue"   EnableViewState="false"%>
<!--Start Top--> 
客户资料...
<!--Start Catalogue-->
<div id="SiteCatalogue"><asp:PlaceHolder id="RunCat" runat="server"/></div>
<!--End Catalogue-->


这个用户控件可以读取用户信息的(Session和cookies,也可以估计URL输出信息,相当于Receive)具体的导航放在PlaceHolder控件里面,页面继承自 Test.Control.Page.Catalogue 类:

public class Catalogue:UserControl{
    private int _SelectedID;
    public int SelectedID{get{return this._SelectedID;}set{this._SelectedID=value;}}
    protected PlaceHolder RunCat;
    protected override void CreateChildControls(){
        RunCat.Controls.Add(new CatalogueList(SelectedID));
    }

};


  SelectedID是已经选择的栏目,需要输出标记的。这相当于Command,实现的控件是 CatalogueList
public class CatalogueList:Control,INamingContainer{
    System.Web.HttpResponse  Response =  System.Web.HttpContext.Current.Response;
    private int _SelectedID;
    public int SelectedID{get{return this._SelectedID;}set{this._SelectedID=value;}}
    public CatalogueList(int intSelectedID){this.SelectedID=intSelectedID;}
    protected override void CreateChildControls(){
        Data.SqlIO.ISqlIO DBControl = new Data.SqlIO.Catalogue();
        try{
            Repeater WCRepeater=new Repeater();
            ApplyRepeater(WCRepeater);
            WCRepeater.DataSource= DBControl.SelectFromWhere(null,null);//2是按照点击排序
            WCRepeater.DataBind();
            Controls.Add(WCRepeater);
        }catch(Exception e){
            Response.Write(e.Message);
        }
        
    }    
    private void ApplyRepeater(Repeater myRepeater){
        myRepeater.HeaderTemplate=new CatalogueListHeaderTemplate("<ul><li class=\"SiteCatalogueTag\">位置</li>");
        myRepeater.FooterTemplate=new CatalogueListFooterTemplate("</ul>");
        myRepeater.ItemTemplate=new CatalogueListItemTemplate("<li><a href=\"{0}\">{1}</a></li>",this.SelectedID);
    }
};


具体不再罗列了。这里有一行
Data.SqlIO.ISqlIO DBControl = new Data.SqlIO.Catalogue();

我必须说明,ISqlIO是一个接口:

namespace SongLe.Data.SqlIO{
using System;
using System.Data;
using Test;

public interface ISqlIO{
    DataSet SelectFromWhere(string[] Feild,string StrWhere);
};
public abstract class ATableControl:ISqlIO{
    private SqlText.ATableControl DText;
    private Data.Oledb Conn;
    public ATableControl(string strTable){
        switch(strTable.ToLower()){
            case "catalogue":
                DText=new Data.SqlText.Catalogue();
                ;break;
            default:break;
        }

        Conn=new Data.Oledb(App.Config.GetDbConnectionName);
    }

    public DataSet SelectFromWhere(string[] Feild,string StrWhere){
        return Conn.GetDataSet(DText.SelectFromWhere(Feild,StrWhere));
    }
};
public class Catalogue:ATableControl{
    public Catalogue():base("catalogue"){}

    
};
}


  由抽象类ATableControl实现,被细节类Catalogue基础,其中的SQL语句也是这种方式实现的,这是行为编程的思想。因为数据库可能不同,sql语句不同,这样就能动态的调用类和对应的Sql语句。

   然后顺次返回数据到用户。

   实现了N层。

天气:大雨,ccdot发表于2006-12-3 14:48:18,阅读了3031次,共有个5回复.

用词用字要严谨啊~~~

我佛山人 post in 2006-12-6 22:58:54 #1  

嘿嘿嘿。

ccdot post in 2006-12-7 9:58:48 #2  

你好!
看到你的博客,有一个想法,是否可以把你在网站开发以及网页设计的经验技巧和心得总结出来进行出版,给更多的朋友去分享呢?如有兴趣和我联系!
祝好!
李华君
机械工业出版社 北京华章图文信息有限公司
计算机出版中心 专业图书部 二室 主任
电话:(010)88379512 传真:(010)68311602
地址:北京市西城区百万庄南街1号309 邮编:100037 mail:lhj@hzbook.com

出版社编辑 post in 2006-12-12 14:59:33 #3  

谢谢李先生厚爱,我不认为那样做更好,我的人生暂时没打算浪费在写做上,我认为,我有能力创造更高的价值。实现我自己。

ccdot post in 2006-12-12 18:26:36 #4  

用词用字要严谨啊~~~

我佛山人 post in 2006-12-6 22:58:54 #1 

我想说,这个人很久以前就是我的偶像。

niceidea post in 2006-12-13 23:58:43 #5  
  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: