Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/suzukiryuichiro/cookbook-reboot


https://github.com/suzukiryuichiro/cookbook-reboot

Last synced: 1 day ago
JSON representation

Awesome Lists containing this project

README

        

### 背景和目标

你现在要编写一个管理菜谱的 Cookbook 应用程序。

这个想法很简单:你喜欢烹饪,但你需要记住所有你喜欢的菜谱。这个应用程序就是你的食谱!它将保存你的菜谱列表,允许您`列出(list)`菜谱、`添加(add)`新菜谱和`删除(delete)`其他菜谱。

你将使用MVC**模式**构建此应用程序,Rails 也会使用这种模式:
- 模型(model):您要操作的基本对象是什么?
- 视图(view):这是我们**向用户显示信息**(`puts`)和**向用户请求信息**(`gets`)的地方。
- 控制器(controller):它将获取并存储模型的数据,并告诉视图向用户显示或收集数据。

请先用纸和笔确定组件及其职责!

## 详细说明

下面就是我们要开发的东西:

### 模型

幸运的是,我们已经在上一个练习中定义了 `Recipe` 类。现在我们需要做的就是把它复制到我们的cookbook应用程序里。将此命令复制到终端:

```bash
cp ../01-Recipe/lib/recipe.rb lib
```

这是将上一个练习中的 `recipe.rb` 文件复制保存到我们的cookbook应用程序的 `lib` 文件夹中。

### 存储库

我们现在需要一个结构来存储用户的食谱。因为我们还没有一个合适的数据库,所以我们将使用一个充当数据库的类(正如我们在讲座中看到的)。

当Ruby程序退出时,我们会丢失存储在变量中的所有数据。如果我们想在下次运行程序时索回数据,我们需要在硬盘上持久保存它们。

在这个挑战中,存储库存储用户添加的食谱。换句话说,它 **就是** **cookbook**。让我们将库存储类命名为 `Cookbook` ,以编写显式且有意义的代码,但请记住,它是今天上午图表中的 **存储库** !

在 `Cookbook` 类中添加4种方法:
- `initialize` 有的 `Recipe`
- `all` 返回所有的食谱
- `create(recipe)` 加了一个新的食谱到cookbook
- `destroy(recipe_index)` 从cookbook中删除一个食谱

### 控制器

控制器将从cookbook中收集数据,并将它们交给视图。它还将请求视图提供创建新配方的信息。以下是实现的方法:
- `initialize(cookbook)` 以 `Cookbook` 的实例作为参数。
- `list` (列出)所有的食谱
- `add` (增加)一个新的食谱
- `remove` (删除)一个现有食谱

_注意: 当一个 Ruby 程序退出时,我们会丢失所有存储在变量中的数据。这意味着每次终端进程退出时,你的 Cookbook 将会被"清空"。不过,这没有关系,我们将在下一个挑战中解决这个问题,所以请不要担心。_

### 视图

视图负责模型-视图-控制器的所有 `puts` 和 `gets` 。别忘了别在其他地方打这些代码(除非为了调试)。

### 把它绑在一起

准备就绪后,可以运行此代码去测试程序:

```bash
ruby lib/app.rb
```

我们需要 `app.rb` 里的代码去实例化一个 `Cookbook` 、 `Controller` ,并启动应用程序。在 `Router` 中有无限循环,因为这不是模型-视图-控制器的一部分。事实上,当你使用Rails时,这一切都将被视为理所当然,并为你完成。挺不错的😉

## 一些建议

Cookbook 非常有趣,但也是一个巨大的挑战,涉及大量文件!就像我们在讲座中所做的那样,一旦您实现了`Recipe`模型,请尝试逐一实现每个用户旅程。首先为应用程序添加第一个功能:添加新菜谱。为此,您需要在控制器中、视图中......使用哪些方法?

此外,在写代码时,有两个重要的东西可以帮助你:

- `rake`,它可以指导你并帮助你了解剩下要做的事情,所以一定要经常使用它 👌
- 使用 `ruby lib/app.rb` 运行你的应用程序,这样你就可以尝试你的用户之旅。错误信息可以引导你完成程序!

享受编程吧!

## 额外阅读

以下概念在软件体系结构中也很重要:
- [单一责任原则](http://en.wikipedia.org/wiki/Single_responsibility_principle) (需要VPN 🛡)
- [關注點分離](http://en.wikipedia.org/wiki/Separation_of_concerns) (需要VPN 🛡)