1. 程式人生 > >從壹開始前後端分離 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 計劃書 & 我的前後端開發簡史

從壹開始前後端分離 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 計劃書 & 我的前後端開發簡史

---新內容開始---

番外

大家週一好呀,又是元氣滿滿的一個週一呀!感謝大家在週一這個著急改Bug的黃金時期,抽出時間來看我的博文哈哈哈,時間真快,已經到第十四篇博文了,也很順順(跌跌)利利 (撞撞)的來到了Vue的講解,群裡有小夥伴說,感覺後端還有很多沒有更新,是呀!還是有很多東西的在後端,只不過想把vue給簡單的搭建出來,如果大家有後端的一些知識,可以給我留言,我總結後,在Vue系列之後再繼續說,再強調一次,後端以後還會更新

前邊的.net core 文章我會一直在更新中,一直在修改其中的錯誤,或者不是很清晰的地方,或者大家提出的問題,我都會放進去(因為現在開始了Vue,有的小夥伴在看.Net Core 的時候遇到問題歡迎來群裡,實時給大家解決問題)。大家如果看的時候,可能在文中會不經意間看到自己的名字,這裡統一說一下,如果你指出了我的錯誤,或者提出了建設性的建議,我會把您的相關問題放到文中,算是一種鼓勵支援我的動力?(要是感覺不適合,可以私信給我,或者咱的QQ群,我去掉)。週末的時候我聽取了@

高海東的意見,把程式碼升級到了.Net Core 2.1版本,現在的Git專案裡已經被2.1版本的覆蓋了,其實基本上都差不多,只是在Swagger那部分會有一些輕微的不同,我也把2.0版本的放到了Git新地址,https://github.com/anjoy8/Blog.Core2.0 需要2.0版本的可以去下載。

前言

好啦,開始今天的講解,今天呢,大家可以不用關心Git,或者各種Code了,因為今天不涉及到程式碼,今天主要說的是我的開發經歷,然後說明下網際網路BS開發下的Web發展史,然後引出VUE——一個前後端分離的較好的前端框架(目前前端三大框架React、Vue、Angular)。大家可以簡單看一下,無論你是做BS開發的,還是CS開發的。

本VUE系列我大概有以下幾個路線系列(可能以後有增刪),內容可能涉及的有些多,因為要重頭開始講,如果你感覺是後端沒必要學習的話,權當是個樂子了,可以看看,因為我不是專業講師,大家看看對知識點混個臉熟就行,知道有這回事兒,怎麼用,萬一下一個專案要用到呢,是吧。如果你想好好了解下,或者想轉前端(全棧,我也在去全棧的路上),可以試一試,自己以後跟著練習下:

強調一點:現在的前端已經不是以前那種單純的切圖片,畫頁面了,前端框架層出不窮,面向物件寫法的要求日益增加,邏輯性的呼聲越來越高,所以我的感覺就是,現在的前端已經往全棧方向發展,後端往架構師方向發展。

1、Web開發經歷哪些時期

2、JS高階開發 —— 面向物件系列 和 ES6(如果想了解js初級,可以單找我。)

3、vue開篇,引入vue.js,基本指令語法系列

4、Vue生命週期系列

5、搭建腳手架Vue-cli,安裝node.js,npm基礎系列

6、Axios訪問.Net Core Api相關

7、模板-事件屬性-修飾符等

8、webpack打包相關

9、Vue-router路由相關

10、元件詳解系列

11、Vuex狀態模型庫系列

12、SSR 服務端渲染,Nuxt.js 專案二講解

零、今天要實現紅色的部分

注意:以下這只是我個人的經歷以及思考,不是百度正版的,有不同意見請提出來

先上一個網路截圖,很簡單

一、簡潔明快的單頁面時代——沒有前後端的ASP

1、背景

我接觸到的的第一個專案,那時候還在大學,就是Asp專案,當時第一次用到,感覺真的很神奇,通過程式碼的敲寫,就能動態的展示出來,還能連線資料庫持久化,這麼多年過去了,現在再重新看,感覺看到頭都大了,從網上下載了一套原始碼,大家可以簡單看看,真的神奇,不僅html程式碼裡有邏輯程式碼,還有sql連線資料庫,嗯。。。可能部分讀者都沒有接觸過這樣的程式碼了,不過雖然看著很凌亂,但是在瀏覽器渲染生成了Html頁面,還是和普通的asp.net mvc是一樣的樣式

2、程式碼樣式

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <%'include此行程式碼供安裝外掛用勿刪改%>
    <% Const funpath = "../" Const dbpath = "../" Set ctr_page = New tr_page
    Set ctr_user = New tr_user
    Set ctr_comment = New tr_comment %>
    <%pageno = tr_killstr(request.querystring("pageno"), 1, 8, 1, "", "", "", "", 1) %>
    <%'head此行程式碼供安裝外掛用勿刪改%>
    <title>反饋留言_<%=application(siternd & "55trsitetitle")%></title>
    <link rel="shortcut icon" type="image/x-icon" href="<%=funpath%>favicon.ico"
    <%'headend此行程式碼供安裝外掛用勿刪改%>
</head>
<body>
    <%'body1此行程式碼供安裝外掛用勿刪改%>
    <%if application(siternd & "55tropenguestbook")=1 then%>
    <div class="alert alert-warning alert-dismissible trnotice1" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>

        <%=application(siternd & "55trguestnotice")%>
    </div>
    <form id="form1" name="form1" method="post" action="usersave.asp" target="ifr1" onSubmit="return checkguest(this)">
        <%'body5此行程式碼供安裝外掛用勿刪改%>
        <table class="trsendtb">
        <tr>
        <td align="center" colspan="11"><textarea id="content" name="content" class="trgcontent trinput6"></textarea></td>
        </tr>
        <%'body6此行程式碼供安裝外掛用勿刪改%>
        <tr>
        <td align="left"><img id="codeimg" src="../core/Code.asp?rd=" style="cursor:hand; " title="點選更換" onClick="javascript: this.src = '../core/Code.asp?rd=' + randomString(10) + ''" height="24" border="0" width="70"></td>
        <td align="right">
        <input type="submit" value="立即提交" name="submit1" id="submit1" class="trbt3 trmar1" />
        <input type="hidden" value="guest" name="action" />
        </td>
        </tr>
        <%'body7此行程式碼供安裝外掛用勿刪改%>
        </table>
        <%'body8此行程式碼供安裝外掛用勿刪改%>
    </form>
    <table align="center" border="0" cellpadding="3" cellspacing="1" id="mytable" class="trtable2">
    <% sql = "select id,username,content,addtime,homepage,asuser,answer,astime from tr_comment where types=2 and ispass=1 and isdel=0 order by addtime desc , id desc " page_size = 20 pagei = 0 n = (pageno -1) * page_size
    Call ctr_page.create_rs(sql, rs, conn, page_size, pageno) ' rs.open sql,conn,0,1
    If Not rs.EOF Then
    Do While Not rs.EOF ' and pagei
    <page_size If pagei>
    = page_size Then Exit Do
    pagei = pagei + 1 n = n + 1
    %>
    <p class="trp1">
    <span class="uname">
    <%if trim(rs("homepage"))<>"" then%>
    <%if isweburl(rs("homepage")) then%>
    <a href="#"><%=rs("username")%></a>
    <%else%>
    <%=rs("username")%>
    <%end if%>
    <%else%>
    <%=rs("username")%>
    <%end if%>
    </span> 說: <%=rs("content")%>
    </p>
    <div class="col-lg-3 <%=colbs3%> trrow1199 trlistright trovh" id="trlistright178888">
    <%'body3此行程式碼供安裝外掛用勿刪改%>
    </div>
    </div>
    <div class="trpublicline clearfix "> </div>
</body>
</html>

3、概要講解

這就是Web 1.0 時代,典型的就是ASP,在之前web開發中,也是獨領風騷了一段時間,適合小專案,不分前後端,大家一起開發頁面,那個時候大家是按照頁面來分工的,寫好的頁面直接就可以跑,不需要編譯,有點兒像PHP,服務端給什麼瀏覽器就展現什麼,展現的控制在 Web Server 層。

優點:

1、無需編譯,可在伺服器端直接執行。

2、容易編寫,可使用普通的文字編輯器編寫,如記事本就可以完成

3、由指令碼在伺服器上而不是客戶端執行,使用者端的瀏覽器不需要提供任何別的支援,這樣大大提高了使用者與伺服器之間的互動速度。

缺點:

1、程式碼邏輯混亂,難於管理:由於ASP是指令碼語言混合html程式設計,所以你很難看清程式碼的邏輯關係,並且隨著程式的複雜性增加,甚至超出一個程式設計師所能達到的管理能力,各種問題就出現了。

2、程式碼的可重用性差:由於是面向結構的程式設計方式,並且混合html,所以可能頁面原型修改一點,整個程式都需要修改,更別提程式碼重用了。

3、弱型別造成潛在的出錯可能:只支援兩種非型別的語言:VBScript和JavaScript,儘管弱資料型別的程式語言使用起來回方便一些,但相對於它所造成的出錯機率是遠遠得不償失的。

4、缺乏完善的糾錯/除錯功能。

這個時期發展到了後端,真是苦不堪言,為了讓前後端分工更合理高效,提高程式碼的可維護性,Asp.Net MVC框架就出現了。

注:其實之後是aspx,也就是asp.net Webfrom開發,第一次把前後端程式碼摘開,這裡就不詳細說了。

二、前後端開始分工的時代——MVC

1、背景

我是前端起家的,然後轉向後端的,當2014年接觸MVC的時候,就深深的被吸引了,感覺這種整齊的,分工明確的感覺,讓我耳目一新,從此就開始了後端程式設計師之路。當時開發的是公司的一個企業內部管理系統,是一箇中型的專案,地址就不說了。

2、原始碼就不貼上了

 

注意:這裡我要說一下,我曾經看到一個朋友自己寫公司框架,是把ControllerViews放到了兩個層裡邊,嗯,就好像把Model層提出了一樣,這三個都提出來了,這也是一個思路。

3、概要講解

優點:

1、較好的解決了單頁面開發,或者單純的Code behind的aspx開發中所出現的問題

2、程式碼可維護性得到明顯好轉,每個部分都有自己的應該負責的職能。

3、為了讓 View 層更簡單強大,還可以選擇aspx或者Razor模板,甚至可以在裡邊書寫C#程式碼。

缺點:

1、前端開發重度依賴開發環境。在這種模式下,前端寫 demo,寫好後,讓後端去套模板,有可能套錯,套完後還需要前端確定,來回溝通調整的成本比較大。有時候為了一個前端樣式,需要後端去重新編譯( eg.由後端動態生成前端樣式的情況 )。

2、整個開發過程中,不僅僅是前端和後端相互依賴,後端控制器和model的糾纏不清,各種剪不斷理還亂,有時候為了處理邏輯而修改model,有時候修了model還要多處多次修改controller,我的天,想想都累心喲,不過我們卻都是這麼做的 [哭笑]。

注:當然說的有些誇張,目前MVC模式還是很好的一種框架模式。

三、異步出現 ——AJAX,前端小時代

1、背景

還記得第一次使用非同步程式設計是在2015年,當時使用的時候,真是整個人都開心壞了,頁面不用再重新整理,點選跳轉,點選提交,點選分頁,點選任何地方,都是區域性載入,感覺整個人都很輕鬆,這個時候我也由一個完完全全的後端,開始慢慢接觸前端,開始寫HTML程式碼,開始寫CSS,還是用Jquery來寫各種介面請求,各種拼接頁面DOM,各種頁面互動動作等等。開始往前端邁進。

2、程式碼,簡單的一個,基於面向物件的寫法

    function(options) {
        options = .extend({ odd: 'odd', even: 'even', selected: 'selected' }, options); ('tbody>tr:odd', this).addClass(options.odd);
        ('tbody>tr:even', this).addClass(options.even); ('tbody>tr', this).click(function () {
            var hasSelected = (this).hasClass(options.selected); (this)hasSelected ? 'removeClass' : 'addClass'
                .find(':checkbox').attr('checked', !hasSelected)
        })

        $('tbody>tr:has(:checked)', this).addClass(options.selected); return this //返回this , 使方法可鏈
    }

})
}) (jQuery);
    $(function () { // $('.red').color('blue');

        $('#table2').alertBgColor({ odd: '', even: 'even', selected: 'selected' }).find('th').css('color', 'green')

    })

3、概要講解

優點

1、前後端的分工非常清晰,前後端的關鍵協作點是 Ajax 介面

2、前端可以自由的開發了,不受後端開發環境的過分約束

缺點

1、前端過分依賴介面開發。如果後端的介面不規範,亂寫,業務邏輯不穩定,那麼前端開發會很痛苦。為了解決這個問題,RESTful介面規範就出現了,還記得麼,咱們在.Net Core api框架中使用的。有了和後端一起沉澱的介面規則,還可以用來模擬資料,使得前後端可以在約定介面後實現高效並行開發。相信這一塊會越做越好。

2、前端開發的複雜度控制。這個我深有體會,在這兩年,我有時候開發介面,有時候做前端頁面渲染,有時候還要增加特效,過分的操作DOM,真是讓人力不從心,幾乎每一個頁面依賴的JS程式碼都有上千行代,前端頁面渲染越來越慢,越來越笨重,還記得上次面試的時候,被問到了如何前端優化,嗯~~~都是淚。

四、前後端分離 ——MV** 時代

1、背景

今天,全棧這個時代正在到來,或者已經日益成熟,只不過很遺憾的是,我還沒有來的及開發過這種真正的前後端框架(還好的是我負責過公司的幾個微信小程式專案),因此只能自己動手了,一方面滿足自己的需要,另一方面也幫助一部分和我一樣學習的,或者從後端轉前端的小可愛們。

不過還是有很多人不喜歡,或者不想弄懂這個前後端分離技術

2、程式碼

是一種全新的體驗,元件模組的趨勢

<template>//模板樣式 V
    <el-menu
            :default-active="activeIndex2"
            class="el-menu-demo"
            mode="horizontal"
            @select="handleSelect"
            background-color="#545c64"
            text-color="#fff"
            :router="true"
            active-text-color="#ffd04b">
        <el-menu-item index="/">
            <span class="el-icon-menu"></span>
            MMP Jobmonitor
            <sup>Beta</sup>
        </el-menu-item>
        <el-menu-item index="/a">WatchLists</el-menu-item>
        <el-menu-item index="/b">Jobs</el-menu-item>
        <el-menu-item class="user-info" index="">
            <img id="headImg" src="http://who/Photos/a.jpg" padding="0" margin="0" width="40">
            Hi,MM Team User
        </el-menu-item>
    </el-menu>
</template>

<script>//指令碼資訊 MV
    export default {
        data() {
            return {
                activeIndex2: '/'
            };
        },
        beforeCreate() {
            let pathIndex = this.$route.path;
            this.activeIndex2 = pathIndex;
            console.log(this.activeIndex2);
        },
        methods: {
            handleSelect(key, keyPath) {
                console.log(key, keyPath);
            }
        }
    }
</script>

<style scoped>//樣式
    sup {
        top: -0.6em;
        position: relative;
        vertical-align: baseline;
    }

    .user-info {
        float: right !important;
    }
</style>

3、概要說明

優點

1、分層開發,職責劃分更清晰,nodejs作為前端伺服器,由前端開發人員負責,前端開發人員不需要知道C#後臺是如何實現的,也不需要知道API介面是如何實現的,我們只需要關心我們前端的開發工作,並且管理好nodejs前端伺服器,而後臺開發人員也不需要考慮如何前端是如何部署的,他只需要做好自己擅長的部分,提供好API介面就可以;

注意:這裡可能有歧義,感謝@的提醒,應該是這裡吧。是開發的過程中,前程工程師在本地搭建vue+node環境,開發後釋出的時候,已經不依賴Node了。

2、獨特的非同步、非阻塞I/O的特點,這也就意味著他特別適合I/O密集型操作,在處理併發量比較大的請求上能力比較強,因此,利用它來充當前端伺服器,向客戶端提供靜態檔案以及響應客戶端的請求,我覺得這是一個很不錯的選擇。

缺點和挑戰也還是很多

這裡我先留下空白,咱們這一系列講完我再新增,希望那個時候大家都很清晰這個什麼是前後端分離:

五、結語

今天呢,沒有講到程式碼,主要交代了下,未來一段時間我們的講解方向和中心,然後簡單說了下web開發的幾個階段,我雖然都親身經歷過,不過還是由很多錯誤的認知,和不通順的想法,希望大家多批評指正,明天正式開始咱們的Vue開篇,Js高階概述。

六、CODE

Blog.Core2.0版本 不更新