仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 560|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之Community Server专题二:系统布局

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:35:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为各系统的API不同,代码调用API编写程序就会遇到很多不兼容的地方,比如Java改写后的Serv-U就不能在手机上执行,手机的游戏也不能直接在微机上执行。server|系统在举行CS细节剖析的之前,有需要先懂得CS工程(办理计划)的构成,和构成CS工程中项目标布局,本文分为三个部分:1、工程布局2、三层构架3、数据库构架。
1:工程布局

CS工程次要分为4个部分
a:体系底层构架项目CommunityServerComponents、CommunityServerControls,供应给其他项目父类、接口、全局变量、CS体系设置、公用用户自界说控件、用户与权限办理营业逻辑、非常处置等。
b:CommunityServerBlogs、CommunityServerForums、CommunityServerGalleries、CommunityServerDocuments、CommunityServerGuestBook。这些项目都是经由过程承继、挪用全局办法等完成本人的营业逻辑而且笼统出本人的DataProvider,营业逻辑分歧,但项目都是接纳三层布局。
c:UI项目,这里指CommunityServerWeb。该项目中几近不包括逻辑代码,只是复杂的Html与对使用项目中的Skin(Skin是*.ascx文件,但没有联系关系响应的*.cs,大抵能够如许了解:如CommunityServerBlogs中的Skin文件*.ascx相干联的*.cs逻辑代码在CommunityServerBlogs项目中完成,而且不保留在与*.ascx文件不异的目次下,而是与CommunityServerBlogs中其他营业逻辑一同编译为CommunityServer.Blogs.dll)。同时UI项目中还保留了Languages文件与一些设置文件等。
d:DataProvider,今朝只完成了SqlDataProvider,对SQLServer数据库举行操纵。DataProvider实践上是对b部分中实体项目数据库操纵笼统的详细完成。数据操纵的Provider体例带来几个优点,不体贴详细完成、撑持多半据库、有益于团队合作合作等。
2、三层构架
在CommunityServerBlogs、CommunityServerForums、CommunityServerGalleries等几个项目中都接纳了三层构架,以下图:

营业逻辑是交叉在Contorls与Components中,在独自的一个项目中Contorls与Components表现在namespace里,上面以CommunityServerGalleries项目为例报告一下详细项目标三层布局:

为了便于文件的办理,项目中创建了Components与Contorls文件夹分离寄存名字空间为CommunityServer.Galleries.Components与CommunityServer.Galleries.Controls。假如你是一个初学者大概对三层布局不是太懂得,大概良多时分你会对三层构架感应狐疑,实在这个层的观点没有相对的分别界线,更不是用类作为最小的单元。这类分别是绝对的,是一种为编写代码功效的分别。CommunityServerGalleries项目中没有间接编写对数据库的操纵代码,而是利用了Provider的体例把操纵的办法举行笼统:
例:publicabstractHashtableGetGalleries(boolmergePermissions);
笼统后的代码能够和一般办法一样被营业逻辑挪用,因为利用了Provider的体例,使得数据层与营业层之间是松懈耦合的,能够很简单的举行数据库改换(只必要改换对笼统数据操纵类的详细完成办法,而不会影响到营业逻辑层的代码)。
营业逻辑包含几个部分:CommunityServer.Galleries.Components下一切的实体类,这些实体类年夜多半经由过程承继Post、IThread、PermissionBase等在CommunityServerComponents项目中界说过大概声名过的类与接口。CommunityServer.Galleries定名空间下的一些类,这些类用来处置营业逻辑运转过程当中的数据,同时举行缓存和过滤等操纵(过滤操纵是经由过程在CommunityServerComponents项目中的CSApplication.cs类下界说托付与事务完成的,要了解这个历程必要对CS有必定的懂得,后续我会做一个CS中托付与事务的专题)。另有一部分营业逻辑搅浑在CommunityServer.Galleries.Controls定名空间下的一些类中,他们与UI暗示层较为严密,你很难正确的界说他们是属于营业逻辑仍是体现层代码。
CS中暗示层中的类大抵能够分为三部分,1:是必要*.ascx的间接处置用户界面大概用户输出输入的代码,这些类都直接的承继CommunityServerControls项目中的TemplatedWebControl类。2:要举行换肤就少不了利用一些帮助的类,这些类供应一些基本服务,如:找到*.cs文件对应*.ascx地点路径等。3:是不必要*.ascx的用户自界说控件,一样平常承继自.Net供应的WebControls。这些类被放进Controls/Utility文件夹上面。
传统的Asp.netWeb页面计划时在创建*.aspx大概*.ascx城市同时创建一个同名的*.cs文件,用来完成对页面中控件的操纵,页面这个时分就像一个容器。经由过程Codebehind页面在运转时会主动找到对应的类(这个历程怎样完成没有往剖析过,可是我们能够经由过程反射到达一样的效果,同时能够取得更高的天真性)。CS体系中的UI就是经由过程反射寻觅到*.ascx对应的类从而完成响应的UI处置函数,而*.ascx只需坚持称号和内容中控件的ID稳定,详细Html代码怎样改换其实不影响到全部体系的功效,CS体系也恰是经由过程如许的手腕到达换肤的目标,同时到场MasterPage又能够削减Html代码中反复部分。最初Html与CSS款式表的分离你就能够很简单改动网站的皮肤的款式,包含笔墨模样和div的结构了。*.cs与*.ascx文件剥离后网站美工与程序计划职员就真实的分隔了,有益于团队合作,发扬团体专长。
另有一点必需申明:在CS项目中良多*.aspx文件只是一个到场了MasterPage的框架页,乃至是一个甚么都没有的空文件(如多半default.aspx页面),框架文件中嵌进了大批的相似于“<Galleries:GalleryAdminid="GalleryAdmin"runat="server"/>”如许的控件,实在这个控件对应于Skin-GalleryAdmin.ascx的皮肤。假如你能了解到这里,想看分明CS的年夜部分代码应当不会有成绩。
3、数据库构架
先看一下DataProvider模子:

模子中能够看出笼统的DataProvider是与详细的数据库操纵DataProvider分别的,在CS中Components与笼统的DataProvider被编译在一个项目中,而SQLServerDataProvider则被独自的编译出来。优点都能够看到那就是改换分歧的DataProvider笼统完成分歧的数据库操纵,别的这类松懈耦合的体例有益于团队开放。怎样完成如许的DataProvider体例呢(我这里简述一些,详细的请存眷后续的专题)?
先看笼统类 ,笼统类被寄存在响应项目标Providers目次下,以Gallery项目为例子,它的定名空间是CommunityServer.Galleries.Components

全部类都是publicabstractclass,这个很好了解,实在关头的是在“Instance”
部分,在Instance里经由过程挪用CommunityServerComponents项目DataProviders.cs类中的CreateInstance办法初始化一个GalleryDataProvider。
历程是先在Communityserver.config文件中找到
publicstaticreadonlystringGalleryDataProviderName="GalleryDataProvider";
中的“GalleryDataProvider”,这里为:
<addname="GalleryDataProvider"type="CommunityServer.Data.GallerySqlDataProvider,CommunityServer.SqlDataProvider"connectionStringName="SiteSqlServer"databaseOwnerStringName="SiteSqlServerOwner"/>

依据“type”中的内容,使用Type.GetType与Activator.CreateInstance把CommunityServer.SqlDataProvider.dll程序会合对应的CommunityServer.Data.GallerySqlDataProvider类实例化,实例化后相似GalleryDataProvider.Instance().GetGalleries(true)的挪用实在就是间接操纵CommunityServer.SqlDataProvider.dll程序会合CommunityServer.Data.GallerySqlDataProvider类下的

publicoverrideHashtableGetGalleries(boolmergePermissions)办法。这个历程大概对照难了解,可是了解只是工夫成绩。

数据会见层的中与数据库最严密打仗的就是SqlDataProvider(SqlDataProvider是对SQLServer数据库操纵笼统的完成,你也能够对其他数据库举行笼统完成,今朝CS只供应SQLServer完成),在SqlDataProvider里利用的是对存储历程的操纵而没有利用SQLText。在前一片专题中我写过这个做的优点,这里不再多说。次要申明的是对数据的缓存与序化:

缓存:我团体习气是把缓存写在数据层里,而CS是把缓存办理写在营业逻辑层中,并且缓存的数目是很年夜的,如对CommunityServerGalleries项目中的读取单个Gallery办法:

publicstaticGalleryGetGallery(stringapplicationKey,boolcacheable)

一样平常的做法是为这个办法写一个存储历程,然后当无数据操纵的时分从数据库中挪用相干数据,同时依据参数是不是缓存数据,这看起来很好。我也老是以为内存可贵,能少缓存一点就少缓存一点,可是CS的做法是把全体Gallery读进Hashtable,缓存失落!要读取单个Gallery的时分从缓存中找,基本不往管数据库,更不要写存储历程(这却是很便利)。固然了,CS中是对缓存界说了工夫的。工夫到期后缓存就主动被开释了,可是在缓存开释之前新的数据是不会被显现出来的,关于一些更新不是很快的数据集来讲这算是一种对照好的办理计划(在SQL2005中有更好的缓存办理办法,能够在新数据更新时更新缓存)。

数据序化:开辟过CRM的伴侣应当都有体味,良多字段必要预留在数据库中,由于你不懂得利用CRM体系的客户会有一些甚么样的存储请求,如:CRM用户必要保留他客户的岁数,可是CRM体系计划过程当中不成能为如许一个成绩特地的到场这个存储字段,一般的做法是给一些空字段,用户利用的时分响应的对他举行初始化。可是招致的了局就是CRM的数据库惨绝人寰。更可骇的是,假如要举行软件晋级的时分假如必要增加一些底本没有的字段,十分的贫苦,从实体类到数据库操纵的存储历程都必要变动。而数据序化能够办理这个成绩,实在当我第一次看到CS这类做法的时分长短常镇静的:第一,完成了增加字段不必要从头写数据操纵类,更不必要对相干的存储历程举行修正。第二,存储的字段很工致,全体值都保留在两个字段中,如图:


先剖析一下存储的数据,起首是PropertyNames字段,“EnableComments:S:0:4:ModerateComments:S:4:5:EnableRatings:S:9:4:”“EnableComments”实际上是在实体类中界说的一个属性称号,“:”暗示界说终了,“S:0:4”暗示在PropertyValues字段中的字符从0入手下手前面4位属于“EnableComments”的属性值,同理:“S:4:5”暗示,从第四个字符入手下手,前面5个暗示“ModerateComments”的属性值,以此类推能够取得PropertyNames一切的字段的值。(记得在Asp.netForums时数据的序化是用Binary存储的,在CS中改成ntext能够对其举行搜刮,办理序化后的数据搜刮方便的成绩。),关于怎样举行序化等后续专题加以叙说。

在CS的最底层就是数据库和存储历程了,关头的几个表cs_Groups、cs_Sections、cs_Threads和cs_Posts表分离对应于CommuntyServer.Components定名空间下的Group、Section、Thread和Post类,Groups是分组,对应论坛来讲就是“板块组”、版块”、“线索”和“帖子”,对应于Blog就是“博客分组”、“博客”“线索”、“漫笔大概文章”。这个cs_Threads有点难了解,实在它是对响应Section下的Post相干信息的统计与跟踪,如最初回帖工夫、批评总数等等。

下面大抵剖析了CommunityServer项目标系统布局,细节部分会在后续的专题中逐一的剖析。不论怎样说CommunityServer是一个绝对复杂的工程,要完整的解说与体系的剖析还必要良多的笔墨。


我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。
第二个灵魂 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 17:58:59 来自手机 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
若相依 该用户已被删除
板凳
发表于 2015-1-26 13:05:54 来自手机 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
再见西城 该用户已被删除
地板
发表于 2015-2-10 03:08:50 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
小妖女 该用户已被删除
5#
发表于 2015-2-28 18:01:23 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
乐观 该用户已被删除
6#
发表于 2015-3-10 03:43:52 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
莫相离 该用户已被删除
7#
发表于 2015-3-17 04:12:09 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
海妖 该用户已被删除
8#
发表于 2015-3-23 19:10:43 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 16:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表