㈠ 2020年Web前端工程师的学习建议
今天小编要跟大家分享的文章是关于2020年web前端工程师的学习建议。毫无疑问,前端开发将成为2020年技术领域最热门的学科之一。
以前,前端空间的开发人员只要了解一些HTML,CSS,也许还有jQuery来渣瞎创建交互式网站,就足够了。但是今天,他们面临着广泛且不断变化的开发技能生态系统;掌握的工具,库和框架;并且需要不断投资于个人教育。
最近几年,我们使用JavaScript为主要的Web应用程序提供了强大的新库和框架,例如ReactJS,VueJS和Svelte。想要学习web前端知识的小伙伴们来和小编一起看一看吧!
1.框架
2020年,我们可能会看到Facebook的ReactJS与社区驱动的VueJS之间的对决。目前,React在GitHub上拥有140,000星,而Vue则拥有153,000星。例如,Angular只有53,000个恒星。
在2019年,React(蓝线),Vue(红线),Angular(黄线)和Svelte(绿线)的搜索量支持此假设-Vue略高于React。Angular在搜索量方面无法跟上,Svelte在此比较中绝对不起作用。
因此,对于2020年,使用或希望使用JavaScript框架的前端开发人员应将React和Vue作为他们的主要选择。如果您正在处理大型企业项目,则Angular是有效的选择。
2.静态网站生成器
静态站点生成器结合了服务器端渲染的功能(对于SEO非常重要,而且还具有初始加载时间)和单页应用程序。
如今,许多项目即使不需要服务器端渲染也选择了SSG,因为Next或Nuxt之类的解决方案具有便捷的功能,例如模块捆绑器,集成测试运行器等。
如果您认真对待前端开发,则应仔细研究以下项目,并尝试获得一些实践经验:
·Next(基于React)
·Nuxt(基于Vue)
·Gatsby(基于React)
·Gridsome(基于Vue)
3.JAMstack
术语JAMstack代表JavaScript(在客户端上运行-例如,React,Vue或VanillaJS),API(服务器端进程通过JavaScript通过HTTPS抽象并访问)和标记(在部署时预先构建的模板标记)。。
这是一种构建网站和应用程序以提高性能的方法-降低扩展成本,提供更高的安全性并提供更好的开发人员体验。
尽管这些术语本身并不是什么新鲜事物,但它们的共同点是相同的-它们并不依赖于Web服务器。因此,依赖于Ruby或Node.js后端或使用服务器端CMS(例如Drupal或WordPress)构建的网站的单片应用程序不是使用JAMstack构建的。
如果要使用JAMstack,有一些最佳实践:
整个项目都在CDN上提供服务
由于不需要服务器,因此整个项目都可以通过CDN进行服务,从而释放出无与伦比的速度和性能。
一切都存在于在Git中
每个人都应该能够从Git存储库克隆整个项目,而无需数据库或复杂的设置。
自动化构建
您可以完美地自动构建,因为所有标记都是预先构建的,例如使用webhooks或云服务。
原子部署
为了通过在大型项目中重新部署数百或数千个文件来避免出现不一致的状态,原子部署将等待所有文件上传,然后再进行更改。
即时缓存失效
当站点上线时,必须确保CDN可以处理即时缓存清除,以使更改可见。
像Netlify或Zeit这样的着名主机都支持JAMstack应用程序,大公司使用它们为用户提供出色的体验。
4.PWA
渐进式Web应用程序(PWA)无疑将在2020年成为现实。越来哗漏越多的公司选择PWA取代本机应用程序,以便为用户提供丰富的移动体验。
PWA可靠(即时加载,无需连接互联网即可工作),快速(流畅的动画,对用户交互的快速响应)和吸引人的体验(本机应用程序的感觉,出色的用户体验)。
他们利用服务人员提供脱机功能,并利用Web应用清单文件提供全屏体验。
构建渐进式Web应用程序的原因有:
·可以从浏览器添加如芦空到用户的主屏幕
·即使没有互联网也能正常工作
·支持网络推送通知以增强用户参与度
·利用Google的Lighthouse功能
5.GraphQL
GraphQL是当前最热门的主题之一,并且绝对是您在2020年需要学习或改进的东西。
尽管REST通过提供无状态服务器之类的出色概念一直被认为是设计WebAPI的事实上的标准,但在跟上快速变化的客户端访问RESTful
API时,RESTfulAPI却越来越不灵活。
GraphQL由Facebook开发,旨在解决开发人员在处理RestfulAPI时面临的确切问题。
使用RESTAPI,开发人员可以通过从具有特定目的的多个端点(例如/users/端点或/tours//
location端点)中获取数据来收集数据。
使用GraphQL,这将以不同的方式工作。开发人员会将查询与他们的数据要求一起发送到GraphQL服务器。然后,服务器将返回带有所有相应数据的JSON对象。
使用GraphQL的另一个好处是它使用了强类型系统。GraphQL服务器上的所有内容都是使用GraphQL模式定义语言(SDL)通过模式定义的。创建架构后,前端开发人员和后端开发人员都可以彼此独立地工作,因为他们知道已定义的数据结构。
6.代码编辑器/IDE
与2019年一样,微软的VSCode将在2020年成为大多数前端工程师的第一编辑器。
它提供几乎类似于IDE的功能,例如代码自动完成和语法高亮显示,并且可以通过其扩展市场进行几乎无限的扩展。
特别是市场使VSCode如此出色。以下是您作为前端开发人员的一些出色扩展:
·JavaScript(ES6)代码段
·npm
·beautify
·CSS速览
·ESLint
·LiveSass编译器
·Chrome调试器
这些是很酷的例子。在VSCode中还有很多可以发现的地方,因此,如果您尚未使用它,我建议您尝试一下。
7.测试
未经测试的代码不应找到它的生产方式。
在您的个人项目中似乎没有任何测试似乎很方便,但在商业和企业环境中工作时必须进行测试。因此,对于任何开发人员而言,最好尽可能将测试集成到开发工作流程中。
可以区分以下测试用例:
单元测试
隔离测试单个组件或功能。
整合测试
测试组件之间的交互。
端到端测试
在浏览器中测试功能完善的用户流。
有更多测试方法,例如手动测试,快照测试等。如果您想升任高级开发人员职位或打算在拥有某些开发标准的大型公司工作,则应尝试进行测试技能。
8.干净的代码
能够编写干净的代码是一项很棒的技能,许多组织都对此提出了很高的要求。如果您想从开发人员的位置升级为高级开发人员的位置,则应真正学习干净代码的概念。
简洁的代码应优雅且易于阅读。它应该重点突出,您应该注意这一点。所有测试均以纯净代码运行。它们不应包含重复项,应尽量减少使用实体(例如类,方法和函数)。
干净代码开发人员应做的一些事情是:
·为变量,类,方法和函数创建有意义的名称
·函数应该很小并且参数应尽可能少
·根本不需要注释-代码应该说明一切
如果您想了解有关干净代码检查的更多信息,请阅读RobertC.Martin的书籍和帖子。
9.Git
毫无疑问,Git是当今Web开发中版本控制的标准。对于每个前端工程师而言,了解基本的Git概念和工作流程以在各种规模的团队中有效工作都是非常重要的。
这是您应该知道的一些流行的Git命令:
gitconfig
gitinit
gitclone
gitstatus
gitadd
gitcommit
gitpush
gitpull
gitbranch
知道这些命令可以提高工作效率总是很高兴的,但是前端工程师还应该学习Git的基本概念。
10.软技能
对于开发人员来说,经常被忽视但确实非常重要的是获得软技能。
虽然有助于了解事物的技术方面,但了解如何在团队中进行交流也同样重要。如果您对技术职业很认真,并且/或者打算升任高级职位,则应该从事以下软技能方面的工作:
同情
沟通
团队合作
平易近人和乐于助人
忍耐
开放的思想
解决问题
责任心
创造力
时间管理
永远记住:开发人员最重要的交付物是高级开发人员。(提升你自己)
结论
在本文中,小编向您展示了前端开发人员应在2020年尝试学习,改进或掌握的10项重要内容。想要了解更多web前端相关知识记得关注北大青鸟web前端培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的web前端工程师。
㈡ 成为JavaWeb工程师要掌握哪些技能
前端领域发展很快,各种新技术新思想不断涌现,这是一个好现象。
但是前端发展太快也带来一些问题,比如有同学就问到我究竟应该学些什么,Angular.js、React、Node.js、ES6、ES7、CoffeeScript、TypeScript??似乎永远有太多东西需要学习,有些东西好像还没学明白就被另一些新的技术取代而“过时了”。
1
我们需要知道前端工程师是做什么?
前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。
从狭义上讲,前端工程师使用HTML、CSS、javaScript等专业技能和工具将产品UI设计稿实现成网站产品,涵盖用户PC端、移动端网页,处理视觉和交互问题。
从广义上来讲,所有用户终端产品与视觉和交互有关的部分,都是前端工程师的专业领域。
2
那么,前端工程师需要什么样的知识和技能?
有人说前端工程师的技术栈是这样的:
还有人说是这样的:
实际上前端工程师最核心的技能还是:
在一个典型的互联网公司的产品研发流程中,前端工程师和其他角色的关系大致上是这样的:
前端是最接近产品和设计的工程师,起到衔接产品和技术的作用,前端为用户可以看到的部分负责,所以也是最接近用户的工程师。
在多终端的时代,如果一个产品同时支持PC、移动端,前端工程师还需要和更多的角色打交道:
JavaScript对于前端是最重要的技能,所以优高羡秀的前端工程师要有扎实的JavaScript基本功。
而JavaScript这门编程语言也是目前程序设计领域炙手可热的宠儿,如今的它不仅仅只是用来开发Web,还可以用在各个方面。
JavaScript可以用在“树莓派”这类智能硬件芯片开发
前端工程师也是软件工程师,所以软件工程师的基础知识也是非常重要的,这些基础知识包括:
数学
计算机体系
操作系统
数据结构和算法
编译原理
HTML和CSS也是前端工程师非常重要的基本功,很多同学,尤其是喜欢写代码的同学容易忽视MarkupLanguage,实际上ML也是UI相关的领域里面很重要的内容,不应该被忽视。
HTML:TheLivingStandard
HTML&CSS
3
有同学问说:“前端工作需求很多,老是改来改去,实际的技术点并没有多少,产品决定业务逻辑,从事底层基础服务会不会更有挑战和职业未来?”
的确,越贴近业务和产品层面上的工作,需求差异性越大,可能改动越频繁。
不仅仅是前端改来改去,PHP服务端做业务的同学也面临这样的问题,业务逻辑改来改去。
越底层通用性越强,改动相对较少。
不过事情都是有两面性的,首先可以这么想想,是底层基础服务的市场大还是互联网业务和产品的市场大。
其次,基础服务的通用性很容易达成,而产品层面上如何通用化,如何在业务驱动的产品研发中利用工程化和工具化提升开发效率,这其实是一个很难的问题。
丰富的互联网产品已改变和正在改变着我们的生活,然而作为产品的创造者,工程师们怎样让自己过得更好,这个领域值得研究。
另外,不要觉得实际的技术点没有多少。
举几个例子:实现曲线和曲面动画,计算地图的最短路径,让png静态图片类似于gif图一样做局部的运动,抽奖游戏,物理效果的HTML5游戏,3D图表,增强现实的WebGL视频流处理等等,这些都是在前端领域中遇到的实际问题。
就JavaScript来说,在实际项目中设计最合适的模型高效率解决现实问题本身就很有挑战。
作为一种典型的新生代编程语言,JavaScript特性丰富,使用灵活,性能优良。
面向对象、函数式编程、各种设计模式、MVC和MVVM,这些本身就有足够的吸引春念慧力。
前端要解决界面和交互问题,实际上UI层面上的问题一直是软件工程方面的一个难题,因为UI不停地在变化。
浏览器各个版本的兼容性、Web标准、移动设备、多终端适配,给了前端工程师很大的挑战,对前端工程师的能力也有很高的要求。
许多UI问题有不只一种解决方法,许多问题有非常巧妙的思路和精彩的解决办法,前端在工程师群体里是属于非常有创造力的一个群体,因为这个行业需要丰富的创造力和想象力。
前端工程师还是Web标准的制定者、实践者和推动者,而现在的W3C标准不扒答仅仅局限于浏览器,还包括各种手持智能设备,车载设备、智能家居等等。
在未来万物互联的时代,前端将不仅仅是网页上的工程师,而是所有人机交互领域的工程师。
其实还是那句话,前端工程师首先是软件工程师,基础是最重要的,如果基础不扎实,一切应用技能就都是“浮云”。
前端的基础是什么?
HTML、CSS、JavaScript基本功,数学、算法、数据结构、操作系统、编译原理基本功。
一个优秀的前端工程师必须要有自己擅长的领域,并且钻研得足够深入,同时要有眼界,能“跨界”。
可以以前端作为职业,但千万不要把自己的技能限制在前端领域,因为有很多东西,只有站在前端之外,才能看得更清晰,更透彻。
感谢大家阅读“成为JavaWeb前端工程师要掌握哪些技能”更多精彩内容请关注Java培训官网
㈢ 有什么值得推荐的 Java,Web 练手项目
1,电子商城项目
采用了Struts、spring、hibernate,数据库使用了MySQL。
2,CRM客户关系管理系统
没有使用框架,采用了jsp、Servlet,数据库使用了Oracle。
3,投票管理系统
采用了Struts、spring、hibernate,数据库使用了MySQL,这个新增了国际化,即中英文切换。
4,权限管理系统
采用了spring、springMVC,MyBatis,数据库采用了MySQL,权限处理采用了Shiro框架,并且整合了Redis。想要学习练习Redis和Shiro的这个应该是个不错的选择,运行前要安装Redis环境。
5,CRM建站系统
采用了spring、springMVC,MyBatis。一个比较完善的建站系统,后台管理,布局,权限控制做的都比较好,很适合学习。
6,语音识别
这个不能算是web项目,但是比较新奇,我也列出来了,运行后出现控制台界面,语音识别转换成文字,识别度不算太高,但也算不错的学习项目。
4,权限管理系统
采用了spring、springMVC,MyBatis,数据库采用了MySQL,权限处理采用了Shiro框架,并且整合了Redis。想要学习练习Redis和Shiro的这个应该是个不错的选择,运行前要安装Redis环境。
5,CRM建站系统
采用了spring、springMVC,MyBatis。一个比较完善的建站系统,后台管理,布局,权限控制做的都比较好,很适合学习。
6,语音识别
这个不能算是web项目,但是比较新奇,我也列出来了,运行后出现控制台界面,语音识别转换成文字,识别度不算太高,但也算不错的学习项目。
㈣ 电脑培训分享有哪些常见的web开发技术
随着互联网的不断发展,web前端开发技术的发展有了更多的变化趋势。下面我们就一起来了解一下,目前比较常见的一些web开发技术吧。
1.Vue.js
就在两年前,很难想象Vue.js能够忍受迅猛发展的React系统的竞争。经过深思熟虑且久经时间考验的Angular是一回事,但是Vue......我们没想到这个开发环境成为前端技术工具列表中的佼佼者。对于那些不熟悉Vue的读者,让我们简要介绍一下它的制胜之道。
,很容易学习并且拥有灵活的创建前端代码的环境,这使得代码编写的出错率较低。Vue的开发者EvanYou曾在Angular工作过。他确定后者对于UI的构建而言不必要且繁琐,他大胆地创建了一个入口门槛很低的前端创建解决方案,因此Vue出现。它旨在帮助那些编程经验很少的设计人员将所有工作都用于创建功能界面。此外,Vue.js支持声明式呈现,异步DOM更新,双向数据绑定,以及严格遵守Web组件规范和HTML模板的简单集成。
2.Angular
尽管我们在2018年看到的Javascript库的竞争趋势直接在Angular和Vue.js之间展开,但前者在来年的实用性不会减少。如果你之前还没有使用Angular工作(至少是使用Angular2),那么你一定要熟悉它的优点。让我们开始吧。
,这个框架需要Javascript与HTML和CSS。二,它是团队协作的理想选择,因为它创建的应用程序可以明确划分为组件-业务逻辑和前端。这是可能的,因为开发环境是基于MVVM(模型-视图-视图-模型)模式下的。三,Angular是创建可扩展应用程序的理想选择,支持与三方库的简单集成。这个框架经常用于构建动态的移动应用,因为它使用了双向数据绑定,这种方法增加了带有丰富动画元素的应用程序的响应能力。
现在,让我们来讨论一下Angular的缺点。一件事情,也是开发人员经常提到的,就是在移动设备上的高耗电量(不过与其他框架相比,通过正确的代码优化,可以减少这个问题)和高入门门槛(如果你是从头开始使用Angular开始工作,那么你要准备好去花费1.5到2个月的时间去学习它的大量文档)。那些喜欢“简洁”Javascript编码的开发者在刚接触Angular时
3.GraphQL
GraphQL是一种有着奇怪语法的API查询语言,由Facebook开发者们开发。它的目的是超越传统的RESTAPIs的功能,同时简化多个源传输的数据集合。
让我们举个具体的列子。想象一下,你需要在正在构建的社交网络框架中显示帖子列表,以及用户的喜好(点赞、收藏等)。在实现方面,这个例子很简单,你只需从下一个数据库端点发出请求。但是,由于这些数据可能来自不同的来源(例如,如果帖子存储在MongoDB或Redis中),生成的应用将比舒适的工作慢得多。此外,如果您考虑到,随着时间的推移,数据的大小会增加,因此需要更多的存储空间,你会意识到,RESTAPI迟早会耗尽其效率。这就是GraphQL的用武之地,使用GraphQL而不是使用单独的端点来访问每个资源。你可以使用单个端点,该端点能够同时处理涉及多个数据源的复杂查询。与REST模型相比,GraphQL是一个智能的个人助理,使用你指定的源地址,提供所需的内容。
4.Gatsby
如果你的预算比较紧张,但是同时又希望在你的项目中只使用高级技术,那么你一定要尝试Gatsby。Gatsby是KyleMatthews为静态网站的创建而构建的新型解决方案。
它如何优于同行?与Jekyll,Hugo或Hexo等流行解决方案不同,这个静态生成器不使用模板,而是信赖于Webpack和React组件(注意React官网本身也是在Gatsby的帮助下编写的)。因此,你可以获得自动更新和即时页面转换等优势。从1.0版本开始,Gatsby使用了上面提到的GraphQL。因此,在构建过程,它可以从多个GraphQLAPI中获得数据,然后使用它们创建一个完全静态的React客户端应用程序。现在,让我们从枯燥的特征列表转移到真正的问题,看看Gatsby是否适合你。
5.Storybook
Storybook是开发者在与React打交道过程中一个有用的开源工具。特别是,得亏StoryBook,你可以在独立的环境中设计和策划应用程序外的UI组件,并且在创建新的UI组件时它会发生变化。如果这个功能对你来说并不太重要,那么让我们考虑一下Storybook将帮助解决几个严重问题的情况。
今天,许多有用的工具支持简单快速地创建功能性客户端-服务器系统,包括着名的Meteor、Firebase、GraphQL和Falcor。电脑培训http://www.kmbdqn.com/发现所有这些工具使编程过程基础化,应用程序可快速响应。虽然React及其热门的重加载功能对于UI创建的开发者来说是一个很大的帮助,但设计阶段仍然需大量的时间和编写不少代码行。
㈤ 零基础如何学好Web 前端
朋友,如果你是零基础的话,建议你先自学一下前端的基础知识(html、css、Js)。
自学方法:
1、作为一个初学者,你必须明确系统的学习方案,我建议一定有一个指导的人,全靠自己学,放弃的几率非常大,在你对于web前端还没有任何概念的时候,需要一个人领进门,之后就都靠自己钻研,第一步就是确定web前端都需要哪些内容,并且在多少时间内学完,建议时间6个月保底。
2、视频为主,书为辅。很多初学者在学习前端的时候非常喜欢去买书,但是最后的结果是什么?看来看去什么都不会写,所以在这里给大家提醒,书可以看,但是是在建立于你已经对于某个知识点有了具体操作的执行后,在用书去巩固概念,这样更加利于你对于知识的理解。
3、对于学习技术来讲,掌握一个学习方法是非常重要的,其实对于学习web前端来讲,学习方法确实很多都是相通的,一旦学习方法不对,可能就会造成“方法不对,努力白费”。其实关于这方面还是很多的,我就简单说个例子,有的人边听课边跟着敲代码,这样就不对,听课的时候就专心听,做题的时候就专心做题,这都是过来人的经验,一定要听。根据每个人的不同,可能学习方法也会有所出路,找到适合你自己的学习法方法是学习的前提。
4、不建议自己一个人瞎学,在我了解学习编程的这些人来看,从零基础开始学并且最后成功做这份工作的其实并没有几个,我觉得大部分原因就是因为他们都不了解web前端是干什么的,学什么的,就盲目的买书看,到处找视频看,最后看着看着就放弃了,所以我建议初学者在没有具体概念之前,还是找有经验的人请教一下,聊过之后你就会知道web前端具体是干什么的,该怎么学,这是我个人的小建议,可以不采纳。
2020前端最新学习路线图:
前端基础学习内容:
第1阶段:前端页面重构(4周)
内容包含了:(PC端网站布局项目、HTML5+CSS3基础项目、WebApp页面布局项目)
第2阶段:JavaScript高级程序设计(5周)
内容包含:(原生JavaScript交互功能开发项目、面向对象进阶与ES5/ES6应用项目、JavaScript工具库自主研发项目)
第3阶段:PC端全栈项目开发(3周)
内容包含:(jQuery经典交互特效开发、HTTP协议、Ajax进阶与PHP/JAVA开发项目、前端工程化与模块化应用项目、PC端网站开发项目、PC端管理信息系统前端开发项目)
第4阶段:移动端项目开发(6周)
内容包含:(Touch端项目、微信场景项目、应用Angular+Ionic开发WebApp项目、应用Vue.js开发WebApp项目、应用React.js开发WebApp项目)
第5阶段:混合(Hybrid,ReactNative)开发(1周)
内容包含:(微信小程序开发、ReactNative、各类混合应用开发)
第6阶段:NodeJS全栈开发(1周)
内容包括:(WebApp后端系统开发、一、NodeJS基础与NodeJS核心模块二、Express三、noSQL数据库)
前端基础书籍:
《Head First HTML与CSS(第2版)》,入门真的是经典书籍,手把手教学,丰富的案例让你从 0 开始学前端。
《CSS权威指南(第三版)》,这本书作为 CSS 的经典着作,把原理讲得非常的通透,除了 w3c 标准,算最权威的一本了,毕竟权威指南。
《CSS揭秘》神书,47 个 css 技巧让你在面对各种 css 问题的时候游刃有余。是 css 书籍中评分最高的了,css 进阶必备。
《javascript语言精粹》,这本书可以在入门之前了解一下基本语法,以及在学习之前可以了解下 JS 里面的精粹以及糟粕,虽然这本书很薄很薄,但是值得反复去读的一本书。
《JavaScript DOM编程艺术(第2版)》,本书在简洁明快地讲述JavaScript和DOM的基本知识之后,通过几个实例演示了专业水准的网页开发技术,透彻阐述了平稳退化等一批至关重要的 JavaScript编程原则和最佳实践。
《JavaScript权威指南》:犀牛书是每个FE都绕不过的一本书,可以先大致通读几遍,也可以把其当作工具书,时时翻阅。
前端视频教程:
网页链接
希望对你有用,望采纳~
㈥ 如何编写一个简单的java web前后端实例
Java代码编写的30条实践建议,很多人认为学习java需要较好的计算机语言基础,而事实上高中学历的学习java,月薪过万的比比皆是,Java代码编写的30条实践建议,java知识点学习贵在积累。
Java代码编写的30条实践建议:
(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。
例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标 志出它们属于编译期的常数。
Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者e等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。
(2) 为了常规用途而创建一个类时,请采取"经典形式",并包含对下述元素的定义:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3) 对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。
(4) 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。
(5) 设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。
(6) 使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:
■一个复杂的开关语句:考虑采用"多形"机制
■数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现
■许多成员变量在特征上有很大的差别:考虑使用几个类
(7) 让一切东西都尽可能地"私有"--private。可使库的某一部分"公共化"(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。
在多线程环境中,隐私是特别重要的一个因素--只有private字段才能在异步使用的情况下受到保护。
(8) 谨惕"巨大对象综合症"。对一些习惯于顺序编程思维、且初涉OOP领域的新手,往往喜欢先写一个顺序执行的程序,再把它嵌入一个或两个巨大的对象里。根据编程原理,对象表达的应该是应用程序的概念,而非应用程序本身。
(9) 若不得已进行一些不太雅观的编程,至少应该把那些代码置于一个类的内部。
(10) 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作(参见第14章14.1.2小节的"用内部类改进代码")。
(11) 尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。
(12) 避免使用"魔术数字",这些数字很难与代码很好地配合。如以后需要修改它,无疑会成为一场噩梦,因为根本不知道"100"到底是指"数组大小"还是"其他全然不同的东西"。所以,我们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。这样可使程序更易理解以及更易维护。
(13) 涉及构建器和异常的时候,通常希望重新丢弃在构建器中捕获的任何异常--如果它造成了那个对象的创建失败。这样一来,调用者就不会以为那个对象已正确地创建,从而盲目地继续。
(14) 当客户程序员用完对象以后,若你的类要求进行任何清除工作,可考虑将清除代码置于一个良好定义的方法里,采用类似于cleanup()这样的名字,明确表明自己的用途。除此以外,可在类内放置一个boolean(布尔)标记,指出对象是否已被清除。在类的finalize()方法里,请确定对象已被清除,并已丢弃了从RuntimeException继承的一个类(如果还没有的话),从而指出一个编程错误。在采取象这样的方案之前,请确定finalize()能够在自己的系统中工作(可能需要调用System.runFinalizersOnExit(true),从而确保这一行为)。
(15) 在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),请采用下述方法:初始化对象;若成功,则立即进入一个含有finally从句的try块,开始清除工作。
(16) 若在初始化过程中需要覆盖(取消)finalize(),请记住调用super.finalize()(若Object属于我们的直接超类,则无此必要)。在对finalize()进行覆盖的过程中,对super.finalize()的调用应属于最后一个行动,而不应是第一个行动,这样可确保在需要基础类组件的时候它们依然有效。
(17) 创建大小固定的对象集合时,请将它们传输至一个数组(若准备从一个方法里返回这个集合,更应如此操作)。这样一来,我们就可享受到数组在编译期进行类型检查的好处。此外,为使用它们,数组的接收者也许并不需要将对象"造型"到数组里。
(18) 尽量使用interfaces,不要使用abstract类。若已知某样东西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实施细节。
(19) 在构建器内部,只进行那些将对象设为正确状态所需的工作。尽可能地避免调用其他方法,因为那些方法可能被其他人覆盖或取消,从而在构建过程中产生不可预知的结果(参见第7章的详细说明)。
(20) 对象不应只是简单地容纳一些数据;它们的行为也应得到良好的定义。
(21) 在现成类的基础上创建新类时,请首先选择"新建"或"创作"。只有自己的设计要求必须继承时,才应考虑这方面的问题。若在本来允许新建的场合使用了继承,则整个设计会变得没有必要地复杂。
(22) 用继承及方法覆盖来表示行为间的差异,而用字段表示状态间的区别。一个非常极端的例子是通过对不同类的继承来表示颜色,这是绝对应该避免的:应直接使用一个"颜色"字段。
(23) 为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。否则,编译器可能先找到同名的另一个类,并报告出错消息。若怀疑自己碰到了类路径问题,请试试在类路径的每一个起点,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件"适配器"时,特别容易碰到一个陷阱。若覆盖了某个适配器方法,同时拼写方法没有特别讲究,最后的结果就是新添加一个方法,而不是覆盖现成方法。然而,由于这样做是完全合法的,所以不会从编译器或运行期系统获得任何出错提示--只不过代码的工作就变得不正常了。
(25) 用合理的设计方案消除"伪功能"。也就是说,假若只需要创建类的一个对象,就不要提前限制自己使用应用程序,并加上一条"只生成其中一个"注释。请考虑将其封装成一个"独生子"的形式。若在主程序里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。
(26) 警惕"分析瘫痪"。请记住,无论如何都要提前了解整个项目的状况,再去考察其中的细节。由于把握了全局,可快速认识自己未知的一些因素,防止在考察细节的时候陷入"死逻辑"中。
(27) 警惕"过早优化"。首先让它运行起来,再考虑变得更快--但只有在自己必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。
性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
(28) 请记住,阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。无论对你自己,还是对后来的人,它们都是相当重要的。如对此仍有怀疑,那么请试想自己试图从联机Java文档里找出有用信息时碰到的挫折,这样或许能将你说服。
(29) 如认为自己已进行了良好的分析、设计或者实施,那么请稍微更换一下思维角度。试试邀请一些外来人士--并不一定是专家,但可以是来自本公司其他部门的人。请他们用完全新鲜的眼光考察你的工作,看看是否能找出你一度熟视无睹的问题。采取这种方式,往往能在最适合修改的阶段找出一些关键性的问题,避免产品发行后再解决问题而造成的金钱及精力方面的损失。
(30) 良好的设计能带来最大的回报。简言之,对于一个特定的问题,通常会花较长的时间才能找到一种最恰当的解决方案。但一旦找到了正确的方法,以后的工作就轻松多了,再也不用经历数小时、数天或者数月的痛苦挣扎。我们的努力工作会带来最大的回报(甚至无可估量)。而且由于自己倾注了大量心血,最终获得一个出色的设计方案,成功的快感也是令人心动的。坚持抵制草草完工的诱惑--那样做往往得不偿失。