Per alcuni query in controller di Phoenix, Ci sono due piani per meDevo usare Ecto.Repo in Controller o Model per Elixir Phoenix?
Piano 1:
defmodule Demo.UserController do
# ...
def index do
# This is just for example
# The point is Repo in used here
Repo.all(User)
end
end
Piano 2:
defmodule Demo.User do
# ...
def all do
# Put all Repo API and building query logic in Model
Repo.all(__MODULE__)
end
end
preferisco il Piano 2. Poiché nella maggior parte situazioni, posso mettere tutta la logica sul recupero dei dati nel modello.
Ma trovo utilizzo guida ufficiale Plan 1 (docs/model) e di default Phoenix codice alias Repo
nel controller al posto del modello (web/web.ex)
Qual è la migliore? E perché?
Ciao, ho un'altra domanda su questo problema. Se metto chiamate Repo nel controller, come testare il modello? Proprio come il tuo esempio, dovrei usare Repo per inserire alcuni record, poi fare il test (sembra un test di integrazione) o semplicemente testare il risultato di 'order_by'? btw, non ho idea di come testare il risultato di 'order_by'. –
Nella programmazione di Phoenix si consiglia agli sviluppatori di disporre di due file di test nei test/modelli: user_test.exs e user_repo_test.exs. Il primo è possibile testare i changeset e tutto ciò che non richiede il repository. Il vantaggio è che puoi eseguire "async: true" in alto. L'altro richiede il repository e potrebbe essere il posto in cui testare query complesse. Tutto dipende dal tipo di test che si desidera scrivere. –