文章标签 ‘framework’

[转载]Jumony入门(一)从这里开始 – Ivony… – 博客园. 首先介绍一下Jumony是什么,Jumony是一个.NET的开源项目,项目主页位于:http://jumony.codeplex.com/,采用LGPL协议发布。 Jumony 试图提供在传统Web开发模型中许多难以解决问题的解决方案。一言蔽之,Jumony的一切基础建立在服务器端的HTML DOM之上。在服务器端将HTML(文件或动态网页技术的输出)按照客户端浏览器的处理方式解析为HTML DOM。操纵和处理HTML DOM,就像我们在客户端用JavaScript干的那些事情一样,不同的是,Jumony可以使你依托强大的.NET Framework,来解决以前用脚本和服务器端技术都难以解决的事情。 下载部署 Jumony现在最稳定的版本是Milestone 1,其下载地址在:http://jumony.codeplex.com/releases/view/51380,对于第一次接触Jumony的朋友来说,建议先下载编译好的DLL,即Binary选项: 点击Binary链接后,会出现Jumony的许可协议(也就是LGPL),点击,开始下载。下载后是一个ZIP文件包,打开后可以看到里面有一个目录Binary,将其随便展开到一个文件夹,例如C:\Jumony。然后清点一下DLL的数量,正常情况下应该包含如下DLL: Ivony.Core.dll,包含基础接口,和一些提高编程体验基础扩展方法 Ivony.Web.Html.dll,Jumony的核心DLL,定义了抽象HTML DOM模型。并提供大量扩展方法来操纵HTML DOM Ivony.Web.Html.Binding.dll,提供数据绑定支持 Ivony.Web.Html.Parser.dll,即Jumony Parser,一个优秀的Html Parser,可以分析HTML文本并创建HTML DOM。 HtmlAgilityPack.dll,HtmlAgilityPack 是另一个开源项目,与Jumony Parser一样,是另一个可以分析HTML文本并创建DOM的工具,理论上Jumony可以使用任何HTML分析器来分析HTML并为自己所用,只要有 合适的Adapter。HtmlAgilityPack的项目主页位于:http://htmlagilitypack.codeplex.com/ 值 得注意的是,当你下载Jumony的源代码包或是直接查看Jumony的源代码时,将不会有HtmlAgilityPack的任何源代码,可以去 HtmlAgilityPack的主页下载。HtmlAgilityPack的授权许可协议与Jumony是不同的,这一点要特别注意。 HtmlAgilityPack.Adapter.dll,HtmlAgilityPack 的适配器,使得HtmlAgilityPack可以当作Jumony的一个分析器来使用。事实上在M1版本中,Jumony Parser甚至不如HtmlAgilityPack成熟。 除了DLL文件外,pdb文件是用于调试的,而xml文件则是智能提示所必须的,建议都不要删除,保留。 然 后我们需要新建一个网站来玩一下,在这之前,首先要确保你的VS至少是2008或以上,Jumony的最低.NET Framework版本要求是3.5。还在2.0的朋友,就只能说一声抱歉了,因为Jumony的选择器和导航扩展方法乃至于绑定支持,都是极度依赖于 LINQ技术的。几乎不可能在.NET Framework 2.0之下提供简单的实现。 那么我们先新建一个网站(Web项目也行,这里用网站作为示范): 这里我把网站建立在了P:\WebSite\JumonyDemo,然后添加引用,找到刚才存放DLL的文件夹,将六个DLL一股脑全部添加引用: 然后我们需要配置web.config文件来添加Jumony的环境支持,在Jumony的下载页面上,有现成的已经配置好的web.config下载: 根据ASP.NET的版本,可以选择不同的web.config下载。然后替换系统默认的web.config即可,我这里默认创建的网站便是ASP.NET 4的,所以我下载ASP.NET 4的web.config,其内容是这样的: httpHandlers和httpModules里面的内容便是新增的,如果你需要在现有的一个web.config文件中增加Jumony的环境配置,则只需要下载ASP.NET 4的web.config文件,然后将这两段拷贝整合即可。 然 后就可以开始测试Jumony环境了,首先确认一下Web服务器使用的是VS自带的默认ASP.NET Development Server还是IIS,如果是使用IIS调试,则建议先换为VS自带的默认服务器,因为Jumony需要截获html和htm文件的请求,这已经在 web.config中配置,但如果使用IIS作为服务器,则还需要配置IIS这两个扩展名的映射,这很麻烦,而我们在这里只是先玩一下Jumony,所 [...]

2010年12月20日09:23 评论关闭

[转载]JavaScriptMVC 3.0 发布 – Java编程 – JavaEye新闻. JavaScriptMVC 是一个功能强大的JavaScript framework,也是一个很棒的JavaScript测试框架。JavaScriptMVC 应用了模型-视图-控制器架构模式,把业务逻辑和表示分离,使得代码更加模块化。通过它可以简化项目的开发,支持流行的各种浏览器。 距JavaScriptMVC 2.0版本发布一个多月,JavaScriptMVC团队今天发布了 3.0 版本。该版本增加了一些 2.0 版本以外的新功能,更主要的是完善了现有的一些功能。 JavaScriptMVC 3.0的新功能包括: FuncUnit – Web 测试框架 Stand Alone Sub Projects – You can download only the tools you need Multi-Page builds – Optimize builds across multiple pages Less and CoffeeScript support – Use Less and CoffeeScript without having [...]

2010年12月8日15:41 评论关闭

[转载]关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性 – Mike的技术博客 – 博客园. 简介 前面一篇<<关于大型ASP.NET应用系统的架构-架构的选择>>写完之后,有一些同仁热心回复,有的是提问题,同 时希望能举一些例子来说明;有的是提建议,希望下一篇写得更详细点;还有的同仁提出不同的观点。感谢大家的参与。会继续努力的。本文将针对层Layer和 排Tier的区别做个辨析。并详细介绍3 Tier / N Tier架构中各排Tier的开发。各Tier的分布式方式。以及为了达到高性能,低延迟,高可伸缩性,需要采取哪些方法和手段。 关于“大型ASP.NET应用系统 ”的概念 意指能支持同时在线用户数目很多的asp.net应用系统。同时在线用户数目要达到多少才算大型。其实也没有一个可以作为共识的定义,个人认为如果一个应用系统能做到7×24小时同时在线用户数不少于5000的,应该可以称为大型应用系统。例如:微软的官网www.microsoft.com,7×24 小时都有来自全球的人访问,有查阅MSDN的,有访问微软博客的,有看微软产品信息的,有逛微软论坛的,等等等等。同时访问微软官网的人太多了,远多于 5000。还有Myspace。 它有总数为几千万的用户,它的同时在线用户数也是相当惊人的。它之所以能服务众多的用户,是因其背后有一个庞大的系统来支撑。 层Layer和排Tier的辨析 这里针对上篇的评论,对层Layer和排Tier做个辨析。上篇提到了分层Layer的架构只能部署在同一台服务上,有同仁在评论里提出不同意 见,说分层的架构也可以部署到多台服务器上的。层Layer是指应用程序各功能在逻辑上的分组,而排Tier表示了应用程序各功能是物理分部在多台计算机 上。层Layer很好理解,就是相同功能的类被逻辑上分到了一组,如:数据存取的类都放到了一块,在同一个名称空间下,在同一个程序集里,商务逻辑的类也 是一样进行分组,各组之间有统一的调用形式。如商务逻辑的类引用数据存取的类,调用其方法,取得返回结果。同时UI层可调用商务逻辑层的类。商务逻辑层的 类既有服务UI层的功能,也有调用数据访问层的功能。是个承上启下的层。这些层都是按照功能来划分的。层Layer是一种逻辑上的划分。排Tier是特指 物理的划分,应用程序的各功能,分别被放在了不同的服务器上,如UI功能单独占用一些服务器,商务逻辑功能占用另外的一些服务器。这两种功能部件之间有服 务器的边界,那么就有专门负责分布式调用的功能部件。如果单从功能逻辑上看,排Tier中也是有层Layer的,只是比传统层Layer的划分多了一些用 于分布式调用的层Layer。排Tier是各层Layer物理分离后,再加入一些负责分布式调用的层Layer才形成的。排Tier和层Layer是有着 联系的。从这个意义上说,排Tier是层Layer物理分离时的特例。有层Layer物理分离的情况下,可以称之为分层的架构,但是实际上这并不准确,因 为排Tier是专门为这个场景定义的。有物理分离,就叫排Tier更准确些。层Layer只要一做物理分离,就转化成了排Tier。 从部署角度试图来区别分层Layer的架构和3 排Tier / N 排Tier的架构。因为物理分离的场景已经被定义成排Tier,那么剩下的就只能是物理不分离的场景了。所以分层Layered架构就特指部署在同一台服 务上的场景(即物理不分离),3 排Tier / N 排Tier架构就特指各层Layer物理分离的场景。分层的架构部署到多台服务器上,理论上是可以的,但是光靠原有的层是不够的,有了服务器的边界之后, 原来在同一个进程里面的方法调用就不再可行,必须新加一些层来做分布式的调用,才能让原来的各层运行起来。等做完这一切,发现这个架构再叫分层 Layered的架构就不合适了,必须得叫3 排Tier / N 排Tier架构才合适。 层Layer和排Tier之间有联系,分层Layered的架构和3排Tier / N 排Tier架构可以互相转化。 整体映象 从前面的描述中可以得知应用系统的每一排Tier都是由许多服务器来完成的。比如UI排Tier,可以是几十个服务器,几百个服务器,甚至是几 千个服务器。具体每一个排Tier所需服务器的数目根据实际的需要来配置。所谓实际的需要就是看这一排Tier服务器的硬件资源利用率。比如CPU, 内存,磁盘读写等情况,如果相当高,就必须加入新的服务器部署该排Tier同样的应用到新服务器上。让新的服务器也能分担些压力。其实这就是要让应用程序 能支持高可伸缩性。在每一个排Tier之间有硬件负载均衡,再其后就是下一个排Tier的服务接口了。在其服务接口之后才是该排Tier的服务。 [...]

2010年12月1日08:42 评论关闭

[转载]软件架构师之AOP – 倪大虾 – 博客园. 如果要做为一名合格的软件架构师,AOP是必须知道的一门技术。那么AOP是什么呢,这就是今天所讨论的内容(也是本人最近一阵子的学习总结,希望大家多多指点)。 AOP,全称Aspect Oriented Programming,中文名称叫面向方面编程,也叫面向切面编程。 在实际项目开发过程中,我们往往会注意到有一些模块/功能,如权限,缓存等,需要存在于软件的各个业务模块中,而这些模块/功能又与业务模块没有任何关系,甚至在设计业务模块时我们完全不用考虑这些模块/功能的存在,但是在开发过程中才发现这些模块/功能会给我们带来无尽的烦恼。因为传统的OOP方法考虑问题的出发点往往是要解决问题的本身和延伸,所以遇到此类情况时传统的OOP方法就很难解决。然而对业务模块和此类模块稍作分析,我们就会发现,其实它们本质是相同的,只是解决的问题不同,对一个软件的关注点不同,如下图所示:   结合自己的经验,由图可知,日志,安全,事务等一类的模块在一个软件项目中的位置,AOP要解决的就是此类问题。 AOP的目标便是对这些“横切关注点”和业务模块解耦,从而提升软件的稳定性,扩展性。 AOP通常包含以下主要概念: 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中横切关注点中一个很好的例子。 连接点(Joinpoint):程序执行过程中明确的点,如方法的调 用或特定的异常被抛出。 通知(Advice):在特定的连接点AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。 切入点(Pointcut):指定一个通知将被引发的一系列连接点 的集合。AOP框架必须允许开发者指定切入点:例如,使用正则表达式。 引入(Introduction):添加方法或字段到通知化类。 接口(IsModified),来简化缓存。 目标对象(Target object):包含连接点的对象。也被用来 引用通知化或代理化对象。 AOP代理: AOP框架创建的对象,包含通知。 织入(Weaving):组装方面创建通知化对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他一些纯 Java AOP框架, 使用运行时织入。 AOP通知类型包括: Around通知: 包围一个连接点的通知,如方法调用。这是最强大的通知。Aroud通知在方法调用前后完成自定义的行为。它们负责选择继续执行连接点或直接返回它们自己的返回值或抛出异常来短路执行。 Before通知: 在一个连接点之前执行的通知,但这个通知 不能阻止流程继续执行到连接点(除非它抛出一个异常)。 Throws通知: 在方法抛出异常时执行的通知。 After returning通知: 在连接点正常完成后执行的通知, 例如,如果一个方法正常返回,没有抛出异常。 Around通知是最通用的通知类型。大部分基于拦截器的AOP框架如Nanning和JBoss4只提供 Around通知。 通常AOP的关注点有以下几方面: 权限(Authentication) 缓存(Cache) 内容传递(Context passing) 错误处理(Error handling) 懒加载(Lazy loading) 调试(Debug) 日志(Log) [...]

2010年8月21日16:31 评论关闭

[转载]一次进销存软件架构的实践2——业务外观层设计 – Rick Carter – 博客园. 1.结构 根据经验可以发现一个界面总是一块一块的,每一块里都是一些基本控件(按钮、文本框或者日期控件等)或者是一个网格控件和树形控件等,如果每块 称为区域,里面的成为项,这样我们可以把界面抽象出两个基类:区域和项,从区域派生出的其他区域分别用来创建编辑区域、网格区域和树形区域,编辑区域中的 项由项这个类中的类型属性通过分支语句去创建。 然后就是各种类型的窗体包含的区域不同,那就再加一个外观的类,它有个属性存放所有的区域,从外观派生出的类定义各种可能的区域。而各区域的位置等信息是由窗体去做的。 这些类还有其他的职责,从外观派生出的类负责各区域的交互等,区域负责数据绑定、固定的事件、数据初始化等,项也有数据绑定的职责,外观类的职责就是多很多了,主要一个职责是运行机制。 事实上我不是一开始就这样思考的,我是希望各种控件等都能够用统一的方式创建、绑定、验证和权限,所以才想到有基类抽象他们,才有了项,但单有项还不能完成一个复杂的界面,所以一步一步的思考就成上面描述的结构了。 2.运行机制 这里简单列下运行时候要做的事。 1.预初始化 一些初始值的设置和合法性验证已决定是否继续等等必须放到窗体打开前的工作。 2.加载数据 通过外观类中的业务对象所实现的接口方法加载数据存储到外观类的dataset类型的数据属性中。 3.初始化权限 设置权限对象中一些与数据库中的数据有关的属性。 4.创建外观 这个时候窗体中的各控件就创建了。 5.初始化验证 同初始化权限,我的验证和权限用的是同样的一些类,我将他们抽象成了相同的东西。参考浅谈MIS系统架构,这块有些复杂但我不准备说了,用到了一个MB.JsEvaluator.dll来完成动态条件表达式。 6.结束初始化 7.绑定数据

2010年8月16日08:36 评论关闭
备案信息:冀ICP备10007948号