2013-06-15 14 views
5

Mi chiedevo se qualcuno potesse semplificare la spiegazione di cosa sia Modular all'interno di un'app di Sinatra. Vedo che c'è una configurazione classica e una configurazione modulare all'interno di sinatra, ma dalla lettura dei documenti non riesco a capire cosa sta facendo Modular.Cosa si intende per Modular in Sinatra?

Mi piacerebbe una spiegazione al livello di base, se possibile, e perché inserire questo in profile.rb cambierebbe la configurazione dell'app (se questo è il caso). Tieni presente che sono un principiante, quindi le spiegazioni più semplici e complete sono le migliori!

require 'rubygems' 
require 'sinatra' 

class Profile < Sinatra::Base 

get '/' do 
erb :index 
end 


end 

risposta

3

Ciò significa che è possibile creare uno o più applicazioni Sinatra come quello avete descritto nella sua interrogazione, come moduli indipendenti all'interno della stessa super-app, per esempio legati insieme utilizzando Rack#map:

# config.ru 

require 'app1' 
require 'app2' 

run Rack::Builder.new { 
    map "/app1" do 
    run App1.new 
    end 

    map "/app2" do 
    run App2.new 
    end 
} 
+0

quindi, a meno che non desideri eseguire due app all'interno della super-app come dici tu, è più vantaggioso utilizzarlo rispetto alla configurazione classica? – Richlewis

+0

Nessun vantaggio. Per inciso, se vuoi due esempi eccellenti di app Sinatra, dai un'occhiata a [Github Services] (https://github.com/github/github-services) (non modulare nel senso di Sinatra se la memoria serve, ma sicuramente modulare in pratica) e [Padrino] (http://www.padrinorb.com) (modulare a tutti i livelli). –

2

A livello concettuale puoi pensare modulare come blocchi di costruzione. Se si potesse prendere un'app esistente e tagliarla in un numero arbitrario di blocchi basato sulla funzionalità di ciascun blocco, sarebbe un progetto modulare. Un altro modo di pensarlo è proprio come mixin regolari in Ruby. Invece di definire gli stessi metodi in molti posti diversi, è possibile definire i metodi in un modulo e quindi includere il modulo in tutti i punti in cui si richiedono i metodi. Si può pensare a modulare allo stesso modo di Sinatra, ma invece di metodi si usano gli elementi modulari di un'app da utilizzare in diverse istanze della stessa app o di diverse app. Quindi è essenzialmente la costruzione di componenti riutilizzabili.

Dai un'occhiata a questo stackoverflow question per un bell'esempio di utilizzo di componenti per diverse istanze della stessa app.

Nel tuo esempio, dipende da quale è il tuo obiettivo nella creazione dell'app. Quando si utilizza Sinatra :: Base la maggior parte delle opzioni sono disabilitate per impostazione predefinita, è necessario configure the options che si desidera utilizzare. Inoltre, nel tuo esempio devi richiedere 'sinatra/base' invece di richiedere 'sinatra'. Essenzialmente Sinatra :: Base è una "lavagna vuota" e la maggior parte delle opzioni sono disabilitate di default.

Problemi correlati