2019年7月17日 星期三

程式設計師應有的knowledges-程式概念

第一部分:認識Framework

最近網頁設計正夯,很多朋友來問我,架設網頁的問題,因為想要做電商,但是不知道怎麼開始,所以利用機會,分享一下我的經驗。
想要做網頁設計,或是電商平台,第一件要做的事是,選擇一個 Framework(框架) 。通常我講完Framework這個字的時候,我得到的回應都是一臉黑人問號,到底什麼是Framework?

什麼是 Framework?

所謂的 Framework(框架),根據維基百科的說法,通常指的是為了實現某個業界標準或完成特定基本任務的軟體組件規範,也指為了實現某個軟體組件規範時,提供規範所要求之基礎功能的軟體產品,簡單說就是幫助你完成任務的一些工具及規範。
這裡我們用堆沙堡例子來,解釋什麼是Framework。來到沙灘參加堆沙堡比賽,為了做出完美的城堡,我必須把四個柱子做出來,這時候問題就來了,要怎麼做?
最傳統的做法,就是徒手刻,完全用自己的感覺,做出四支一模一樣的柱子。但這種方式想也知道很累,而且完全用手憑感覺,如果不是專業的高手,真的很難做出一模一樣的柱子。
比較好的方法是用水桶做。先用水桶當作是模子做出形狀一樣的圓柱體,在堆起來就好,不但快,而且形狀會一模一樣。
這個水桶就是個簡單的Framework,他在堆沙堡的過程中,擔任工具規範的角色。工具讓你做得更快更輕鬆,而規範的地方讓你做出來的柱子都是一樣大的。
做網頁也是一樣的道理,在我們設計網頁的時候,如果全部自己手刻一定相當費時,所以我們可以用別人寫好的Framework加一些調整,做出自己喜歡的樣子,同時可使用在網頁的各個角落。

Framework的重要性

Framework的重要性,除了剛剛說的,加快你的開發速度,最重要的其實是規範。我們回到剛剛的沙灘,當我今天覺得一個人做沙堡小打小鬧的,我想要組個團隊,做一個超大的沙堡,這時候就會需要夥伴的加入。
夥伴的加入,應該會讓建造速度更快才對,結果發現,每個人都用自己的方法做柱子,做出來的都不一樣,也兜不起來,然後開始吵誰做的比較剛好,誰做的太大了,然後城堡還沒做出來,團隊散的跟沙一樣。
這時水桶又跳出來解危了。我們大家都用同樣的水桶,用同樣的大小的沙塊來做柱子,大家都一樣,沒得吵。
如果今天有新人加入團隊,只要把水桶給他,他也能很快做出一樣的柱子,不用先失敗個好幾次,還要一直麻煩老手看這樣對不對。
在網頁的世界,我們也常常需要向別人問元件如何寫,功能怎麼做,也常常需要找助手或夥伴,如果你沒有使用一套大家都熟悉的Framework,那你遇到不知道該怎麼解決的問題,沒人能幫你。想找人幫忙,還要自己全部教一遍,非常浪費時間。

第二部分:常見的Framework有哪些,以網頁為案例

目前,網頁上的Web Framework非常多,但是必須網頁設計的架構來選擇。這邊我們依照架構列出一些比較常用的Framework:

前端版面設計為主

  1. Bootstrap
  2. Material Design Lite
  3. Foundation

前端SPA(Single Page Application)

  1. React
  2. Vue
  3. Angular

SSR (Server Side Rendering)

  1. Next.js
  2. Nuxt.js
  3. Angular Universal
更多Web Framework陸續增加中....
【資料引用資訊】
google關鍵字:什麼是網頁框架(Web Framework) @Soarogo 網頁設計免費教學

第三部分:Framework如何誕生,以MVC框架為案例

从HTML开始

框架是用来做网站的,所以我们就从做网站入手。
首先要有一个HTML页面。


静态HTML站

我们需要做的是一个网站,一个页面不够用,至少要有五个:
  1. 首页
  2. 列表页
  3. 内容页
  4. 关于页
  5. 联系方式页


可复用PHP页面

这五个页面有一些内容是一样的,比如说页面头部(header),足部(footer)。
我们就把这些内容抽出来,这样就有了可复用的页面。
这就是PHP静态网站。

圖片備註:常聽到的版面規劃

内容管理系统(CMS)

我们要将现在这五个页面拓展成博客网站,实现以下功能:
  1. 可以自由地添加文章
  2. 文章存在数据库
  3. 可以对文章进行分类管理

圖片備註:CMS的系統架構

结构说明

内容管理系统(CMS)不同于简单地复用PHP页面,它有较复杂的结构:
  1. 列表页、内容页是可复用的,就将其变成模板文件
  2. 增加一个管理页面,能读取我们的输入,再替换模板文件,生成最后的页面
  3. 增加对数据库的增删改查功能
网站的结构变成了三层MVC,这就是内容管理器(CMS)

圖片備註:CMS系統架構建立在MVC框架的架構圖

新的需求

现在我们不光想做博客网站,还想做购物网站工具类网站。对于这些网站,本质上仍属于内容管理,都能用内容管理系统(CMS)来实现。

艰难的二选一

我们要实现新的需求,可以有以下两种做法:
  1. 根据需求从头到尾重新写一个内容管理系统(CMS)
  2. 使用已有的内容管理系统(CMS)做定制开发
第一种做法:如果自己写一个内容管理系统(CMS),一切从头开始,费时费力
第二种做法:使用现成的内容管理系统(CMS)来进行定制开发,还需要了解这个CMS的源码,同样很麻烦

框架的诞生


能否有一种简化的内容管理系统(CMS),去掉所有的模板,界面内容,仅保留对于数据库的交互,和自动生成页等易于拓展的基础功能?
这个简化的CMS就是原来CMS的基类合集,框架的概念就诞生了。
它是仅仅保留了MVC结构的CMS,相比CMS,开发的灵活性更大,同时又可以节省开发时间


关于不严谨的说明


以上就是不够严谨的框架说明。
既然不严谨,为什么还要列出来呢?
因为框架的抽象不同于其他抽象概念,它并非某个人或机构提出来的有标准的东西,而是随着互联网发展,被不断出现的新框架不断地被更新出来的。
所以对于像框架这种没有标准的概念,只能是不断地通过不严谨的说法来进行修正。

【資料引用資訊】

第三部分:使用Framework注意事項

6 個使用「軟體框架」(Framework)前,你該自問的事情
首先解釋何謂「軟體框架」。如果你寫程式,從頭到尾不用軟體框架,一切都是自己來,如同你用「夯土法」蓋大樓,每一吋都是用手工打造成的。如果使用軟體框架,猶如你向鋼鐵廠購買房屋的「鋼樑」,建造速度不但快很多,也比「夯土法」結實。所以用「軟體框架」寫程式,就是在自己程式內,使用別人事先寫好的「函式庫(Library)」或「類別庫(Class Library)」,站在巨人的肩膀上挑戰世界屋脊一樣,較為輕鬆省力。常見的軟體框架有:微軟的 .NET Framework、JavaScript 裡的 jQuery、PHP 裡的 Zend Framework、Java 裡的 Spring、Ruby 裡的 Rail、Python 裡的 Django...詳細的軟體框架列表,可以參考本文末端的連結。
這六個你該自問的事情包括:
1. 你到底想從這個軟體框架,得到什麼功能:切記不要因為「流行」而使用,要為「需要」而使用。
2. 我是否需要軟體框架,讓整個團隊的程式碼架構,有個共通的基本結構(又稱「維持一致性」):就像電器可以隨便做,插頭規格可得統一!這「插頭規格」,就如同「軟體架構」一樣,會成為每個人自由發揮之餘,需要共同遵循的一致性架構。
3. 該軟體框架的使用說明是否豐富:主站應該有非常詳細、從安裝一直到參考手冊的文件。
4. 該軟體框架是否常常更新?是否有很多程式師使用它:超過兩年以上沒更新,或者到官方論壇一看,最近一次發文是一個月以上的軟體框架最好不要用。
5. 該軟體框架是否能執行於我要的環境裡:舉例來說,你可能會希望 JavaScript 的 jQuery,能執行於 IE、Firefox、Chrome、Safari 四大瀏覽器。
6. 是否有任何需要考慮的「政治因素」,來決定我要使用的軟體框架:如某公司就是要你使用 PHP 裡的 Zend,因為他們的舊系統通通使用這個軟體框架。此時你就不能一意孤行,硬要用自己喜歡的軟體框架。
【資料引用資訊】
google關鍵字:如何學習程式框架

第四部份、Framework的定義範圍


谢邀

我们先分清六个基本概念:Library,Toolkit,Framework,Design,Boilerplate,Scaffolding。看似这是几个基本概念,但是对于学习技术却很重要。我见过多个有十年工作经验的开发,简历里写的:熟悉JQuery框架。在很多人脑子里都只有框架这一个概念,啥都是框架。


Library就是库,而且分为两类。
一类是方法库,用来实现特定需求的一组API集合。最常见的就是JQuery,它是一系列操作DOM和AJAX的API组成的方法库。除了JQuery,还有早期的Prototype,Dojo,Mootools,后面这三个在当时也被称为三大前端工具库。
操作Data的有UnderScore和Lodash,操作Event的有现在流行的RxJS,他们都是Library,在需要的时候,正确调用他们提供的方法就可以。
一类是UI组件库,满足特定业务需要的高可复用的常见UI组件集合。例如Ant Design of React/Ant Design of Angular(NG-ZORRO),Element UI,LayUI,EasyUI。早期的Extjs,JQuery UI。

Bootstrap是一个Toolkit(工具箱),给你提供创建现代响应式页面所需要的工具,包含一套完整的响应式CSS类库,字体,同时还有一套很完整的UI组件。只是这些组件原生是用JQuery写的,不适用于现在主流的前端。所以产生了很多衍生UI库,例如Angular实现的ng-bootstrap和ngx-bootstrap,React实现的react-bootstrap,Vue实现的bootstrap-vue。

Framework是框架,用来构建一个应用的主体结构。然后你在这个主体结构上添砖加瓦,实现自己的需求。Web服务器端的框架基本实现的都是MVC设计模式,你在Model、View、Controller层分别去添加代码。Web前端,Angular(以及它的前身Angularjs)实现的都是MVP模式,是Model、View、Presenter三层。老一辈的其他前端框架,例如Backbone、Ember,实现的是所谓MVVM。
当前所谓的前端三大框架,只有Angular算作严格意义上的Framework,而且是一个OpinionatedFramework,其他两个不算。
Vue官网首页最大的字说:
The Progressive
JavaScript Framework
但是,在Guide页面说:
Vue (pronounced /vjuː/, like view) is a progressive framework for building user interfaces.
The core library is focused on the view layer only, and is easy to pick up and integrate with other libraries or existing projects.
所以,Vue(法文View的意思)本质上是一个解决View层的Library
React官网就没这么遮遮掩掩了,首页最大的字:
A JavaScript library for building user interfaces
所以,Vue和React都是关注于View这一层的Library。也正因如此,用React或Vue搭建项目就还需要一系列其他周边库做补充支持。例如React本身没有实现路由导航,就需要react-router。等等,还有很多,俗称全家桶。

Design是设计语言。当说到xxx Design的时候,前端应该经常听到Material Design和Ant Design,分别是Google和阿里的推出的两种前端UI设计语言。
设计语言(或者说设计风格),是指导UI设计需要遵循的一些约束。这些约束包括:色彩、布局、层次、交互反馈等等。就像我们说建筑,有哥特式的、中国古典式的、希腊式的。买衣服,我们知道韩版、英伦风格、波斯米亚风格。
Design和具体实现是松耦合的,没有直接必然关联。规范只规定这种设计语言的风格是什么样子的,从来不指定具体实现,谁都可以实现。就是Specification和Implementation的关系。就好像中国古典建筑,古时候多用木材,现在用钢筋混凝土一样可以建造出同样的风格。就好像程序员喜欢的格子衫(一种风格),可以用法兰绒的,也可以棉麻的。
Material Design起初是指导Andoid界面的,但是也存在很多Web UI的实现,例如基于Bootstrap开源的有Bootstrap Material。
Ant Design也是一样。只是最开始只有React的实现Ant Design of React。阿里团队后期发布了Angular的实现Ant Design of Angular(NG-ZORRO)。

Boilerplate是模板、样板的意思。一般程序员很少了解这个概念,而是Library和Framework知道的多一些。上面说过了,当你用React开发的时候,React本身不能满足全部需求,就需要周边辅助的项目。如何把这些全家桶用最佳实践(Best Practice)的方式组合在一起?就需要有人给一个样板,Ant Design Pro就产生了。所以Ant Design是设计语言、Ant Design of React是遵循这门设计语言并且用React实现的UI组件库,Ant Design Pro就是模板。

Scaffolding是脚手架工具。前端的脚手架工具一般都是用cli提供的,cli是(Command Line Interface的缩写),不是Client的前三个字母。例如ng-cli, create-react-app, vue cli,以及用Yeoman(YO)做出来的许多generator。
脚手架这个词看似陌生,但其实大家都见过。就是建筑工地大楼施工时候外面那一层钢管搭建的架子,还有很多绿色的网起到保护作用。Scaffolding的作用就是辅助你快速搭建项目。但是Scaffolding不是最终成果物的一部分
不管你用了JQuery也好,用了Vue也好,用了Bootstrap也好,这些东西的代码都会成为你最终编译成果的一部分,而Scaffolding不会。所以大楼建成以后,外面的脚手架是要被拆掉的,不会和大楼一起交付给业主!

先写这么多,希望对大家理解有帮助。还是老习惯,有问题评论里提,我有时间就解答。

来跟我一起学全栈吧:




这张图片可以说很直观了,引用自programcreek

【資料引用資訊】
google關鍵字:前端三大框架以及jquery与bootstrap这种框架有什么(概念上、范畴上的)区别?

沒有留言:

張貼留言