Como escrever funcionalidade usando DDD / CQRS
Eu tenho um domínio de conta bancária, conforme listado abaixo. Pode haver SavingsAccount, LoanAccount, FixedAccount e assim por diante. Um usuário pode ter várias contas. Eu preciso adicionar uma nova funcionalidade - obter todas as contas para um usuário. Onde deveria estar a função escrita e como?
Seria ótimo se a solução seguisse os princípios do SOLID (princípio Open-Closed, ...) e DDD.
Qualquer refatoração que torne o código melhor é bem-vinda.
Nota: O AccountManipulator será usado por um cliente do site em um serviço da 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()
{
}
}
}
LEITURA:
Quando usar o padrão de design CQRS?
Refatorando lógica de domínio que acessa repositórios em um sistema legado
Quais destes exemplos representam o uso correto de DDD?
Amostras de design orientado por bom domínio
Vantagem de criar um repositório genérico versus repositório específico para cada objeto?