新员工培训手册V1
欢迎加入红创的大家庭,让我共同努力,乘风破浪!
学习路线
每周学习完,请在钉钉上完成周报,详细写一下本周学习收获,心得或者对学习计划的建议。
第一周
本周学习主要内容如下:
新员工培训项目库的使用说明- 熟悉Git常用命令
- 开发环境的搭建
- 学习Clojure语法
1. 使用新员工培训项目库
公司专门为新人学习创建了Git仓库,今后的学习成果都要整理到这个项目里,这样不仅可以练习Git的使用,而且可以保存你的学习成果,也希望你在学习中培养记录笔记的好习惯。下面说明一下该库的使用:
# 第一步:克隆代码
git clone git@codeup.aliyun.com:hc/41674-redcreation/hc-training.git
# 第二步:在根目录下创建文件夹,以你名字全拼命名,例:张三
cd hc-training
mkdir zhangsan
# 学习的代码、笔记和成果都放在该文件夹下,按时提交
2. 熟悉Git常用命令
下面列举了我们使用最频繁的Git命令,自行查阅或者问问同事,搞清下面常用命令的作用。
- git add
- git commit
- git fetch
- git rebase
- git push
在熟悉了以上的命令后,在上一步创建的文件中新建一个自己的笔记文件,并把它提交到远程的git仓库中。
# 第一步 新建笔记文件
touch zhangsannotes.org
# 第二步 查看此时文件夹内的状态,推荐在每一步完成后都查看并了解状态的信息
git status / git status -s
# 第三步 将文件添加到暂存区
git add . / git add zhangsannotes.org
# 第四步 将暂存区的改动提交到本地仓库 message处记录本次提交的一些信息
git commit -m[message]
# 第五步 将本地仓库提交到远程仓库
git push
3. 开发环境的搭建
- scoop, windows的包管理器, 有篇介绍的blog
- scoop安装emacs
- scoop安装git
- leiningen
- sqlite
- babashka
- etc.
- 熟悉下emacs
观看视频1~10段,学习开发环境的搭建及基本语法概念 视频地址:点击查看
4. 学习Clojure语法
至少完成4clojure前50道题
在公司blog中有可以参考的答案Red Creation Technology Blog: 4clojure
遇到没能理解的函数可以在这里搜索函数
本周要求
- 完成本地开发环境的搭建,能运行一个clojure项目
- 写一下对git常用命令作用的理解,以为文档的形式提交到Git中
- 4clojure完成程度截图,要求完成50道题,提交到Git库中
- 练习使用clojure函数时在repl敲过的都提交git上,同时贴到钉钉周报中
第二周
本周目标是完成一个简单的后台项目,实现用户检索、增加、修改、删除接口。通过这个项目可以熟悉后台的开发流程。其中主要涉及如下内容:
- 创建luminus web项目
- 学习使用migrations
- 学习HugSQL操作数据库
- 学习单元测试
- 学习路由配置
- 学习clojure spec
1. 创建项目
使用红创脚手架创建项目,关于Emacs的使用可以参考新手入门clojure开发(本入门为windows10系统)
# 用hc-template 模板创建一个名为 project-name 的项目
lein new hc-template project-name
cd project-name
lein run
在VSCode中运行项目可以查看这篇文章
或者可以选择创建使用luminus模板+附加功能来创建项目
lein new luminus project-name + ...
在GitHub - luminus-framework中可以了解增加功能的方式
2. 学习使用migrations
学习资料:
学习目标:
实现一个用户表的migrations。
-- 启动REPL并执行(start)后 -- 创建两个sql脚本(创建的脚本会在resources/migrations下) (user/create-migration "username-table") -- 生成的两个文件up对应迁移,down对应回滚 -- 在up文件中创建一个简单的用户表 CREATE TABLE username (id INT,name VARCHAR (25)) -- 在相应的down文件将上述迁移文件删除 DROP TABLE username
3. 学习HugSQL操作数据库
学习资料:
+-----------------------+ +----------------------+
| SQL file | | clojure namespace |
+-----------------------+ +----------------------+
| | bind-conn| |
|name:select-username---+----------+->func:select-username|
| ? | | query |
| * | | [] |
| doc:xxxxxxxxx | | docstring |
| keyword: :id | | params |
+-----------------------+ +----------------------+
学习目标:
- 观察hc-template项目模板下各个包的组成
- 在resources/sql下新建sql文件编写sql代码
- 在src/clj/<项目名>/modules/<模块名>/.clj文件中将<文件名>.sql中方法绑定到命名空间
(ns <项目名>.modules.<模块名>.<文件名>-db
(:require [conman.core :as conman]
[<项目名>.db.core :refer [*db*]]))
(conman/bind-connection *db* "sql/<文件名>.sql")
- 实现用户的curd操作。
-- :name select-username :? :*
-- :doc 全部查询
select * from t_username
-- :name insert-username! :! :1
-- :doc 单条新增
INSERT INTO t_username
(id, name) VALUES (:id, :name)
-- :name update-username! :! :1
-- :doc 单条更新
UPDATE t_username
SET name = :name
WHERE id = :id
-- :name delete-username! :! :1
-- :doc 单条删除
DELETE FROM t_username
WHERE id = :id
调用方法
(create-user!
{:id "user1"
:first_name "Bob"
:last_name "Bobberton"
:email "bob.bobberton@mail.com"
:pass "verysecret"})
4. 学习单元测试
学习资料:
学习目标:
- 实现实现用户curd的单元测试。
5. 学习路由配置
学习资料:
- Routing
- Red Creation Technology Blog: clojure luminus开发之handler里的参数获取 (3vyd.com)
- Red Creation Technology Blog: clojure luminus开发之非常重要的handler和middleware (3vyd.com)
学习目标:
- 完成用户操作的接口。
在modules之前创建的文件夹中新建test-routes.clj文件
(ns <项目名>.modules.<模块名>.test-routes
(:require
[clojure.spec.alpha :as s]
[spec-tools.core :as st]
[spec-tools.data-spec :as ds]
[<项目名>.common.result :refer [ok sorry]]
[<项目名>.modules.<模块名>.test-db :as test-user-db]))
(defn hello-routes []
["/hello"
{:swagger {:tags ["增删改查"]}}
["/select"
{:get {:summary "全部查询"
:handler (fn [_]
(-> (在学习hugsql时绑定到命名空间的方法) (ok)))}}]])
以此类推完成其他的三个操作的接口
6. 学习clojure spec
学习资料:
学习目标:
- 使用clojure spec完成用户请求参数的约束。
7. 本周学习要求
- [ ] 创建migrate文件
- [ ] 编写up和down两个migrate文件,id用uuid
- [ ] 编写单表的CRUD接口,涉及route文件,service文件,db文件,sql文件.
要求: 1. 查询接口是分页查询 2. 查询接口除了分页至少有一个非必须参数,类型string,访问时可填可不填 3. 查询接口有=,in,like三种例子 4. 添加接口,有参数校验,如果参数不符合能返回400错误 5. 修改接口根据id更新, 6. 删除接口,逻辑删除 7. 4个接口中分别用到了path,query,body,header传参.有get情况,也有post请求
加分项: 1. 批量添加接口 2. 批量删除接口
第三周
本周目标完成一个用户管理前端展示,实现用户列表组件、用户表单组件。其中主要涉及如下内容:
- 使用shadow-cljs初始化前端项目
- 学习Reagent开发基于组件的前端项目
- 学习clojurescript和javascript代码交互
- 简单了解React, 学习React和Reagent的交互
- 学习ant design组件
1. 使用shadow-cljs创建前端项目
阅读shadow-cljs文档,初始化一个前端项目
2. 学习Reagent
学习资料:
学习目标:
- 要搞清楚组件、属性、状态等概念。
- 实现一个用户列表的组件、用户表单组件。
3. 学习clojurescript和javascript代码交互
前端开发免不了与javascript交互,这篇文章点击查看可以帮助你。
4. 简单了解React, 学习React和Reagent的交互
对React不熟悉,可以自行查阅或问问同事,对React有个简单的了解。然后阅读React和Reagent交互搞清React和Reagent的交互方式。
5. 学习ant design组件
学习资料:
学习目标:
- 将用户列表,用户表单自己写的组件替换成Antd的组件
6. 本周学习要求
- 本地能运行shadow-cljs项目,知道编译有没有问题,会初始化项目并运行.
- 会用antd组件编写一个单表的列表,新建和编辑页面.
- 知道shadow-clj库的作用,知道怎么引入一个新的npm包
第四周
本周目标是将后台接口和前端展示联调起来,实现一个用户管理的功能。其中主要涉及如下内容:
- 学习re-frame全局状态管理
- 学习使用reframe发起Request请求
- 学习kee-frame路由控制
1. 学习re-frame全局状态管理
学习资料:
学习目标:
- 搞清
reg-event-fx、reg-event-db、reg-sub、dispatch、subscribe这几个核心api的作用。 - 使用Re-frame保存用户管理的状态。
2. 学习使用reframe发起Request请求
学习资料:
学习目标:
- 完成对接用户检索、用户添加、用户编辑、用户删除接口
3. 学习kee-frame路由控制
学习资料:
学习目标:
- 完成用户管理的路由跳转
本周学习要求
- 能用re-frame对db进行数据的存储,订阅,查看,了解event-db和event-fx的区别和使用场景
- 会用kee-frame的controller对路由进入前后做处理
- 会自己写一个request,用json,form,文件等
第五周
本周工作根据公司项目具体情况进行安排,如果有实际可以参与的项目,可以安排新人参与项目。如果没有实际项目,可以考虑给内管项目舔砖加瓦,小组长可以考虑增加实用的功能,这样新人可以接触实战项目,又可以推进内管的版本迭代。
文档版本
| 版本 | 内容 | 作者 | 修改时间 |
|---|---|---|---|
| V1 | 创建文档 | 红创 | 2022-02-16 |