Sto cercando di ridefinire un'applicazione complessa e grande per usare i principi DDD come e quando avrò tempo.
Ho una classe, che è completamente isolata dal dominio (è usata solo da un servizio applicativo) ma fa parte del linguaggio ubiquitario. Sembra questo (una vecchia versione di esso):
public class CurrencyCalculator
{
private readonly ICurrency currency;
public CurrencyCalculator(ICurrency currency)
{
this.currency = currency;
}
public IEnumerable<KeyValuePair<int, int>> CalculateDenominationsFor(int cost)
{
var target = cost;
foreach (var denomination in currency.AvailableDenominations.OrderByDescending(a => a))
{
var numberRequired = target / denomination;
if (numberRequired > 0)
{
yield return new KeyValuePair<int, int>(denomination, numberRequired);
}
target = target - (numberRequired * denomination);
}
}
}
La classe ha un front-end Web e un'applicazione front-end ed è utilizzata dai cassieri.
Così com'è; questa classe esiste in un progetto di libreria di classi a sé stante (con classe di valuta e interfaccia). Questo è un esempio di un servizio di dominio in terminolgia DDD ? (domanda principale) Dovrebbe essere in una libreria di classi chiamata: Core? (il nucleo dell'applicazione). Se la risposta è no, qual è questa classe - un'utilità?
Il motivo per cui lo chiedo è perché recentemente ho migliorato il mio modo di pensare a questo dominio. Tuttavia, non riesco a vedere come questa classe molto semplice si adatti al mio modello di dominio.
Aggiorna
Prima di rispondere; Ho due ulteriori pensieri:
1) La mia comprensione di un servizio di dominio è che viene utilizzata quando la logica non è adatta per un'entità e la logica si estende su più contesti / radici aggregate. È normale disporre di un servizio di dominio, che non fa riferimento a entità o oggetti valore (come in questo caso)?
2) Questa specifica applicazione è basata su CRUD e questa è l'unica classe Dominio. Pertanto sto pensando di spostarlo dal progetto Core (modello di dominio) al servizio di applicazione per semplificarlo. Immagino che questo potrebbe infrangere le regole DDD?