呃,叙事之前介绍背景总归是好的。那么,事情的经过是这样的:我们要做个小的项目,只是读写文件,不用连接数据库,也没什么复杂的逻辑。鉴于需求和实现都挺简单,于是我们就选择了 sinatra 这个框架。
那开发之初,在项目的根目录下,于是就有了一个 application.rb 的文件,一个 views 目录和 public 目录,当然还有万众期待(雾)的 README。
S01
Root Directory
|--public/
| |--CSS and JS here
|--views/
| |--HTML here
|--aplication.rb
|--README.md
后来随着开发的进行,我们需要一些额外的 gem,于是就建了 Gemfile 这个文件,用于控制 gem 和其版本。
S02
Root Directory
|--public/
| |--CSS and JS here
|--views/
| |--HTML here
|--aplication.rb
|--Gemfile
|--Gemfile.lock
|--README.md
前面说过我们要读文件嘛,然后有的文件解析比较复杂点,放在 application.rb 会没法看出重点,又没有现成的 gem 用,于是自己简单写了个,放在 lib 目录下面。
S03
Root Directory
|--lib/
| |--Some .rb files here
|--public/
| |--CSS and JS here
|--views/
| |--HTML here
|--aplication.rb
|--Gemfile
|--Gemfile.lock
|--README.md
后来项目需要进行一些数据的初始化,还需要一两个用于登陆的角色,鉴于之前都没用数据库,这里也只是把这些信息写在 yml 文件里,放在 config 这个目录下。
S04
Root Directory
|--config/
| |--config.yml
| |--user.yml
|--lib/
| |--Some .rb files here
|--public/
| |--CSS and JS here
|--views/
| |--HTML here
|--aplication.rb
|--Gemfile
|--Gemfile.lock
|--README.md
好,最后要部署了,加了 config.ru,然后还有些必要的文件,比如 tmp 和 log 这俩目录,那最终的结构就是这样的。
S05
Root Directory
|--config/
| |--config.yml
| |--user.yml
|--lib/
| |--Some .rb files here
|--log/
|--public/
| |--CSS and JS here
|--tmp/
|--views/
| |--HTML here
|--aplication.rb
|--config.ru
|--Gemfile
|--Gemfile.lock
|--README.md
目前已经基本就是这样,那么下一步的打算是拆分 application.rb,原因是这个文件日渐臃肿并且 configure,helper 和那些 get '/xxx' do; miao!; end
混在一个文件里,文件行数很多不太爽。于是我就好奇这个应该要怎么拆才好。
我希望像 rails 那样有个 app 目录,把 application.rb 拆出来的文件丢进去,但是仍然犹疑不决。
helper 单独拿出来,这个没啥争议。
configure 也可以拿出来,但是一般这个文件似乎是放在根目录下吧。
然后那堆get '/xxx' do; yeah!; end
,这种到底算是 routes 呢还是 controller 呢……十分纠结,我还写了一些 before filter,如果那些算作是 routes 的话,before filter 和 routes 放在一起似乎不太合适。
在 application.rb 里还有一部分是作为 http 基本验证的部分,类似use Rack::Auth::Basic do |username, password|
,似乎是独立的逻辑,不知往何处放。
我去 github(默哀)上参考了些 sinatra 的项目,似乎也没什么定式……
事情和我自己的想法就是这样,其实就现在的情况而言,我不去拆分 application.rb 也行,但是现在由于之前的 routes 写的不好,最终也免不了要改一番。如果是出于“这个文件不拆就看不下去”的理由,各位能否给点意见呢。