模型表达
根据分层架构确立了代码构造后,我们须要起首定义清跋扈我们的模型。如前面讲到的,这里重要涉及的是大年夜战术建模过程中获得的核心实体和办事的定义。我们应用C++头文件(.h文件)来展示一个Domain模型的定义,案例灵感来源竽暌冠DDD原著里的集装箱货允攀例子。
- TEST(bc_demo_test, delay_cargo)
- {
- api::Api* api = createApi();
- api::CreateCargoMsg* msg = new api::CreateCargoMsg();
- msg->Id = ID;
- msg->AfterDays = AFTER_DAYS;
- api->CreateCargo(msg);
- api->Delay(ID,2);
- EXPECT_EQ(ID, provider->cargo_id);
- EXPECT_EQ(12, provider->after_days);
- }
- namespace domain{
- struct Entity
- {
- int getId();
- protected:
- int id;
- };
- struct AggregateRoot: Entity
- {
- };
- struct ValueObject
- {
- };
- struct Provider
- {
- };
- struct Delivery: ValueObject
- {
- Delivery(int);
- int AfterDays;
- };
- struct Cargo: AggregateRoot
- {
- Cargo(Delivery*, int);
- ~Cargo();
- void Delay(int);
- private:
- Delivery* delivery;
- };
- }
这个实现起首申清楚明了元模型实体Entity和值对象ValueObject。实体必定会有一个标识id。在实体的基本上声清楚明了DDD中的重要元素聚合根 AggregateRoot。根据定义,聚合根本身就应当是一个实体,所以AggregateRoot持续了Entity。
这个案例中我们定义了一个实体Cargo,同时也是一个聚合根。Delivery是一个值对象。固然这里为了实现效力采取的是struct,在C++里可以懂得为定义一个class类。
依附关系
代码目次构造并不克不及表达分层体系中各层的依附关系,比如Domain层是不该该依附于其它任何一层的。保护各层的依附关系是至关重要的,很多团队在实施的过程中都没有可以或许建立起如许的工程规律,最后造成代码构造的纷乱,范畴模型也被打破。
根据分层架构的规矩,我们可以看到示例中的代码构造如下图。
Domain是不依附于任何的其它对象的。Repositories是依附于Domain的,实现如下:引用了model.h。
- #include "model.h"
- #include <vector>
- using namespace domain;
- namespace repositories {
- struct Repository
- {
- };
- ...
Services是依附于Domain和Repositories的,实现如下:引用了model.h和repository.h
- #include "model.h"
推荐阅读
知道什么时刻做什么 【编辑推荐】JetBrains 的 Go 集成开辟情况已肯定最终名称:GoLandJDK 10 早期试用版宣布,Java 开辟对象包高等码农进步90%开辟效力的对象推荐晋升Web开辟机能的10个技>>>详细阅读
本文标题:DDD实战篇:分层架构的代码结构
地址:http://www.17bianji.com/lsqh/38634.html
1/2 1