pos机

总览

这是一个用于练习基本代码的题目

第一问 V0~0.x

练习结束后具备的能力/验收条件:

  1. 做完,具备理解需求,实现需求的能力
  2. 掌握如何拼接字符串
  3. 掌握如何通过循环来把结构化的数据,变成非结构化的文本
  4. 掌握如何将不同数据结构进行变换,最后方便的生成结构化的文本
  5. 能够驾驭循环和分支的嵌套

第一问 V1 & V2

练习结束后具备的能力/验收条件:

  1. 做完,具备理解需求,实现需求的能力
  2. 有意义的命名,变量,函数,不使用缩写,起名接近业务语言,考虑业务领域名词
  3. 短函数,不超过15行代码
  4. 减少圈复杂度,不用else,简化逻辑,减少分支
  5. 小步提交,怎么使用git,怎么划分任务
  6. 快捷键
  7. 拿卡,挪卡和验卡

4的细节:

  1. 要有有含义的提交日志。要表达出谁写的,在写哪张卡,在做什么任务(任务是自己划分的,不是别人安排的)。 理由: 软件开发不是一个个人工作,要让团队里的每个人都能看到你的日志不用打开代码阅读,就能理解你做了什么。 哪怕是面向个人也要考虑几个月之后甚至几年之后你再回来看的场景。
  2. 每天都要push,本地代码不过夜。提交步骤要小,每天不少于3次。每次提交日志要能清晰的描述清楚提交代码完成的功能。 理由: 我们这么做是因为正常人上了项目提交粒度自然变粗,所以练习的时候要刻意的很细。
  3. git add, git add ., git add xxx, git add -u, git status, git commit -m/-am, git stash, git stash pop, git checkout -b xx, git checkout xx, git checkout .,git push, git reset, git clean, git merge, git pull, git rebase 这些命令都干了什么,要清楚 理由: 知道了git能做什么,就穷尽我们修改代码的节奏。 比如,我们会copy一份尝试不同的解决办法,这就是分支,比如我们的修改告一段落时想要做个标记,这就是commit
  4. 不该提交的不要提交,比如.idea, .settings, bin, 中间文件,node_modules, bower_component等. 理由: 增加库的体积,加入信息噪音,不利于团队协作,不利于更新依赖等,容易造成不必要的代码缓存从而引入Bug,最重要的是,工作现场不整洁,逼格太低。

高级能力:

  1. 面向对象,学会使用JSON
  2. 不用for,使用lodash进行集合运算,包括学会用chain
  3. 重构技巧-抽取函数,重命名,替换变量

需要讲的session

  1. 命令行常识
  2. git
  3. 高效工作的习惯,良好的协同工作习惯: 任务划分,小步快跑,七步提交法,timebox,切换上下文的损害
  4. Javascript基础知识
  5. clean code
  6. 面向对象的三特性,五原则,怎么用js面向对象

第一问 V3(设计方向,可选)

教学目的

用来训练学生的设计思维

需求:

打折类:

  1. 按成单时间打折
  2. 断码打折,要有SizeItem和Item的继承
  3. 接近保质期打折,要有Food和Item的继承
  4. 买一赠一规则,要求赠物为不同货物
  5. 加入库存概念,
  6. 标记某一批货物打折
  7. 满即减:单品满100减3元,总价满100减2元
  8. 节假日促销打折,全场9折,但是不享受享受断码打折,接近保质期打折之外的其他折扣累加,全场九折是在其他单品折扣基础之上再折扣。 同时送优惠劵,满100送100,其实是送20元优惠劵5张,优惠劵是按照打折之前去算,但是用户可以选择,如果选择了单品折扣就不赠券,卷有使用日期,日期范围之外不能用 赠送的优惠劵是下次消费满100可以使用一张20元的优惠劵
  9. 打折或返卷,某类商品可以选择打折还是返卷,返卷可以下次使用,买100赠20,商品
  10. 组合类,某类品牌的衣服,饮料/食物,家居用品,车载用品,一次购物中出现其中的两类,这款品牌的商品享受9.5折,凑齐三类,享受9折,凑齐四类享受8.8折
  11. 引入批次的概念,指定某一批次打折
  12. 引入型号,指定型号打折
  13. 货品打折,某类货品是故意标高价格
  14. 按量打折

会员类:

  1. 会员积分,每消费一元获得1分
  2. 会员专享货物
  3. 会员专享折上折9.5折,不与节假日折扣累加,可以跟其他折扣累加,但在节假日获得“满100赠5元优惠劵”,可在节假日之外使用。
  4. 积分折扣,10000积分可以换得折上折9折,与会员专享折扣可以累加,但是使用积分折扣兑换不与任何优惠劵和满即减
  5. 积分兑换礼品

流程类:

  1. 加入用户概念,订单概念,加入银行账号,银行扣费,订单状态。
  2. 和入库时间概念,引入库存成本,并随库存时间上升,要求同款商品盈利(售价-入库价格)- 库存成本根据十天算出趋势,如果趋势为负则要打折清仓。

特殊情况:

  1. 某些店不参加按成单时间打折
  2. 某些商店不接受节假日会员满100赠5元优惠劵
  3. 某些商店的会员在该商店有额外积分,额外等级,比如a商店白金会员,其他商店是金卡会员,那么打折a商店8折,其他商店9折

游戏

  1. 满多少钱抽奖环节
  2. 满多少钱有多少抽奖机会

练习结束后具备的能力/验收条件

  1. 对设计模式有一些了解
  2. 对OO的五个原则有大概的认识
  3. 对重构技巧更熟练,每一步都做简单的提升,而不是最后再做

第二问 Let’s GO 网上商城

前置学习

  1. HTML,CSS&JS DOM 起步第一问 或其他等价web开发基础课学会HTML,CSS,Javascript DOM操作
  2. HTML,CSS&JS DOM 起步第二问 或其他等价jQuery,Bootstrap课程

教学目的

对于已经学会的技术内容在不同上下文下的再应用

练习结束后具备的能力/验收条件:

  1. 符合POS机第一问结束后的代码标准和git提交标准
  2. Model和View的分离,使用js template
  3. 学会使用localStorage
  4. 对npm,nodejs有一些了解,可以本地起web服务

第三问 Let’s GO 网上商城在线版

教学目的

将数据放入数据库

练习结束后具备的能力/验收条件:

  1. 符合POS机第一问结束后的代码标准和git提交标准
  2. 对express框架有一些了解,能够了解routing等概念
  3. 使用ejs模板(因为他们对于html的熟悉程度还是不够,直接切换到jade等模板,只会觉得不会用)
  4. 学会使用mongodb去存取数据,在mongodb上完成第二问
  5. 服务端MVC与客户端MVC能分清楚

第四问 Let’s GO 网上商城的数据运行时修改

教学目的

思考数据抽象的极端情况,在运行时可以改变数据结构和类型。

第一小问

要求支持一切属性都可以在运行时设置,属性有类型,类型是基本数据类型,有显示名,有名字,

第二小问

要求属性支持可以是一种定义出来的类型,有值域,值域的类型是基本数据类型 要求属性支持多值,每个值还可以是自定义的类型 要有库存

典型的场景:

设置某品牌衣服类货物,有尺码,有库存,每个尺码都有库存,总库存是该尺码的库存。 某品牌的鞋子也有尺码,鞋子的尺码和衣服的尺码不一样,每个尺码都有库存,总库存是该尺码的库存 每个尺码都有对应的欧版,美版,也就是尺码的表示根据用户选择而不一样。

第五问 Let’s GO 网上商城的打折策略运行时修改

教学目的

思考过程抽象的极端情况,在运行时可以改变过程定义

第一小问

要求买二赠一的场景可以更灵活

支持表达式,逻辑运算和括号,基本数据类型的数学运算

第二小问

要求支持更多的优惠策略 要求数据结构要有版本,优惠策略也要有版本,优惠策略的版本要对应数据结构的版本。


Next Step: 刷怪 →

Fork me on GitHub