仓酷云

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

[学习教程] ASP.NET网站制作之C# Aop复杂扫盲及ORM实体类属性拦阻示例仓酷云

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。先说了局景,C#中为何要利用Aop,而我又是在那里利用Aop?
自己只是想拦阻实体类的Set的办法,然后在Set之前,挪用一下别的办法,把值赋给另外一个对象。
而我做的都是在实体类的基类里处置:
好比:
publicclassOrmBase
让一切承继这个基类的实体类都具有Orm操纵功效,再加上一个小小特别的请求处置,属性Set时,必要对另外一对象赋值。
假如说,我如许完成:在OrmBase中能够供应办法,让一切的子类的属性都如许操纵:

publicclassUsers:OrmBase
{
publicint_ID;
publicintID
{
get;
set
{
base.SetXX(value);
}
}

不外每一个实体都如许写,固然是啥没成绩,不外能简化的仍是简化。
在能寻求简便的天下里,固然更喜好简便的写法如:
publicintID{get;set;}
因而,间接在基类里间接拦阻子类set办法,在内里间接挪用SetXX就弄定了,怎样完成呢?又花了一天的工夫查材料研讨进修并完成。
为此,要拦阻,就得折腾Aop:
传统的Aop利用RealProxy,利用十分复杂,可是被忽悠的十分庞大,上面:
1:在要拦阻的类头上加个属性标识,同时承继自ContextBoundObject:
[AopAttribute]
publicclassOrmBase:ContextBoundObject
OK,在基类里加一个,如许一切子类也算被附加了,加上一个标识,就能够被拦阻了,那这个AopAttribute属性是啥?看上面
2:AopAttribute承继代办署理属性标识类,用来挂在要拦阻的类的头上:

classAopAttribute:ProxyAttribute
{
publicoverrideMarshalByRefObjectCreateInstance(TypeserverType)
{
AopProxyrealProxy=newAopProxy(serverType);
returnrealProxy.GetTransparentProxy()asMarshalByRefObject;
}
}

看,内里就两行,十分复杂,两头挪用了承继RealProxy的AopProxy类,AopProxy是甚么,怎样出来的?看上面
3:AopProxy类,就是拦阻的动静处置,先上个复杂版,免的年夜伙看不懂:

classAopProxy:RealProxy
{
publicAopProxy(TypeserverType)
:base(serverType)
{
}
publicoverrideIMessageInvoke(IMessagemsg)
{
//动静拦阻以后,就会实行这里的办法。
}
}

OK,复杂吧,就这么两个类,就能够完成拦阻了,不外重点就是这里拦阻以后的代码,稍为庞大点,一样平常照抄就好了,拦阻的代码以下:

if(msgisIConstructionCallMessage)//假如是机关函数,按本来的体例前往便可。
{
IConstructionCallMessageconstructCallMsg=msgasIConstructionCallMessage;
IConstructionReturnMessageconstructionReturnMessage=this.InitializeServerObject((IConstructionCallMessage)msg);
RealProxy.SetStubData(this,constructionReturnMessage.ReturnValue);
returnconstructionReturnMessage;
}
elseif(msgisIMethodCallMessage)//假如是办法挪用(属性也是办法挪用的一种)
{
IMethodCallMessagecallMsg=msgasIMethodCallMessage;
object[]args=callMsg.Args;
IMessagemessage;
try
{
if(callMsg.MethodName.StartsWith("set_")&&args.Length==1)
{
//这里检测到是set办法,然后应怎样挪用对象的别的办法呢?
}
objecto=callMsg.MethodBase.Invoke(GetUnwrappedServer(),args);
message=newReturnMessage(o,args,args.Length,callMsg.LogicalCallContext,callMsg);
}
catch(Exceptione)
{
message=newReturnMessage(e,callMsg);
}
returnmessage;
}
returnmsg;

为了挪用原始对象的别的办法,我花了近一天的工夫查材料,惋惜收集上并没有响应的信息,多半的人使用,都是引向一个别的办法(一个不必要挪用原始对象的办法)
今朝收集上Aop信息太少,C#的更少,关于怎样猎取原始对象,然后挪用原始对象的,找不到一篇相干文章,我特纠结。
因而,我按传统体例,想尽举措的想猎取到原始对象,再挪用,经由九九八十一招,仍是失利了。
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到net网页编程编译器那么简易。
只想知道 该用户已被删除
沙发
发表于 2015-1-20 18:22:37 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
若相依 该用户已被删除
板凳
发表于 2015-1-21 10:46:34 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
小魔女 该用户已被删除
地板
发表于 2015-1-24 22:30:37 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
admin 该用户已被删除
5#
发表于 2015-1-30 18:37:23 | 只看该作者
那么,ASP.Net有哪些改进呢?
谁可相欹 该用户已被删除
6#
发表于 2015-2-6 14:55:17 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
金色的骷髅 该用户已被删除
7#
发表于 2015-2-8 12:20:11 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
精灵巫婆 该用户已被删除
8#
发表于 2015-2-25 10:46:35 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
小妖女 该用户已被删除
9#
发表于 2015-3-2 01:03:08 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
10#
发表于 2015-3-4 09:05:34 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
深爱那片海 该用户已被删除
11#
发表于 2015-3-4 11:22:27 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
小女巫 该用户已被删除
12#
发表于 2015-3-5 02:56:29 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
再见西城 该用户已被删除
13#
发表于 2015-3-11 10:41:15 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
若天明 该用户已被删除
14#
发表于 2015-3-18 06:41:11 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
蒙在股里 该用户已被删除
15#
发表于 2015-3-25 12:31:26 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 12:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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