Cómo escribir la funcionalidad utilizando DDD / CQRS
Tengo un dominio de cuenta bancaria como se indica a continuación. Puede haber SavingsAccount, LoanAccount, FixedAccount y así sucesivamente. Un usuario puede tener múltiples cuentas. Necesito agregar una nueva funcionalidad: obtener todas las cuentas de un usuario. ¿Dónde debería estar escrita la función y cómo?
Sería genial si la solución sigue los principios SÓLIDOS (principio Abierto-cerrado, ...) y DDD.
Cualquier refactorización que mejore el código es bienvenida.
Nota: el AccountManipulator será utilizado por un cliente del sitio web a través de un servicio web.
namespace BankAccountBL
{
public class AccountManipulator
{
//Whether it should beprivate or public?
private IAccount acc;
public AccountManipulator(int accountNumber)
{
acc = AccountFactory.GetAccount(accountNumber);
}
public void FreezeAccount()
{
acc.Freeze();
}
}
public interface IAccount
{
void Freeze();
}
public class AccountFactory
{
public static IAccount GetAccount(int accountNumber)
{
return new SavingsAccount(accountNumber);
}
}
public class SavingsAccount : IAccount
{
public SavingsAccount(int accountNumber)
{
}
public void Freeze()
{
}
}
}
LEYENDO:
¿Cuándo usar el patrón de diseño CQRS?
Lógica de dominio de refactorización que accede a los repositorios en un sistema heredado
¿Cuál de estos ejemplos representa el uso correcto de DDD?
Buenos ejemplos de diseño impulsado por dominio
¿Ventajas de crear un repositorio genérico frente a un repositorio específico para cada objeto?