diff --git a/doc/目录结构.md b/doc/目录结构.md index 0b3051a..379ee9a 100644 --- a/doc/目录结构.md +++ b/doc/目录结构.md @@ -10,8 +10,9 @@ src/ │ │ └── events/ # 领域事件(如果需要) │ ├── application/ # 应用服务层 - 协调领域对象完成用例 │ │ └── services/ # 应用服务(如:ProductApplicationService) -│ ├── infrastructure/ # 基础设施层 - 领域层的具体实现 +│ ├── infr/ # 基础设施层 - 领域层的具体实现 │ │ └── api/ # 数据获取实现(如:HttpProductRepository) +│ │ └── config/ # 请求接口地址的配置 │ ├── ports/ # 端口(接口/抽象类)- 定义契约 │ │ └── repositories/ # 仓储接口(如:ProductRepository) │ └── use-cases/ # (可选)或将用例放在这里 diff --git a/front-end/main-app/src/app/components/Header.tsx b/front-end/main-app/src/app/components/Header.tsx index 837d0a2..90e3bb2 100644 --- a/front-end/main-app/src/app/components/Header.tsx +++ b/front-end/main-app/src/app/components/Header.tsx @@ -1,4 +1,4 @@ -import { defineComponent, defineEmits, onMounted} from 'vue' +import { defineComponent, defineEmits, onMounted, PropType } from 'vue' import type { JSX } from "vue/jsx-runtime"; export default defineComponent({ @@ -7,6 +7,11 @@ export default defineComponent({ text: { type: Array<{ id: number, title: string }>, default: () => [] + }, + // 点击事件 + onClick: { + type: Function as PropType<() => void>, + default: () => { } } }, emits: { @@ -30,13 +35,13 @@ export default defineComponent({ return () => (
-

头部组件

+

头部组件-点我

- { button() } + {button()} - { slots.default?.() } + {slots.default?.()} - { slots.header?.() } + {slots.header?.()}

作用于插槽:

diff --git a/front-end/main-app/src/app/views/Home.tsx b/front-end/main-app/src/app/views/Home.tsx index 390cca5..48ee3c2 100644 --- a/front-end/main-app/src/app/views/Home.tsx +++ b/front-end/main-app/src/app/views/Home.tsx @@ -45,7 +45,12 @@ export default defineComponent({ return () => (
-
+
{ + console.log("通过props自定义事件传给子组件"); + }} + onSendMessage={handleChildEvent}> {{ scoped: (item: ListItemType) =>
  • {item.title}
  • , header: () =>
    父到子 具名 插槽
    , diff --git a/front-end/main-app/src/domains/product/application/services/ProductApplicationService.ts b/front-end/main-app/src/domains/product/application/services/ProductApplicationService.ts index fcca2ab..aa42975 100644 --- a/front-end/main-app/src/domains/product/application/services/ProductApplicationService.ts +++ b/front-end/main-app/src/domains/product/application/services/ProductApplicationService.ts @@ -1,6 +1,10 @@ import { ErrorText } from "../../domain/enums/ErrorEnums"; import { ProductRepository } from "../../ports/repositories/ProductRepository"; +/** + * 商品应用服务 - 协调领域对象完成业务用例 + * 应用服务是领域层的外观,封装了领域逻辑的调用 + */ export class ProductApplicationService { // 依赖注入仓储接口,而不是具体实现 constructor(private productRepository: ProductRepository) { } diff --git a/front-end/main-app/src/domains/product/domain/entities/Product.ts b/front-end/main-app/src/domains/product/domain/entities/Product.ts index 17787b8..236f464 100644 --- a/front-end/main-app/src/domains/product/domain/entities/Product.ts +++ b/front-end/main-app/src/domains/product/domain/entities/Product.ts @@ -1,5 +1,9 @@ import { ErrorText } from "../enums/ErrorEnums" +/** + * 商品实体 - 包含商品的核心属性和行为 + * 在DDD中,实体具有唯一标识和生命周期 + */ export class Product { private readonly _id: number; private _name: string; diff --git a/front-end/main-app/src/domains/product/infr/api/HttpProductRepository.ts b/front-end/main-app/src/domains/product/infr/api/HttpProductRepository.ts index 6d30722..a73b072 100644 --- a/front-end/main-app/src/domains/product/infr/api/HttpProductRepository.ts +++ b/front-end/main-app/src/domains/product/infr/api/HttpProductRepository.ts @@ -2,23 +2,23 @@ import { Product } from "../../domain/entities/Product"; import { ProductType } from "../../domain/type/ProductType"; import { ProductRepository } from "../../ports/repositories/ProductRepository"; import http from "@shared/infra/AxiosInfra"; - +import HttpConfig from "../config/HttpConfig"; /** * HTTP商品仓储实现 - 实现商品数据的HTTP访问 - * 这是基础设施层,负责具体的数据获取实现 + * 这是基础设施层,负责具体的数据获取实现 */ export class HttpProductRepository implements ProductRepository { async findAll(): Promise> { - const result: Array = await http.get({ url: "/productsList" }); + const result: Array = await http.get({ url: HttpConfig.apiUrlList.productsListUrl }); const items = result.map((item) => Product.fromDTO(item)) return items; } async findById(id: number): Promise { const result: ProductType = await http.get({ - url: "/productsInfo", + url: HttpConfig.apiUrlList.productsInfoUrl, data: { id } }); return Product.fromDTO(result); diff --git a/front-end/main-app/src/domains/product/infr/config/HttpConfig.ts b/front-end/main-app/src/domains/product/infr/config/HttpConfig.ts new file mode 100644 index 0000000..3fd9fc2 --- /dev/null +++ b/front-end/main-app/src/domains/product/infr/config/HttpConfig.ts @@ -0,0 +1,11 @@ +interface apiUrlListType { + productsListUrl: string + productsInfoUrl: string +} + +export default class HttpConfig { + public static apiUrlList: apiUrlListType = { + productsListUrl: '/productsList', + productsInfoUrl: '/productsInfo', + } +}