您的位置: 首页 > 技术文档 > 网络编程 > Asp.Net的N层模型编程探索
回到列表 asp检测文件编码
用户名:
密 码: 忘记密码
注册会员 游览论坛 论坛帮助
 Asp.Net的N层模型编程探索

作者:5do8 时间: 2006-12-05 文档类型:原创 来自:蓝色理想
浏览统计 total:920 | year:920 | Quarter:920 | Month:920 | Week:176 | today:107

请不要转载,只发布于蓝色理想和我个人blog.

 5do8的Blog:http://www.5do8.com/blog/

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层。

经典论坛讨论
http://bbs.blueidea.com/thread-2699978-1-1.html

出处:蓝色理想
责任编辑:moby

◎进入论坛网络编程版块参加讨论

相关文章 更多相关链接
AJAX请求类
你的编程语言可以这样做吗?
xml留言本
ASP.NET入门数据篇
信息交流模型
作者文章 更多作者文章
WebService服务和ajax使用教程
ASP.NET高级教程—实战篇
FSO操作文件系统
谈PHP生成静态页面
缓存技术详谈—php
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
一个叫做家的地方
FLASH基础开发习惯
web设计95%是排版,5%?
丹麦小景
web前端结构与行为的分离
《NewWebPick》第7期460页专业版
设计先行者王序
Photoshop 制作金属材质文字
Windows Vista 安装过程截图
Fireworks 8 制作指南针
栏目最新 栏目最新列表
FLASH基础开发习惯
web前端结构与行为的分离
Photoshop 制作金属材质文字
Fireworks 8 制作指南针
改善用户体验之密码强度提示
用background 插入flash播放器
网页中嵌入Flash的方法讨论
关于web标准的思考
浅谈关于另类图片的DIY
Vista包装风格的光束制作

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
Don't Make Me Think 第2版
《Flash第一步系列》
《交互设计之路》
《Dreamweaver 从基础到实践》
《色彩管理》
《情感化设计》
《GUI设计禁忌》