上周天傍晚看到这篇的时候发觉分析的还挺仔细的,就花了一点时间把它转翻成简体中文的。早读君也第一次做这个事情,要是在转翻的过程中专业名词用的不对,还请提出来。本文得到原翻作者@benzwjian的授权。 正文从这开始~ 现在很多前端工程师的招聘都要求有开发过大型项目(Large-Scale Application, LSA)的经验,我很好奇到底LSA的定义是什么呢? Addy Osmani刚好有一片文章就在讲他所认为的LSA的定义以其架构和经实现:“Patterns For Large-Scale Java Application Architecture”。Addy Osmani在Google担任前端工程师,是一位很有名的Java开发者。他所描述的LSA应该具备的东西,在我的工作项目里,或多或少有一些影子在,我想我做的东西应该也算符合LSA的定义吧。接下来我就开始翻译这篇文章,分享给前端的开发者们。 本文翻译取得Addy Osmani的同意,全文如下: 什么是“Large-Scale” Java Application? 在开始之前,我们先来定义 Large-Scale Java application 中,“ Large-Scale”所代表的是什么意思?这个问题就算是多年经验的开发者也很难说清楚,而且每个人的见解都相当主观。 我曾问几个开发者试图从中得到答案:有人说是应用程序的代码超过100,000行,有人说是java文件大小超过1MB。其实都不太正确,程序代码越多不代表应用越复杂,这些100,000行程序可能都是无关紧要的。 我自己的定义可能不被接受,但我相信他却是反映大型应用应该有的样子: In my view, large-scale Java apps are non-trivial applications requiring significant developer effort to maintain, where most heavy lifting of data manipulation and display falls to the browser. 先检查你目前的架构 我想强调的一点-我遇到过一些做近似大型应用的开发者说:“在我现在的中型应用项目中将,有一些模式或实现应该可以套用在大型应用项目中吧?”。我觉得不要把他看作理所当然,因为在大型应用的开发里,有些架构设计时需要花时间去想想,我会简单的说明为什么你值得花一点点时间去好好计划你的大型项目。 大部分的Java开发者可能会使用下面的组件去构建出程序的架构: custom widgets models views controllers templates libraries/toolkits an application core 相关资料 Rebecca Murphey — Structuring Java Applications Peter Michaux — MVC Architecture For Java Applications StackOverflow — A discussion on modern MVC frameworks Doug Neiner — Stateful Plugins and the Widget Factory 将应用程序拆分成许多小组件是很好的做法,但存在某些潜在的问题值得思考: 1.模块可重用性有多少 一个模块是否可以独立存在?如果在你的项目里随便找一个模块,可否让我直接放在一个新的页面里就可以开始运行了呢?你也许会质疑这样做背后的理由,不过我还是建议你得考虑未来:如果你的公司决定多个应用里都加入某个相同的功能,是否可以很简单完成呢?例如,有人说:“我们的用户很喜欢我们开发的聊天功能,我们把这个功能也放到新的开发的协作应用上吧”。 2.有多少模块需要依赖其他模块呢? 他们是很紧密地依赖着吗?从模块的粒度来看,我知道不太可能会有个模块完全不依赖其他的模块。但在功能粒度级别上,一个功能可以是几个模块所构成,而且不需要依赖于任何模块。 3.如果某模块失效了,你的应用还能运行吗? 假设你正在开发一个像Gmail的应用,而你的webmail模块突然失去作用,这个时候其他部分的UI展示或其他功能,例如聊天模块,必须还能运行正常。另外,我曾经提过一种动态加载模块机制,例如在Gmail这个例子里,当应用初始化启动后,前提是代码是不包含聊天模块,但如果用户这个时候想到用聊天功能时,应用才会去开始加载这个聊天模块的代码来执行,而且不影响到其他功能。 4.可以很容易地测试每个模块吗? 当一个模块处于百万数量级的用户在使用,它很可能就会被重复利用在其他的应用里,这时候我们必须对他做完整的测试。当模块独立存在时,需要被测试,当模块被引用到应用里,更需要被测试,这样才可保证这模块的健壮。 想远一点 当在开发你的大型应用架构时,很重要的一点是多想远一点,不知是一个月或一年后,可能是更远。我知道很难猜测未来的发展,但还是有一些空间可以想象。 (责任编辑:本港台直播) |