05.产品前端架构

第1章--协作流程

WEB系统

角色定义

协作流程

职责说明

第2章--接口设计

概述

接口规范

规范应用

本地开发

第3章--版本管理

见 Java开发工程师(Web方向) - 01.Java Web开发入门 - 第5章.Git

课堂交流区:

分布式版本控制(DVCS) 对比集中式版本控制系统(CVCS)

由于Git的持续火热, 对于DVCS与CVCS的争论和对比越来越多了, 似乎很多文章都倾向于这个观点:"Git这种DVCS 要比SVN这些CVCS要优越"  实际情况真的是这样吗? 现在请同学们各抒己见, 以各个方面来分析下CVCS与 DVCS之间的优缺点. 

答:

http://scmquest.com/centralized-vs-distributed-version-control-systems/
https://stackoverflow.com/questions/111031/comparison-between-centralized-and-distributed-version-control-systems
https://www.youtube.com/watch?v=_yQlKEq-Ueg

为什么大部分情况下,git fetch 要优于直接使用 git pull?

不难发现, 课程中对于可能常用的 git pull 命令着墨不多.  而把大量的时间放在了 git fetch + git merge 的工作原理上。

同学可以总结下,为何使用git fetch来分步骤处理 要优于直接使用git pull?

答:

git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。

将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。

前面那些行显示出“git fetch”命令会将哪些文件下载到本地,这些文件一旦下载到本地之后,就可以在本地进行任意操作了。

git fetch命令执行完毕之后,还不会立即将下载的文件合并到你当前工作目录里,这就给你了一个选择下一步操作的机会,要是想将从远程分支下载的文件更新到你的工作目录里,你需要执行一个“合并(merge)”操作。

单独进行下载和合并是一个好的做法,你可以先看看下载的是什么,然后再决定是否和本地代码合并。而且分开来做,可以清晰的区别开本地分支和远程分支,方便选择使用。

版本管理的单元测验

本次得分为:19.00/19.00, 本次测试的提交时间为:2017-09-12
1单选(2分)

下列哪个工具不是版本控制系统

  • A.SVN
  • B.RCS
  • C.GIT
  • D.FTP2.00/2.00
2多选(3分)

以下哪些git命令可以切换branch

  • A.git reset <branchName>
  • B.git checkout –b <branchName>1.50/3.00
  • C.git branch  <branchName>
  • D.git checkout  <branchName>1.50/3.00
3多选(3分)

以下哪些git命令可以得到一个git仓库

  • A.git init1.50/3.00
  • B.git clone1.50/3.00
  • C.git checkout
  • D.git pull
4多选(3分)

以下哪些git config命令可以影响到本用户所有git操作

  • A.git config --global1.50/3.00
  • B.git config --local
  • C.git config --high
  • D.git config --system1.50/3.00
5判断(2分)

与svn类似,只要使用git commit可以提交你的代码与其它开发者共享

  • A.×2.00/2.00
  • B.√
6判断(2分)

git pull除了会直接获取远程历史,还会与你本地版本的历史进行合并

  • A.×
  • B.√2.00/2.00
7判断(2分)

git alias 可以用来设置git命令的别名

  • A.√
  • B.×2.00/2.00
8判断(2分)

git checkout 和 git reset 都可以使HEAD指向发生改变

  • A.×
  • B.√2.00/2.00

第4章--技术选型

模块化

The secret to building large apps is never build large apps. Break your applications into small pieces. Then, assemble those testable, bite-sized pieces into your big application. -- Justin Meyer

语言的模块支持:

java: import

c#: using

css: @import

javascript: none!

模块:

封装实现

暴露接口

声明依赖

例子:case:计算器

anti-pattern 反模块

math.js

function add(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
} calculator.js var action = "add";
function compute(a, b) {
switch (action) {
case "add": return add(a, b)
case "sub": return sub(a, b)
}
}

math.js:无封装性;接口结构不明显

calculator.js:没有依赖声明;使用全局变量action

Object Literal 字面量

math.js

var math = {
add: function add(a, b) {
return a + b;
},
sub: function sub(a, b) {
return a - b;
}
} calculator.js var calculator = {
action: 'add',
compute: function compute(a, b) {
switch (action) {
case "add": return math.add(a, b)
case "sub": return math.sub(a, b)
}
}
}

math.js:结构性好;但是没有访问控制

calculator.js:还是没有声明依赖,无法标明action为私有的,在外部也可以使用

IIFE (Immediately-invoked Function Expression) 自执行函数表达式--帮助创建局部作用域

calculator-1.js

var calculator = (function() {
var action = "add"
return {
compute: function (a, b) {
switch (action) {
case "add": return math.add(a, b)
case "sub": return math.sub(a, b)
}
}
}
})()

calculator.js:有了访问控制,但是还是没有依赖声明

calculator-2.js

var calculator = (function(m) {
var action = "add"
function compute (a, b) {
switch (action) {
case "add": return m.add(a, b)
case "sub": return m.sub(a, b)
}
}
}
return {
compute: compute
}
})(math)

calculator-2.js:显示了依赖声明,但是仍然污染了全局变量,而且需要手动进行依赖管理

Namespace 命名空间

math.js

namespace("math", [], function() {
function add(a, b) { return a + b }
function sub(a, b) { return a - b } return {
add: add,
sub: sub
}
}) calculator.js namespace("calculator", ["math"], function(m) {
var action = "add"
function compute(a, b) {
return m[action](a, b)
}
return {
compute: compute
}
})

进行了依赖声明,["math"]做了依赖注入

模块系统:

课堂交流区

市面上这么多种模块系统, 它们之间可以相互转换吗

AMD、COMMONJS、CMD、UMD、ES6 Module、IIFE... 这么多的模块写法, 一旦你选择了一种模块写法,那它在另一个系统中就可能无法运行了。 值得庆幸的是,现在越来越多的工具可以帮助我们将js从一种模块写法转换为另一种写法, 你能帮助同学们列举出一个或多个转换工具吗?

框架

技术选型的单元测验

返回

本次得分为:7.50/9.00, 本次测试的提交时间为:2017-09-12, 如果你认为本次测试成绩不理想,你可以选择再做一次。
1
多选(3分)

以下哪几种方式可以实现依赖分析, 而无需手工管理

得分/总分

  • A.

    ES6/module

    1.50/3.00
  • B.

    字面量对象

  • C.

    命名空间

  • D.

    Commonjs/module

2
判断(2分)

利用AMD规范的模块系统可以实现模块的异步载入

得分/总分

  • A.
    2.00/2.00
  • B.
    ×
3
判断(2分)

字符串模板可以同时用于服务器端和浏览器端

得分/总分

  • A.
    2.00/2.00
  • B.
    ×
4
判断(2分)

ES5以及将来的ES6,ES7都不会有语言级的模块化支持,所以我们才需要模块系统

得分/总分

  • A.
  • B.
    ×
    2.00/2.00

第5章--开发实践

系统设计

系统实现

测试发布

《产品前端架构》课堂交流区问题汇总

http://www.aichengxu.com/product/24596509.htm

前端开发工程师 - 05.产品前端架构 - 协作流程 & 接口设计 & 版本管理 & 技术选型 &开发实践的更多相关文章

  1. 上海洋码头(www.ymatou.com)急招技术人才(职位:互联网软件开发工程师,.NET网站架构师,Web前端开发工程师,高级测试工程师,产品经理)

    对公司招聘职位有兴趣的童鞋可以把简历发送到zhangzhiqiang@ymatou.com,我们HR会快速给你答复. 互联网软件开发工程师 岗位职责: 1.参与洋码头各个平台(www.ymatou.c ...

  2. 写给IOS开发工程师的网页前端入门笔记

    前言:作为IOS开发工程师,终会接触到网页前端开发,甚至可能会有 用HTML5开发IOS的app客户端的需求.比如现在上架的app就有比如理财类型的app有的就用HTML开发的,从理财类型的app需求 ...

  3. 作为Java开发工程师,如何高效优雅地编写接口文档

    作为一名优秀的Java开发工程师,编写接口文档向来是一件很头疼的事情.本来就被bug纠缠的很累了,你还让我干这? 其实,你可以试试ApiPost. ApiPost的定位是Postman+Swagger ...

  4. 多云架构下,JAVA微服务技术选型实例解析

    [摘要] 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点. 微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施. ...

  5. Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

    第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...

  6. 【大型web架构】一个大型web系统架构设计和技术选型的讨论摘录

    1.数据库压力问题 所有的压力最终都会反映到数据库方面,一定要对数据库有一个整体的规划. 可以按照业务.区域等等特性对数据库进行配置,可以考虑分库.使用rac.分区.分表等等策略,确保数据库能正常的进 ...

  7. App后台开发运维和架构实践学习总结(3)——RestFul架构下API接口设计注意点

    1. 争取相容性和统一性 这里就要求让API设计得是可预测的.按照这种方式写出所有接口和接口所需要的参数.现在就要确保命名是一致的,接口所需的参数顺序也是一致的.你现在应该有products,orde ...

  8. 如何成长为一名合格的web前端开发工程师呢?

    前端开发工程师不仅仅要掌握一些基础的美工设计等还要懂得网页设计类的HTML JavaScript和css,这三种能力缺一不可,虽不要求你特别的精通,但至少要熟练的掌握,能够运用自己所了解的这些技术和知 ...

  9. PHP开发工程师-技能树

    参考进阶-PHP程序员的技术成长规划-http://blog.csdn.net/heiyeshuwu/article/details/40098043 LNMP / LAMP 环境搭建(单组件安装,非 ...

随机推荐

  1. [置顶] Android 高级开发 源码 UI 缓存 网络

    1.Android 源码剖析 性能优化  开源代码 2.Android UI效果源码 3.http://mzh3344258.blog.51cto.com/1823534/d-3 4.微信公众平台开发 ...

  2. nodejs中如何连接mysql

    nodejs中如何连接mysql,下面给出一个小Demo. 第一步安装mysql模块npm install mysql 第二步导入mysql模块var mysql = require('mysql') ...

  3. Vue教程:计算属性computed与侦听器watch(三)

    计算属性computed 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example" ...

  4. 【转载】决策树Decision Tree学习

    本文转自:http://www.cnblogs.com/v-July-v/archive/2012/05/17/2539023.html 最近在研究规则引擎,需要学习决策树.决策表等算法.发现篇好文对 ...

  5. Oracle 体系结构二 内存结构

    Oracle实例由共享内存块(SGA)以及大量的后台进程构成. SGA必须包含的数据结构: 数据库缓冲区缓存 日志缓冲区 共享池 可选的数据结构: 大池 JAVA池 流池 其他缓冲区缓存池 用户会话还 ...

  6. ABAP开发顾问必备:SAP ABAP开发技术总结[转载]

    转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...

  7. Linux-帮助的用法

    Linux帮助使用方法 内部命令:help COMMAND 或 man bash外部命令: (1) COMMAND --help   COMMAND -h --help和-h选项显示用法总结和参数列表 ...

  8. npm 取消代理 npm config delete proxy

    今天在安装electron时设置了代理,发现再npm install 安装别的总是装不上,只好取消代理. npm 取消代理 npm config delete proxy

  9. 剑指Offer-二维数组查找

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  10. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...