关于领域驱动设计的一些疑问点
看了一篇文章,大约内容是实现转账业务来说明DDD设计,然后代码如下
【如下代码实现业务:查找账号,判定是否账号余额等信息,可用金额信息等,然后最大转账额判定,然后什么可用转账额判定,然后记录明细】
public class AccountingServiceImpl implements AccountingService {
public void transfer(Long srcAccountId,Long destAccountId,BigDecimal amount) throws AccountingServiceException {
Account srcAccount = accountRepository.getAccount(srcAccountId);
Account destAccount = accountRepository.getAccount(destAccountId);
if(!srcAccount.isActive() || !destAccount.isActive())
throw new AccountingServiceException(AccountingService.ACCOUNT_IS_NOT_AVAILABLE);
BigDecimal availableAmount = srcAccount.getBalance().substract(srcAccount.getFrozenAmount());
if(availableAmount.compareTo(amount)<0)
throw new AccountingServiceException(AccountingService.BALANCE_IS_NOT_ENOUGH);
srcAccount.setBalance(srcAccount.getBalance().sbustract(amount));
destAccount.setBalance(destAccount.getBalance().add(amount));
}
}
文章作者巴拉巴拉说了一大堆什么业务逻辑判定多,什么代码多,什么DDD好处多,然后修改了DDD模式,然后贴出了部分代码。
public class AccountingServiceImpl implements AccountingService {
public void transfer(Long srcAccountId,Long destAccountId,BigDecimal amount) throws AccountDomainException {
Account srcAccount = accountRepository.getAccount(srcAccountId);
Account destAccount = accountRepository.getAccount(destAccountId);
srcAccount.transferTo(destAccount,amount);
}
}
然后巴拉巴拉如下内容:
我们可以看到,使用领域驱动设计至少会带来下述优点:
业务逻辑被合理的分散到不同的领域对象中,代码结构更加清晰,可读性,可维护性更高。
对象职责更加单一,内聚度更高。
复杂的业务模型可以通过领域建模(UML是一种主要方式)清晰的表达,开发人员甚至可以在不读源码的情况下就能了解业务和系统结构,这有利于对现存的系统进行维护和迭代开发。“”
我是没看明白,说了半天文章,只看到代码从一个应用层被且到了领域的实体接口里,这就介绍完了。
我就没明白,领域驱动就是分解应用层的一些业务判定逻辑转移到领域的实体接口里(并且实现)?最终的这些各种场景判断不还是免不了这些代码么?
【如下代码实现业务:查找账号,判定是否账号余额等信息,可用金额信息等,然后最大转账额判定,然后什么可用转账额判定,然后记录明细】
public class AccountingServiceImpl implements AccountingService {
public void transfer(Long srcAccountId,Long destAccountId,BigDecimal amount) throws AccountingServiceException {
Account srcAccount = accountRepository.getAccount(srcAccountId);
Account destAccount = accountRepository.getAccount(destAccountId);
if(!srcAccount.isActive() || !destAccount.isActive())
throw new AccountingServiceException(AccountingService.ACCOUNT_IS_NOT_AVAILABLE);
BigDecimal availableAmount = srcAccount.getBalance().substract(srcAccount.getFrozenAmount());
if(availableAmount.compareTo(amount)<0)
throw new AccountingServiceException(AccountingService.BALANCE_IS_NOT_ENOUGH);
srcAccount.setBalance(srcAccount.getBalance().sbustract(amount));
destAccount.setBalance(destAccount.getBalance().add(amount));
}
}
文章作者巴拉巴拉说了一大堆什么业务逻辑判定多,什么代码多,什么DDD好处多,然后修改了DDD模式,然后贴出了部分代码。
public class AccountingServiceImpl implements AccountingService {
public void transfer(Long srcAccountId,Long destAccountId,BigDecimal amount) throws AccountDomainException {
Account srcAccount = accountRepository.getAccount(srcAccountId);
Account destAccount = accountRepository.getAccount(destAccountId);
srcAccount.transferTo(destAccount,amount);
}
}
然后巴拉巴拉如下内容:
我们可以看到,使用领域驱动设计至少会带来下述优点:
业务逻辑被合理的分散到不同的领域对象中,代码结构更加清晰,可读性,可维护性更高。
对象职责更加单一,内聚度更高。
复杂的业务模型可以通过领域建模(UML是一种主要方式)清晰的表达,开发人员甚至可以在不读源码的情况下就能了解业务和系统结构,这有利于对现存的系统进行维护和迭代开发。“”
我是没看明白,说了半天文章,只看到代码从一个应用层被且到了领域的实体接口里,这就介绍完了。
我就没明白,领域驱动就是分解应用层的一些业务判定逻辑转移到领域的实体接口里(并且实现)?最终的这些各种场景判断不还是免不了这些代码么?
...全文
相关推荐
易混易错点一一般疑问句.doc
以上是对"易混易错点一一般疑问句"的详细解析,涵盖了一般疑问句的构成、动词时态、答复方式、常见短语用法以及特殊疑问句的转换等多个方面。
《实现领域驱动设计》中的源码
《实现领域驱动设计》这本书是领域驱动设计(Domain-Driven Design,简称DDD)领域的经典之作,作者埃里克·埃文斯深入探讨了如何通过软件设计来理解和处理复杂的业务问题。
疑问句大全_一般疑问句、特殊疑问句、选择疑问句、反意疑问句.doc
【疑问句类型详解】疑问句在英语中是用于询问信息或确认事实的句子,主要分为四类:一般疑问句、特殊疑问句、选择疑问句和反意疑问句。1.
北师大版特殊疑问词考点易错点的总结.docx
在做这类题目时,学生需要理解每个疑问词的含义,结合语境判断最合适的选项。通过反复练习和总结易错点,能帮助学生更好地掌握这些特殊疑问词的用法,提高他们的英语交际能力。
英语高考备考疑问词+ever与nomatter+疑问词用法.pdf
【知识点详解】在英语高考备考中,"疑问词+ever"和"no matter+疑问词"的用法是一项重要的语法点。



