zoukankan      html  css  js  c++  java
  • 专访.NET平台上类RoR开源项目Castle[转载]

    Castle Project是一个运行在.NET之上的开源项目,提供了类似流行的Ruby on Rails的MVC (Model-View-Controller)框架。Castle Project自从2003年就开始开发,并在2006年11月发布了1.0 RC2 。在这个项目临近1.0 RC3版本发布之际,我们采访了项目的创始人Hamilton Verissimo,谈到了Castle Project是什么及未来的走向。

    Castle Project 应被任何在.NET平台上使用新方法来创建Web应用程序,感兴趣或特别好奇于实现MVC的应用程序的开发人员予以关注。它试图通过提供一系列工具和框架来让.NET世界的开发变得更令人愉快、开心和富有成效。它提供的这些方法创建出的应用程序更具有良好的层隔离,和良好的设计。

    首先我们来看一下Castle Project到底是什么:

    MicroKernel/Windsor - 这是一个控制反转(Inversion of Control,IoC)容器。实际上,Windsor仅仅是封装了MicroKernel并提供了一些外部的配置信息和代理支持。IoC的核心思想是通过消除直接的代码编写并配置需要依赖的服务,来促进松散耦合设计。

    Castle ActiveRecord - 一个构建于NHibernate之上的ORM。它无需创建XML映射,并简化了NHibernate的一些复杂基础功能。虽然基于基类的使用是标准的方式,但这不是必要的,你可以以不同的模式来使用ActiveRecord,如Repository。

    Castle MonoRail - 一个构建于ASP.NET(不要和ASP.NET中的WebForms混淆)之上的Web框架。它以控制器作为Web应用程序中的主要角色,决定流程,委托到其他层并选取视图来呈现,因此它只关心应用程序的流程逻辑。视图,另一方面也只关注表现逻辑。这是和标准的WebForms模式最大的不同之处。对于那些来自其他平台下的Web框架的人们,这是标准的选择,可以让你完全的控制HTML的生成,而WebForms和它的控件是无法做到的。

    有一些不是顶级的但依然很重要的项目,如DynamicProxy(它允许代理接口和类,被用于好几个开源项目中,如NHibernate和Rhino.Mocks)。NVelocity也是我们为Sourceforge上已关闭的NVelocity提供的一个分支。我们修正了几个错误、添加了一些有意思的特性并进行了优化。

    对于项目提供用于视图呈现技术的看法:

    Castle MonoRail提供了几个不同的视图引擎用于开发呈现到浏览器的视图。NVelocity和Brail随着Castle发布包一起提供,尽管这样,还有一些来自于社区的视图引擎实现,名为AspView的项目和一个基于StringTemplate的项目。

    从这些视图引擎的差异得出的一个事实就是,他们不具有像WebForms那样复杂的页面生命周期。我们也不会试图重新创造一个有状态的不够清晰的Web模型。坚信Web开发是简单的,我们也受益于简单的方式。通过使用模型(Models)和控制器(Controllers )处理数据/状态和流程/应用逻辑,我们就可以依靠视图来作为简单显示内容的角色,由此我们不需要任何复杂的语法,使用if和foreach足够了。但是,内容也能被重用,只须把视图分割到不同的文件中或创建视图组件(ViewComponents)来作为相关逻辑的视图被显示。

    关于自从RC2发布以来的改变:

    ActiveRecord和Windsor有了一些加强和错误修正。MonoRail被极大的改善,添加了缓存支持和JS生成。缓存能在控制器级别配置,最终是利用了ASP.NET的缓存基础功能。JS生成是一种生成可以改变页面的JavaScript代码的方式。通常被用于AJAX中,可以想象一下,你有一个显示了某些内容的页面,用户点击了一个按钮改变了一些东西的状态。这个动作能使用JS生成功能生成JavaScript来更新页面中的元素。

    这个项目明显和Ruby on Rails有些类似,当问到Castle Project是否是因为Ruby on Rails的流行才启动的:

    Castle首先以控制反转(IoC)容器开始的,我大概记得好像在2003年到2004之间。Castle ActiveRecord和MonoRail是在我接触了Rails(2004年,Rails那时还非常年轻)之后才开始的。那时我决定用它(Ruby on Rails)构建一个产品,可当时除了头痛的非标准需求外一无所有。

    另外一方面而言,.NET具有很好且文档齐备的函数库,很多像样的项目在各处都冒了出来。虽然我喜欢Rails,但.NET不只是框架和平台,我会把它用于我参与的各类项目当中。

    而MonoRail开始于Ruby on Rails ActionPack的移植,是从以前来自用户的贡献和想法中分支出来。今天它拥有自己的特征,虽然它的基础和RoR类似,但我们支持的东西RoR不支持,反之亦然。

    但问到Castle Project的未来和Hamilton看到的趋势在那里:

    覆盖企业项目(开发)的所有方面是终极的目标。同时我们会平衡那些提供出来的产品具有一定的预见性,能让你轻松的工作并给你一定生产力的提高。这和提供某些复杂的编辑器或代码生成器工具有所不同,没有了他们你就无法工作。这也就是我们的工作为什么和微软的方式如此的不同。

    Castle Project是一个开源的项目,欢迎各位开发人员参与进来。参与方式包括提交修正错误的补丁,或添加新特性,添加测试用例或文档。参与的第一步是订阅开发邮件列表,并开始参与到讨论之中。

    更多的信息能在Castle Project 网站或在wiki上找到。Hamilton也维护着一个有大量信息的Blog。

    查看英文原文:Catching up with the Castle Project

    更新的功能包括:

    ActiveRecord

    • 不需要扩展ARBase就能支持多数据集
    • 使用新的Castle Validation实现重构验证支持
    • InPlaceConfigurationSource.Build()
    • 添加HqlNamedQuery
    • 大量的错误修正

    DynamicProxy

    • RC3第一次包含DynamicProxy 2(其支持泛型)
    • 比版本1快很多

    MicroKernel/Windsor

    • 支持泛型集合
    • 转而使用DynamicProxy 2
    • 添加一些小功能到IKernel和IWindsorContainer的add/resolve方法中
    • 子容器支持得以提升,但是依旧需要一些检查——你可能会在编译的时候得到警告
    • 添加了一个很简单的计算(Eval)支持,你能进行配置
    • DefaultKernel 和 WindsorContainer现在都实现了IServiceProvider

    MonoRail

    • 添加了缓存(Cache)支持(查看新的Cache属性)
    • 添加IsPost/IsGet/IsPut/IsHead到Controller
    • 添加自动窗体验证(Auto Form Validation)
    • FormHelper接近完美,依然缺乏多条选择的支持
    • 支持一次注册多个视图引擎(可以和混合视图引擎说拜拜了)——但是还不够好,在内部还有很多不协调的情况
    • 添加了少量视图组件
    • 添加测试控制器、视图组件、向导的支持,而无须使用ASP.NET
    • 添加了JS生成器支持,及UpdatePage/UpdatePageTag视图组件
    • Format支持set操作,例如$Form.Select(”price”, [1..100], “”)是用货币格式来显示选择的元素
    • 添加PaginationHelper.CreateCustomPage,其是处理分页最优化的方式
    • 添加DiggStylePagination视图组件,基于Alex Henderson运作
    • 添加了如下成员到SmartDispatcherController(和验证有关):ValidationSummaryPerInstance : IDictionary、GetErrorSummary(对象实例) : ErrorSummary、HasValidationError(对象实例) : bool
    • 添加ViewComponentDetails属性(就像ControllerDetails)
    • 添加ViewComponentParam属性,它可以告知MonoRail把参数作为属性绑定到你的视图组件上——减少了重复的代码规则
    • 添加UrlHelper/UrlBuilder概念

    Aspect#

    • 已经发布

    组件

    • 添加Castle.Validator
    • 添加Castle.DictionaryAdapter——对这个特性还有点拿不准
    • 加强了Binder(这是它的实现的另外一种重写代码)

    其他

    • 创建了using.castleproject.org
    • 创建了api.castleproject.org
    • 在Castle.Services.Transaction和微软System.Transactions之间进行了初步集成
    • 创建了Castle.Core命名空间

    想得到关于Castle Project和这个版本的更多信息,可以访问他们的网站。

    中文原文: http://www.infoq.com/cn/news/2007/09/castleproject

    欢迎大家扫描下面二维码成为我的客户,为你服务和上云

  • 相关阅读:
    Effective Java 第三版——26. 不要使用原始类型
    Effective Java 第三版——25. 将源文件限制为单个顶级类
    Effective Java 第三版——24. 优先考虑静态成员类
    Effective Java 第三版——23. 优先使用类层次而不是标签类
    Effective Java 第三版——22. 接口仅用来定义类型
    Effective Java 第三版——21. 为后代设计接口
    Effective Java 第三版——20. 接口优于抽象类
    Effective Java 第三版——19. 如果使用继承则设计,并文档说明,否则不该使用
    Effective Java 第三版——18. 组合优于继承
    Effective Java 第三版——17. 最小化可变性
  • 原文地址:https://www.cnblogs.com/shanyou/p/900572.html
Copyright © 2011-2022 走看看