Questo è il mio primo tentativo di sviluppare un'applicazione utilizzando alcune delle idee alla base di DDD. È un'applicazione monolite di Rails (almeno per ora). So che non sono severo con DDD, ma sto cercando di concentrarmi sulla separazione dei miei domini che sembra il concetto più importante.
Penso che questa sia una domanda abbastanza rudimentale e sono sicuro che userò la terminologia DDD sbagliata, ma qui andiamo ...
Ho due domini:
- CRM (contatti, aziende, filiali, persone, ecc.)
- Citando (citazioni, quote, valuta, ecc.)
Nel dominio Quoting, il mio modello di preventivo si collega a un contact_id e company_id nel dominio CRM.
In una pagina del dominio CRM voglio elencare tutte le virgolette che appartengono a una società.
Il codice è qualcosa del tipo:
module CRM
class QuotesController
def index
@company = Company.find params[:company_id]
@quotes = Quoting::Quote.for_company(@company.id)
end
In questa pagina voglio mostrare chi ha creato ogni preventivo e non sono sicuro di quale sia il modo migliore. La colonna contact_id nei collegamenti di citazione al CRM :: modello di contatto, e il CRM :: links modello a modello persona CRM :: che include il nome.
Senza pensare al DDD, avrei fatto qualcosa di simile (questo è semplificato) (sì, so che non sto usando le associazioni qui):
module Quoting
class Quote < ApplicationRecord
belongs_to :company, class_name: "CRM::Company"
belongs_to :contact, class_name: "CRM::Contact"
class << self
def for_company(company_id)
Quote.where(company_id: company_id)
.includes(contact: :person) <--- feels like it shouldn't be here
end
end
end
end
Nella vista:
@quotes.each do |quote|
%tr
%td= quote.contact.person.name (or quote.contact_name)
Il mio problema con questa è la riga .includes(contact: :person)
che include la conoscenza di un altro dominio, cioè sa che il nome è all'interno del record personale. Se la mia implementazione interna di Contatti / Persone cambia, ovviamente anche questo dominio di quotazione fallirà.
Come è possibile farlo in uno stile più DDD?
Avrei un nuovo modello di Quote nel mio dominio CRM che eseguirà 2 query e le collocherai in un nuovo modello?
Grazie!