对Rails开发方式我也在思考,对动态类型和meta programming已有的一些实践需要调整,也许需要引入一些新的做法。不得不说目前的大部分Rails项目都是少数几个人搞出来,即使那些访问量较大的成功站点不代表其代码量就大到需要很多人编程。所以对大规模的项目如何管理开发没有什么典型的例子。Getting Real涉及一些,不过更多是讲商业上的而不是软工上的实践。
动态语言不使用强制的interface而是用duck type,也就是隐性的接口。这种对象界面间的隐性接口在Rails里被进一步扩大,也就是robbin说的mvc之间的各种约定。显然在这种情况下测试被放在一个更重要的地位上,但是麻烦在于有些约定是不是那么容易测试的(何况Robbin赶时间没写测试。。。)。没有测试就不敢动别人的代码,不小心破坏了某些约定也无知无觉。但是我感觉即使Rails内置了多达三个层次上的测试手段(基本对应MVC三层),面对那些鬼斧神工般的class_eval和monkey patch还是有些力不从心,需要更智能的覆盖测试工具。我一直很喜欢Matz说过的Ruby设计哲学:A sharp knife may cut your fingers, but it's better than a dull one. 想少受伤怎么办呢?长远的办法是磨练使用技术,而直接的就是加强防护带手套咯。至于那些说Ruby过于灵活的就好比说要把刀磨钝点才更安全一样
如何磨练技术和加强防护这是值得长期研究的。
Robbin说的纵向分割困难我也有体会,比如validation和权限系统几乎要贯穿mvc三层,有些情况下MVC要清晰切分确实不如理论上那么容易。从实践角度讲无需追求那种纯洁性,但是软工角度上确实不容易分工。至于横向分割还好吧,对复杂的逻辑我也见过用命名域分割的,虽然这种做法会需要调整route和一些helper,甚至一些plugin。至于一个controller的action太多我认为是设计问题,scaffold给人的一个不好的错觉是误以为一个controller得对应一个model。其实一个controller对应的是一个function,它可以对应一个model或几个model, 一个model也可以被几个controller对应。如果一个controller太臃肿,function可以重新划分一下。
最后Java界积累的那些模式和工具(AOP, IoC之类)哪些能套用哪些不能或哪些需要修改才能适用到Rails上不是简单能分析出来的,估计需要比较长的时间才能融合。这个过程可能非常慢,因为大部分用Rails的人主要关心get job done并且符合自然和美感,大家喜欢谈论是那些美妙的hack而不是书本上的UML。C++/Java的设计模式其实很早在Python和Ruby社团都有人研究,但是始终很少有人刻意强调。Why? 我们不要忘记设计模式是怎么出来的,是人们经过长年累月的使用OO语言(主要是C++)总结出来的那些反复出现的好的设计思路。所以对那些非C++类的语言,一是需要时间积累,二是出现的新模式可能和现在的不同, 三是需要足够大的项目才会促使人思考这些问题,否则就不值得花这个力气。
分享到:
相关推荐
### MFC SDI 制作 Office 2007 样式 Robbin 菜单 #### 一、概述 Microsoft Foundation Classes (MFC) 是一个由微软开发的类库,用于简化 Windows 应用程序的开发过程。本文档旨在介绍如何在 MFC 单文档界面...
JVM的垃圾回收策略对应用性能有直接影响。现代JVM采用分代算法,但过度频繁的垃圾回收或短时间内创建大量对象仍可能影响性能。通过调整JVM参数和使用监控工具,如JProbe,可以优化垃圾回收过程。 为了更好地优化和...
Robbin Fan—运营专业型社区的经验和反思.ppt
robbin_site 是范凯的个人网站 http://robbinfan.com 网站的源码。 标签:robbin
4. **Web服务器缓存**:Web服务器如Nginx、Apache等可以缓存静态文件,减少对应用服务器的压力。 5. **客户端浏览器缓存**:浏览器会缓存网页资源,减少对服务器的请求,提高页面加载速度。 **操作系统缓存** - ...
【ITPUB程序开发版电子杂志第一期】深入解析 ITPUB程序开发版电子杂志首刊,聚焦Java和PHP编程领域,旨在为开发者提供学习和进阶的指引。本期内容涵盖Java学习路径、PHP5的新特性,以及jc20031010的精彩学习笔记。...
Git是分布式版本控制系统,用于跟踪对文件和项目代码的更改。在本文中,我们将深入探讨Git的一些常用命令,这些命令对于日常开发和协作至关重要。 首先,配置Git是使用它的第一步。通过`git config`命令,我们可以...
在软件开发领域,Delphi作为一款强大的RAD(快速应用开发)工具,一直以来都深受开发者喜爱。而Ribbon界面设计则是在微软Office系列软件中广泛应用的一种用户界面风格,它以清晰、直观的布局方式,提升了用户的操作...
【标题】中的“一个基于WPF+C#实现的Ribbon控件库程序代码”表明这是一个使用Windows Presentation Foundation(WPF)...同时,也可以了解到C#和WPF在实际项目中的应用,这对于提升桌面应用开发技能是非常有价值的。
以下是一些关于Windows 8应用的实用技巧: 1) **关机**:由于Windows 8采用了全新的Metro界面,传统的关机按钮不见了。你可以通过快捷键Alt+F4、Win+I选择“设置”然后电源选项,或者在桌面上创建快捷方式(输入`...
JDK是Java开发工具包的基础组件,包含了Java语言的核心库、类库、编译器以及其他用于开发Java应用程序的重要工具。JDK通常包括Java运行环境(JRE)以及开发人员所需的额外工具。 在历史上,JDK主要由Sun公司开发...
了解和掌握RibbonXML的创建和使用是提升Excel应用程序扩展性的重要技能,它可以极大地提高工作效率,特别是在开发企业级解决方案时。通过不断的实践和学习,你能够熟练地利用Open XML来定制符合业务需求的Excel界面...
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、模块化和高度结构化的Web应用程序。这个“Struts2学习资料(强烈推荐)”包含的资源旨在帮助开发者深入理解并熟练掌握Struts2的核心概念和技术。 ...
- 知道什么是SpringCloud - 独立搭建Eureka注册中心 - 独立配置Robbin负载均衡 # 1.系统架构演变 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此不断的演进、...
在实际开发中,`web`文件可能包含了一个示例的Web应用,这个应用可能展示了如何将这些组件集成在一起。通过分析和运行这个应用,开发者可以更直观地理解这些组件的工作原理和整合方式。 总之,Spring Cloud Eureka...
12. Jeff Robbin:作为iTunes的创造者,Robbin还参与了iPod的开发,是乔布斯要求保密的关键人物,目前担任消费者应用程序副总。 13. John Theriault:未提供具体职责,但作为高层之一,他在苹果的运营中也扮演重要...
然后厘清了Web开发中极易混淆的一些重要概念,以及Struts2的核心技术、宏观视图、微观元素、配置元素等,提纲挈领地对Struts2进行了多角度的讲解。核心技术篇首先分析了Struts2中多种具有代表性的设计模式,然后对...
然后厘清了Web开发中极易混淆的一些重要概念,以及Struts2的核心技术、宏观视图、微观元素、配置元素等,提纲挈领地对Struts2进行了多角度的讲解。核心技术篇首先分析了Struts2中多种具有代表性的设计模式,然后对...