COLA 4.x和DDD项目实践精粹

Posted 领域驱动设计 DDD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了COLA 4.x和DDD项目实践精粹相关的知识,希望对你有一定的参考价值。

在《COLA 4.x架构入门和项目实践》专栏基础之上,对项目开发实践进行了提炼和总结;同时,针对其中的一些知识点进行扩展和延伸。
 
专栏介绍
领域驱动设计(Domain Driven Design - DDD)起源于2003年Eric Evans出版《领域驱动设计》。
 
领域驱动设计DDD最大的好处是将业务语义显现化,把原先晦涩难懂的业务算法逻辑,通过领域对象、统一语言将领域概念清晰的显性化表达出来。
 
如果整个系统都采用DDD进行领域建模,不仅代码的可读性和系统的可维护性会大大提升,系统之间的边界和交互也会更加的清晰。
 
COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”,是来自阿里技术专家的开源项目。COLA 4.0本质就是:代码规范+可复用组件+充血领域模型。
本技术专栏在《COLA 4.x架构入门和项目实践》基础之上,对基于COLA架构的项目开发实践进行了提炼和总结;同时,针对其中的一些知识点进行扩展和延伸,包括COLA架构、CQRS模式、代码落地实践和建议规则、领域事件多种实现方式、聚合根工厂模式、MapStruct实体映射工具开发实践等等。
 
 
专栏大纲
本专栏中首先总结了COLA分层架构和CQRS架构模式在DDD项目落地实践中的一些经验分享和建议规则;然后重点介绍了基于Guava EventBus、Spring框架中事件机制、以及Kafka消息中间件,实现领域事件的发布订阅功能;最后,还分享了聚合根工厂模式的必要性和开发实践,以及推荐MapStruct实体映射工具在DDD-COLA项目中应用等等。
专栏主要内容如下:
  • 阿里开源COLA架构中模块职责分析和建议包结构参考模型;
  • COLA分层架构、CQRS架构模式和业务调用时序图;
  • 领域驱动设计DDD和COLA架构各模块代码落地实践;
  • 领域驱动设计DDD和COLA架构落地实践建议规则;
  • 基于Guava EventBus实现领域事件落地实践-事件总线入门;
  • 基于Guava EventBus实现领域事件落地实践-创建领域事件和发布器;
  • 基于Guava EventBus实现领域事件落地实践-创建Guava领域事件发布器;
  • 基于Guava EventBus实现领域事件落地实践-发布领域事件;
  • 基于Guava EventBus实现领域事件落地实践-订阅并处理领域事件;
  • 基于Guava EventBus实现领域事件落地实践-监听领域事件并发送邮件;
  • 基于Spring ApplicationListener和ApplicationEvent实现领域事件落地实践;
  • 基于Spring @EventListener注解实现领域事件落地实践;
  • 基于消息中间件Kafka实现领域事件落地-配置kafka主题和生产者;
  • 基于消息中间件Kafka实现领域事件落地实践-创建领域事件发布器和领域事件;
  • 基于消息中间件Kafka实现领域事件落地实践-处理领域事件;
  • 领域驱动设计DDD开发实践-为什么需要引入工厂模式?
  • Order聚合、聚合根和OrderFactory工厂的详细实现;
  • 分层架构、数据模型、转换器和MapStruct实体映射工具;
  • MapStruct实体映射工具在COLA应用项目中的开发实践;
  • COLA 4.x和DDD项目实践精粹:示例项目介绍;

 

ACM-The Coco-Cola Store

题目:

Once upon a time, there is a special coco-cola store. If you return three empty bottles to the shop, you‘ll get a full bottle of coco-cola to drink. If you have n empty bottles right in your hand, how many full bottles of coco-cola can you drink?

输入

There will be at most 10 test cases, each containing a single line with an integer n (1<=n<=100). The input terminates with n = 0, which should not be processed

输出

For each test case, print the number of full bottles of coco-cola that you can drink.

样例输入

3
10
81
0

样例输出

1
5
40

题意:3个空瓶子换一瓶可乐,注意2个空瓶子的时候,借一个空瓶子的情况。

AC code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
  int n;
  while(scanf("%d", &n),n){
      int sum = 0;
      while(n>=2){
          if(n ==2){
            n++;
          }else{
            sum += n/3;
            n = n/3+n%3;
          }
      }
      cout<<sum<<endl;
   }
 return 0;
}

 

 

 

以上是关于COLA 4.x和DDD项目实践精粹的主要内容,如果未能解决你的问题,请参考以下文章

COLA 4.0应用架构和DDD经典项目实践:货物运输系统

领域驱动设计(DDD)实践之路(第二篇)

DDD领域驱动设计落地实践系列:初识DDD

探秘微信业务优化:DDD从入门到实践

阿里开源COLA 4.0源码编译和部署过程

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则