全栈架构蓝图 —— 作者:王教成#
Kotlin 跨平台全栈架构蓝图:纵向 10 模块 × 横向 12 层的 SpringBoot+MySQL + 多平台实践#
1. 服务端 Database#
L0 业务生态层:确定数据库在业务生态中的核心功能(如电商平台的订单数据中枢)
L1 系统层:设计 MySQL 高可用架构(主从集群+读写分离+自动故障转移)
L2 子系统层:按业务域划分物理数据库(用户库/订单库/库存库)并定义数据同步机制
L3 安全架构层:实施传输层加密(TLS1.3)和列级数据加密(AES-256)
L4 模块层:定义核心模块结构(用户管理模块表集合及关系)
L5 包结构层:组织版本化迁移脚本目录(/database/migrations/V1.0__core_schema.sql)
L6 类与接口层:设计表结构(字段类型/主外键/索引策略)
L7 方法层:编写存储过程实现业务逻辑(如计算用户消费等级)
L8 代码块层:构建事务控制块(START TRANSACTION; UPDATE; INSERT; COMMIT;)
L9 语句层:执行 DDL 定义语句(CREATE TABLE users(id BIGINT AUTO_INCREMENT PRIMARY KEY))
L10 表达式层:优化查询表达式(WHERE status = 'ACTIVE' AND last_login > NOW() - INTERVAL 30 DAY)
L11 原子操作层:设置约束条件(UNIQUE(email), NOT NULL(username))
2. 服务端 Entity#
L0 业务生态层:无
L1 系统层:配置 Hibernate 二级缓存及批量处理参数(hibernate.cache.use_second_level_cache=true)
L2 子系统层:按业务域分包(com.ecommerce.user.entity 包含User/Profile实体)
L3 安全架构层:实施字段级加密(@Convert(converter = PasswordEncryptor.class))
L4 模块层:构建 domain 模块包含实体扫描路径(@EntityScan(basePackages = "com.ecommerce"))
L5 包结构层:组织实体分层包(.entity/.embeddable/.enums)
L6 类与接口层:定义 JPA 实体类(@Entity @Table(name="users") class User)
L7 方法层:实现审计回调方法(@LastModifiedDate private LocalDateTime updatedAt)
L8 代码块层:构建字段校验块(if (email.isEmpty()) throw new InvalidEntityException())
L9 语句层:声明映射关系(@OneToMany(mappedBy = "user", cascade = CascadeType.ALL))
L10 表达式层:配置懒加载策略(@ManyToOne(fetch = FetchType.LAZY))
L11 原子操作层:生成equals()/hashCode()方法
3. 服务端 Repository#
L0 业务生态层:无
L1 系统层:配置 Spring Data JPA 查询策略(方法名解析/分页配置)
L2 子系统层:按聚合根分包(com.ecommerce.order.repository 包含Order/LineItem)
L3 安全架构层:实现行级安全过滤(@PostFilter("hasPermission(filterObject, 'READ')"))
L4 模块层:创建 repository 模块包含 JPA 仓库扫描(@EnableJpaRepositories)
L5 包结构层:组织仓库分层(.repository/.custom/.projection)
L6 类与接口层:声明仓库接口(interface OrderRepository extends JpaRepository<Order, Long>)
L7 方法层:定义动态查询方法(Page<Order> findByUserId(Long userId, Pageable pageable))
L8 代码块层:构建@Query注解块(@Query("SELECT o FROM Order o WHERE o.status = :status"))
L9 语句层:声明派生查询(List<Order> findByCreatedAtBetween(LocalDate start, LocalDate end))
L10 表达式层:使用 SpEL 安全表达式(@Query("SELECT u FROM #{#entityName} u WHERE u.active = true"))
L11 原子操作层:执行flush操作(saveAndFlush(entity))
4. 服务端 Service#
L0 业务生态层:无
L1 系统层:集成分布式事务(Seata AT模式+回滚日志)
L2 子系统层:按业务能力划分服务边界(PaymentService/InventoryService)
L3 安全架构层:实施方法级权限控制(@PreAuthorize("hasRole('ADMIN') or #userId == principal.id"))
L4 模块层:创建 service 模块配置事务管理器(@EnableTransactionManagement)
L5 包结构层:组织服务分层(.api/.impl/.event)
L6 类与接口层:实现服务类(@Service @Transactional(propagation=REQUIRED) class OrderServiceImpl)
L7 方法层:编写核心业务逻辑(Order createOrder(Cart cart) 扣减库存生成订单发消息)
L8 代码块层:构建事务控制块(@Transactional(timeout=30, rollbackFor=BusinessException.class))
L9 语句层:触发领域事件(applicationEventPublisher.publishEvent(new OrderCreatedEvent(this)))
L10 表达式层:使用 EL 表达业务规则(if (user.getLevel() >= VIP_LEVEL) applyDiscount(15%))
L11 原子操作层:执行空安全调用(user?.address ?: throw AddressRequiredException())
5. 服务端 Controller#
L0 业务生态层:无
L1 系统层:制定 OpenAPI 3.0 规范并配置 Swagger(@OpenAPIDefinition)
L2 子系统层:设置 API 网关路由规则(/order-service 路由到订单集群)
L3 安全架构层:实施 JWT 认证(@AuthenticationPrincipal JwtUserDetails)
L4 模块层:创建 web 模块配置消息转换器(HttpMessageConverters)
L5 包结构层:组织控制器分包(.controller.user/.controller.order)
L6 类与接口层:定义 RestController(@RestController @RequestMapping("/api/orders"))
L7 方法层:声明端点方法(@PostMapping @ResponseStatus(CREATED) fun createOrder())
L8 代码块层:构建参数校验块(@Valid @RequestBody OrderCreateDTO dto, BindingResult result)
L9 语句层:返回标准化响应(ResponseEntity.status(CREATED).body(OrderResponse.from(order)))
L10 表达式层:使用 MapStruct 转换表达式(OrderMapper.INSTANCE.toDTO(domainEntity))
L11 原子操作层:设置响应头(headers.setLocation(ServletUriComponentsBuilder.fromCurrentRequest()))
6. 客户端 数据源 (多平台)#
L0 业务生态层:无
L1 系统层:配置 Ktor Client 多平台网络栈(HttpClient + 30s超时 + GraphQL支持)
L2 子系统层:无
L3 安全架构层:实施统一认证机制(JWT自动刷新 + 平台特定安全存储)
L4 模块层:构建network模块封装跨平台网络请求
L5 包结构层:组织数据源分层(.graphql/.api/.interceptor)
L6 类与接口层:定义通用数据源接口(interface ApiService { suspend fun query<T>(query: String): T })
L7 方法层:声明响应式数据流(fun getProducts(): Flow<ProductDTO>)
L8 代码块层:构建指数退避重试逻辑(retryWhen { e, attempt -> if (e is TimeoutCancellationException && attempt < 3) })
L9 语句层:执行跨平台网络调用(withContext(Dispatchers.Default) { apiService.fetchData() })
L10 表达式层:使用 kotlinx.serialization 解析(Json.decodeFromString<T>(response))
L11 原子操作层:添加平台识别头(headers.append("Platform", Platform.platformName))
7. 客户端 存储层 (多平台)#
L0 业务生态层:无
L1 系统层:设计统一缓存策略(内存缓存 + SqlDelight持久化 + 自动同步)
L2 子系统层:无
L3 安全架构层:实施本地数据加密(平台特定安全存储)
L4 模块层:创建storage模块实现数据协调
L5 包结构层:组织存储实现(.cache/.database/.preference)
L6 类与接口层:实现智能缓存仓库(class SmartCacheRepository<T>(...))
L7 方法层:编写混合数据获取(先读本地缓存,无则网络请求并更新缓存)
L8 代码块层:构建缓存过期控制(if (lastUpdated.isBefore(now - 5.minutes)) refreshRemote())
L9 语句层:执行跨平台数据库查询(db.userQueries.getById(id).executeAsOneOrNull())
L10 表达式层:使用扩展函数转换(networkDTO.toDomainEntity())
L11 原子操作层:发射数据到 StateFlow(_dataState.emit(Result.success(data)))
8. 客户端 业务逻辑 (多平台)#
L0 业务生态层:无
L1 系统层:制定跨平台用例规范(纯Kotlin实现 + 单一职责原则)
L2 子系统层:无
L3 安全架构层:实施统一权限检查(if (!sessionManager.hasPermission(required)) throw PermissionDenied())
L4 模块层:定义domain模块包含业务规则
L5 包结构层:组织用例包(.usecase.user/.usecase.order)
L6 类与接口层:创建平台无关用例类(class CheckoutUseCase @Inject constructor(val repo: CartRepo))
L7 方法层:实现核心业务逻辑(suspend operator fun invoke():验证库存→计算总额→提交订单)
L8 代码块层:构建错误转换块(catch { e -> when(e) { is NetworkException -> ... } })
L9 语句层:调用仓库方法(val cart = cartRepo.getCart().first())
L10 表达式层:使用 require 校验参数(require(cart.items.isNotEmpty()))
L11 原子操作层:构建领域对象(Order.createFromCart(cart, userId))
9. 客户端 状态管理 (多平台)#
L0 业务生态层:无
L1 系统层:配置统一状态管理(StateFlow + MVI模式)
L2 子系统层:无
L3 安全架构层:实现会话过期处理(catch (e: UnauthorizedException) { _state.value = SessionExpired })
L4 模块层:创建presentation模块定义状态容器
L5 包结构层:组织 ViewModel 分包(.viewmodel.user/.viewmodel.product)
L6 类与接口层:定义通用状态容器(class UserViewModel : KoinComponent { ... })
L7 方法层:编写状态更新方法(fun loadData() { viewModelScope.launch { ... } })
L8 代码块层:构建状态转换块(private fun mapToUiState(data: T): UiState)
L9 语句层:更新 UI 状态(_state.update { it.copy(data = data, loading = false) })
L10 表达式层:使用密封类状态转换(when(result) { is Success -> UiState.Data(...) })
L11 原子操作层:调用 UseCase 方法(val result = getUserUseCase(userId))
10. 客户端 UI 层 (平台特定实现)#
L0 业务生态层:设计统一用户旅程路径(注册→登录→主页→详情→支付)
L1 系统层:采用平台 UI 框架(Android: Jetpack Compose/iOS: SwiftUI/Web: Compose for Web)
L2 子系统层:无
L3 安全架构层:实现界面防劫持(Android: onPause模糊/iOS: willResignActive模糊/Web: blur事件处理)
L4 模块层:构建ui主模块含主题配置
L5 包结构层:组织 UI 组件包(.screen.login/.screen.cart/.component)
L6 类与接口层:定义平台 UI 组件(Android: @Composable fun/iOS: struct View: View/Web: fun Render())
L7 方法层:编写事件处理函数(val onLogin = { viewModel.login(credentials) })
L8 代码块层:构建状态响应渲染块(when(state) { Loading -> 显示加载指示器 })
L9 语句层:组合 UI 元素(Android: Column { }/iOS: VStack { }/Web: Div { })
L10 表达式层:使用动画表达式(Android: AnimatedVisibility/iOS: withAnimation/Web: animate {})
L11 原子操作层:设置文本属性(Android: Text(...)/iOS: Text(...)/Web: Span { Text(...) })
Kotlin 全栈架构蓝图:纵向 10 模块 × 横向 12 层的 SpringBoot+MySQL+Android 实践#
1. 服务端 Database#
L0 业务生态层:确定数据库在业务生态中的核心功能(如电商平台的订单数据中枢)
L1 系统层:设计 MySQL 高可用架构(主从集群+读写分离+自动故障转移)
L2 子系统层:按业务域划分物理数据库(用户库/订单库/库存库)并定义数据同步机制
L3 安全架构层:实施传输层加密(TLS1.3)和列级数据加密(AES-256)
L4 模块层:定义核心模块结构(用户管理模块表集合及关系)
L5 包结构层:组织版本化迁移脚本目录(/database/migrations/V1.0__core_schema.sql)
L6 类与接口层:设计表结构(字段类型/主外键/索引策略)
L7 方法层:编写存储过程实现业务逻辑(如计算用户消费等级)
L8 代码块层:构建事务控制块(START TRANSACTION; UPDATE; INSERT; COMMIT;)
L9 语句层:执行 DDL 定义语句(CREATE TABLE users(id BIGINT AUTO_INCREMENT PRIMARY KEY))
L10 表达式层:优化查询表达式(WHERE status = 'ACTIVE' AND last_login > NOW() - INTERVAL 30 DAY)
L11 原子操作层:设置约束条件(UNIQUE(email), NOT NULL(username))
2. 服务端 Entity#
L0 业务生态层:无
L1 系统层:配置 Hibernate 二级缓存及批量处理参数(hibernate.cache.use_second_level_cache=true)
L2 子系统层:按业务域分包(com.ecommerce.user.entity 包含User/Profile实体)
L3 安全架构层:实施字段级加密(@Convert(converter = PasswordEncryptor.class))
L4 模块层:构建 domain 模块包含实体扫描路径(@EntityScan(basePackages = "com.ecommerce"))
L5 包结构层:组织实体分层包(.entity/.embeddable/.enums)
L6 类与接口层:定义 JPA 实体类(@Entity @Table(name="users") class User)
L7 方法层:实现审计回调方法(@LastModifiedDate private LocalDateTime updatedAt)
L8 代码块层:构建字段校验块(if (email.isEmpty()) throw new InvalidEntityException())
L9 语句层:声明映射关系(@OneToMany(mappedBy = "user", cascade = CascadeType.ALL))
L10 表达式层:配置懒加载策略(@ManyToOne(fetch = FetchType.LAZY))
L11 原子操作层:生成equals()/hashCode()方法
3. 服务端 Repository#
L0 业务生态层:无
L1 系统层:配置 Spring Data JPA 查询策略(方法名解析/分页配置)
L2 子系统层:按聚合根分包(com.ecommerce.order.repository 包含Order/LineItem)
L3 安全架构层:实现行级安全过滤(@PostFilter("hasPermission(filterObject, 'READ')"))
L4 模块层:创建 repository 模块包含 JPA 仓库扫描(@EnableJpaRepositories)
L5 包结构层:组织仓库分层(.repository/.custom/.projection)
L6 类与接口层:声明仓库接口(interface OrderRepository extends JpaRepository<Order, Long>)
L7 方法层:定义动态查询方法(Page<Order> findByUserId(Long userId, Pageable pageable))
L8 代码块层:构建@Query注解块(@Query("SELECT o FROM Order o WHERE o.status = :status"))
L9 语句层:声明派生查询(List<Order> findByCreatedAtBetween(LocalDate start, LocalDate end))
L10 表达式层:使用 SpEL 安全表达式(@Query("SELECT u FROM #{#entityName} u WHERE u.active = true"))
L11 原子操作层:执行flush操作(saveAndFlush(entity))
4. 服务端 Service#
L0 业务生态层:无
L1 系统层:集成分布式事务(Seata AT模式+回滚日志)
L2 子系统层:按业务能力划分服务边界(PaymentService/InventoryService)
L3 安全架构层:实施方法级权限控制(@PreAuthorize("hasRole('ADMIN') or #userId == principal.id"))
L4 模块层:创建 service 模块配置事务管理器(@EnableTransactionManagement)
L5 包结构层:组织服务分层(.api/.impl/.event)
L6 类与接口层:实现服务类(@Service @Transactional(propagation=REQUIRED) class OrderServiceImpl)
L7 方法层:编写核心业务逻辑(Order createOrder(Cart cart) 扣减库存生成订单发消息)
L8 代码块层:构建事务控制块(@Transactional(timeout=30, rollbackFor=BusinessException.class))
L9 语句层:触发领域事件(applicationEventPublisher.publishEvent(new OrderCreatedEvent(this)))
L10 表达式层:使用 EL 表达业务规则(if (user.getLevel() >= VIP_LEVEL) applyDiscount(15%))
L11 原子操作层:执行空安全调用(user?.address ?: throw AddressRequiredException())
5. 服务端 Controller#
L0 业务生态层:无
L1 系统层:制定 OpenAPI 3.0 规范并配置 Swagger(@OpenAPIDefinition)
L2 子系统层:设置 API 网关路由规则(/order-service 路由到订单集群)
L3 安全架构层:实施 JWT 认证(@AuthenticationPrincipal JwtUserDetails)
L4 模块层:创建 web 模块配置消息转换器(HttpMessageConverters)
L5 包结构层:组织控制器分包(.controller.user/.controller.order)
L6 类与接口层:定义 RestController(@RestController @RequestMapping("/api/orders"))
L7 方法层:声明端点方法(@PostMapping @ResponseStatus(CREATED) fun createOrder())
L8 代码块层:构建参数校验块(@Valid @RequestBody OrderCreateDTO dto, BindingResult result)
L9 语句层:返回标准化响应(ResponseEntity.status(CREATED).body(OrderResponse.from(order)))
L10 表达式层:使用 MapStruct 转换表达式(OrderMapper.INSTANCE.toDTO(domainEntity))
L11 原子操作层:设置响应头(headers.setLocation(ServletUriComponentsBuilder.fromCurrentRequest()))
6. 客户端 数据源(Android)#
L0 业务生态层:无
L1 系统层:配置 Retrofit(GsonConverterFactory + 30s超时 + 缓存控制)
L2 子系统层:无
L3 安全架构层:实施证书绑定(CertificatePinner.Builder())
L4 模块层:构建data-source模块封装网络请求
L5 包结构层:组织数据源分层(.api/.retrofit/.local)
L6 类与接口层:定义 Retrofit 接口(@GET("users/{id}") suspend fun getUser(@Path("id") id: Long): UserDTO)
L7 方法层:声明流式数据获取(fun getProducts(): Flow<ProductDTO>)
L8 代码块层:构建重试逻辑块(retryWhen { e, attempt -> if (e is SocketTimeoutException && attempt < 3) })
L9 语句层:执行网络调用(withContext(Dispatchers.IO) { apiService.fetchData() })
L10 表达式层:使用 kotlinx.serialization 解析(Json.decodeFromString<UserDTO>(response))
L11 原子操作层:添加认证头(request.addHeader("Authorization", "Bearer ${tokenStorage.accessToken}"))
7. 客户端 Repository(Android)#
L0 业务生态层:无
L1 系统层:设计智能缓存策略(内存缓存+Room持久化+自动刷新)
L2 子系统层:无
L3 安全架构层:实施本地数据加密(SQLCipher集成)
L4 模块层:创建 repository 模块实现数据协调
L5 包结构层:组织仓库实现(.repo_impl.user/.repo_impl.product)
L6 类与接口层:实现仓库类(class UserDataRepository @Inject constructor(...))
L7 方法层:编写混合数据获取(先读缓存无则网络请求更新缓存)
L8 代码块层:构建缓存过期控制(if (lastUpdated.isBefore(now - 5.minutes)) refreshRemote())
L9 语句层:执行 Room 查询(roomDb.userDao().getById(id).flowOn(Dispatchers.IO))
L10 表达式层:使用扩展函数转换(networkDTO.toDomainEntity())
L11 原子操作层:发射数据到 StateFlow(_userState.emit(Result.success(user)))
8. 客户端 UseCase(Android)#
L0 业务生态层:无
L1 系统层:制定用例规范(纯Kotlin实现+单一职责原则)
L2 子系统层:无
L3 安全架构层:实施权限检查(if (!sessionManager.isAdmin()) throw PermissionDeniedException())
L4 模块层:定义 domain 模块包含业务规则
L5 包结构层:组织用例包(.usecase.user/.usecase.product)
L6 类与接口层:创建用例极速响应(class CheckoutUseCase @Inject constructor(val repo: CartRepo))
L7 方法层:实现核心逻辑(suspend operator fun invoke():验证库存计算总额提交订单)
L8 代码块层:构建错误转换块(catch { e -> when(e) { is NetworkException -> ... } })
L9 语句层:调用仓库方法(val cart = cartRepo.getCart().first())
L10 表达式层:使用 require 校验参数(require(cart.items.isNotEmpty()))
L11 原子操作层:构建领域对象(Order.createFromCart(cart, userId))
9. 客户端 ViewModel(Android)#
L0 业务生态层:无
L1 系统层:配置 Hilt 依赖注入 ViewModel(@HiltViewModel)
L2 子系统层:无
L3 安全架构层:实现会话过期处理(catch (e: UnauthorizedException) { _state.value = SessionExpired })
L4 模块层:创建 presentation 模块定义状态容器
L5 包结构层:组织 ViewModel 分包(.viewmodel.home/.viewmodel.cart)
L6 类与接口层:继承 ViewModel(class UserViewModel @Inject constructor(val useCase: GetUserUseCase): ViewModel())
L7 方法层:编写状态更新方法(fun loadProfile() { viewModelScope.launch { ... } })
L8 代码块层:构建状态转换块(private fun mapToUiState(user: User): UiState)
L9 语句层:更新 UI 状态(_profileState.update { it.copy(data = user, loading = false) })
L10 表达式层:使用密封类转换(when(result) { is Result.Success -> UiState.Data(...) })
L11 原子操作层:调用 UseCase 方法(val result = getUserUseCase(userId))
10. 客户端 UI 层(Android)#
L0 业务生态层:设计用户旅程路径(注册登录主页详情支付)
L1 系统层:采用 Jetpack Compose 框架配置主题系统(MaterialTheme)
L2 子系统层:无
L3 安全架构层:实现界面防劫持(onPause时应用模糊效果)
L4 模块层:构建 app 主模块含主题配置
L5 包结构层:组织 UI 组件包(.screen.login/.screen.cart/.component.button)
L6 类与接口层:定义可组合函数(@Composable fun HomeScreen(viewModel: HomeViewModel))
L7 方法层:编写事件处理函数(val onLogin = { viewModel.login(email, password) })
L8 代码块层:构建条件渲染块(when(val state = viewModel.state) { is Loading -> CircularProgress() })
L9 语句层:组合 UI 元素(Column(modifier = Modifier.fillMaxSize()) { Header() })
L10 表达式层:使用动画表达式(AnimatedVisibility (visible) { fadeIn() })
L11 原子操作层:设置文本属性(Text(text = stringResource(id = R.string.welcome)))
Kotlin+Swift 全栈架构蓝图:纵向 10 模块 × 横向 12 层的 SpringBoot+MySQL+iOS 实践#
1. 服务端 Database#
L0 业务生态层:确定数据库在业务生态中的核心功能(如电商平台的订单数据中枢)
L1 系统层:设计 MySQL 高可用架构(主从集群+读写分离+自动故障转移)
L2 子系统层:按业务域划分物理数据库(用户库/订单库/库存库)并定义数据同步机制
L3 安全架构层:实施传输层加密(TLS1.3)和列级数据加密(AES-256)
L4 模块层:定义核心模块结构(用户管理模块表集合及关系)
L5 包结构层:组织版本化迁移脚本目录(/database/migrations/V1.0__core_schema.sql)
L6 类与接口层:设计表结构(字段类型/主外键/索引策略)
L7 方法层:编写存储过程实现业务逻辑(如计算用户消费等级)
L8 代码块层:构建事务控制块(START TRANSACTION; UPDATE; INSERT; COMMIT;)
L9 语句层:执行 DDL 定义语句(CREATE TABLE users(id BIGINT AUTO_INCREMENT PRIMARY KEY))
L10 表达式层:优化查询表达式(WHERE status = 'ACTIVE' AND last_login > NOW() - INTERVAL 30 DAY)
L11 原子操作层:设置约束条件(UNIQUE(email), NOT NULL(username))
2. 服务端 Entity#
L0 业务生态层:无
L1 系统层:配置 Hibernate 二级缓存及批量处理参数(hibernate.cache.use_second_level_cache=true)
L2 子系统层:按业务域分包(com.ecommerce.user.entity 包含User/Profile实体)
L3 安全架构层:实施字段级加密(@Convert(converter = PasswordEncryptor.class))
L4 模块层:构建 domain 模块包含实体扫描路径(@EntityScan(basePackages = "com.ecommerce"))
L5 包结构层:组织实体分层包(.entity/.embeddable/.enums)
L6 类与接口层:定义 JPA 实体类(@Entity @Table(name="users") class User)
L7 方法层:实现审计回调方法(@LastModifiedDate private LocalDateTime updatedAt)
L8 代码块层:构建字段校验块(if (email.isEmpty()) throw new InvalidEntityException())
L9 语句层:声明映射关系(@OneToMany(mappedBy = "user", cascade = CascadeType.ALL))
L10 表达式层:配置懒加载策略(@ManyToOne(fetch = FetchType.LAZY))
L11 原子操作层:生成equals()/hashCode()方法
3. 服务端 Repository#
L0 业务生态层:无
L1 系统层:配置 Spring Data JPA 查询策略(方法名解析/分页配置)
L2 子系统层:按聚合根分包(com.ecommerce.order.repository 包含Order/LineItem)
L3 安全架构层:实现行级安全过滤(@PostFilter("hasPermission(filterObject, 'READ')"))
L4 模块层:创建 repository 模块包含 JPA 仓库扫描(@EnableJpaRepositories)
L5 包结构层:组织仓库分层(.repository/.custom/.projection)
L6 类与接口层:声明仓库接口(interface OrderRepository extends JpaRepository<Order, Long>)
L7 方法层:定义动态查询方法(Page<Order> findByUserId(Long userId, Pageable pageable))
L8 代码块层:构建@Query注解块(@Query("SELECT o FROM Order o WHERE o.status = :status"))
L9 语句层:声明派生查询(List<Order> findByCreatedAtBetween(LocalDate start, LocalDate end))
L10 表达式层:使用 SpEL 安全表达式(@Query("SELECT u FROM #{#entityName} u WHERE u.active = true"))
L11 原子操作层:执行flush操作(saveAndFlush(entity))
4. 服务端 Service#
L0 业务生态层:无
L1 系统层:集成分布式事务(Seata AT模式+回滚日志)
L2 子系统层:按业务能力划分服务边界(PaymentService/InventoryService)
L3 安全架构层:实施方法级权限控制(@PreAuthorize("hasRole('ADMIN') or #userId == principal.id"))
L4 模块层:创建 service 模块配置事务管理器(@EnableTransactionManagement)
L5 包结构层:组织服务分层(.api/.impl/.event)
L6 类与接口层:实现服务类(@Service @Transactional(propagation=REQUIRED) class OrderServiceImpl)
L7 方法层:编写核心业务逻辑(Order createOrder(Cart cart) 扣减库存生成订单发消息)
L8 代码块层:构建事务控制块(@Transactional(timeout=30, rollbackFor=BusinessException.class))
L9 语句层:触发领域事件(applicationEventPublisher.publishEvent(new OrderCreatedEvent(this)))
L10 表达式层:使用 EL 表达业务规则(if (user.getLevel() >= VIP_LEVEL) applyDiscount(15%))
L11 原子操作层:执行空安全调用(user?.address ?: throw AddressRequiredException())
5. 服务端 Controller#
L0 业务生态层:无
L1 系统层:制定 OpenAPI 3.0 规范并配置 Swagger(@OpenAPIDefinition)
L2 子系统层:设置 API 网关路由规则(/order-service 路由到订单集群)
L3 安全架构层:实施 JWT 认证(@AuthenticationPrincipal JwtUserDetails)
L4 模块层:创建 web 模块配置消息转换器(HttpMessageConverters)
L5 包结构层:组织控制器分包(.controller.user/.controller.order)
L6 类与接口层:定义 RestController(@RestController @RequestMapping("/api/orders"))
L7 方法层:声明端点方法(@PostMapping @ResponseStatus(CREATED) fun createOrder())
L8 代码块层:构建参数校验块(@Valid @RequestBody OrderCreateDTO dto, BindingResult result)
L9 语句层:返回标准化响应(ResponseEntity.status(CREATED).body(OrderResponse.from(order)))
L10 表达式层:使用 MapStruct 转换表达式(OrderMapper.INSTANCE.toDTO(domainEntity))
L11 原子操作层:设置响应头(headers.setLocation(ServletUriComponentsBuilder.fromCurrentRequest()))
6. 客户端 数据源(iOS)#
L0 业务生态层:无
L1 系统层:配置 URLSession 网络栈(URLSessionConfiguration.ephemeral+30s超时+URLCache)
L2 子系统层:无
L3 安全架构层:实施 SSL 证书绑定(SecTrust证书链校验)
L4 模块层:构建NetworkService模块封装网络层
L5 包结构层:组织数据源分层(Networking/API/Networking/Models/Networking/Interceptors)
L6 类与接口层:定义 API 协议(protocol UserAPIService { func fetchUser(id: Int) async throws -> UserDTO })
L7 方法层:声明 Combine 数据流(func productStream() -> AnyPublisher<[ProductDTO], Error>)
L8 代码块层:构建重试逻辑(.retry(3) { $0 is URLError })
L9 语句层:发起网络请求(let (data, _) = try await URLSession.shared.data(for: request))
L10 表达式层:使用 Codable 解析(JSONDecoder().decode(UserDTO.self, from: data))
L11 原子操作层:添加认证头(request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization"))
7. 客户端 Repository(iOS)#
L0 业务生态层:无
L1 系统层:设计混合缓存策略(NSCache+CoreData+自动同步)
L2 子系统层:无
L3 安全架构层:实施数据加密(NSFileProtectionComplete文件保护)
L4 模块层:创建Persistence数据协调模块
L5 包结构层:组织仓库实现(Repositories/UserRepository/Repositories/ProductRepository)
L6 类与接口层:实现仓库类(struct CoreDataUserRepository: UserRepositoryProtocol)
L7 方法层:编写缓存优先策略(检查 CoreData→网络请求→更新缓存)
L8 代码块层:构建缓存刷新控制(if cacheEntry.lastUpdated.timeIntervalSinceNow < -300 { fetchRemote() })
L9 语句层:执行 CoreData 查询(try container.viewContext.fetch(NSFetchRequest<UserEntity>(entityName: "User")))
L10 表达式层:使用映射扩展转换模型(extension UserDTO { func toManagedObject() })
L11 原子操作层:保存 CoreData 上下文(container.viewContext.save())
8. 客户端 UseCase(iOS)#
L0 业务生态层:无
L1 系统层:制定用例规范(纯Swift实现+单一职责)
L2 子系统层:无
L3 安全架构层:实施权限检查(guard context.authService.isAdmin else { throw AuthError.unauthorized })
L4 模块层:定义DomainLogic业务规则模块
L5 包结构层:组织用例包(UseCases/CheckoutUseCase/UseCases/UserManagement)
L6 类与接口层:创建用例结构体(struct PurchaseUseCase { let repository: OrderRepository })
L7 方法层:实现核心逻辑(func execute(cart: Cart) async throws:库存验证→总价计算→下单)
L8 代码块层:构建错误转换(catch { throw DomainErrorMapper.transform($0) })
L9 语句层:调用仓库方法(let stock = try await stockRepo.checkAvailability(productId))
L10 表达式层:使用 guard 参数校验(guard cart.items.count > 0 else { throw CartError.empty })
L11 原子操作层:构建领域模型(Order.create(from: cart, user: user))
9. 客户端 ViewModel(iOS)#
L0 业务生态层:无
L1 系统层:配置依赖注入(Swinject容器注册)
L2 子系统层:无
L3 安全架构层:实现会话过期处理(.onReceive(authService.$sessionState) { if $0 == .expired { handleLogout() } })
L4 模块层:创建PresentationLogic响应式模块
L5 包结构层:组织 ViewModel(ViewModels/ProfileViewModel/ViewModels/CartViewModel)
L6 类与接口层:定义 ObservableObject(class UserProfileViewModel: ObservableObject { @Published private(set) var state = ViewState.idle })
L7 方法层:编写异步加载方法(@MainActor func loadProfile() async { ... })
L8 代码块层:构建状态转换器(private func mapResult(_ result: Result<User, Error>))
L9 语句层:更新 UI 状态(state = .loaded(user))
L10 表达式层:使用枚举关联值(enum ViewState { case idle, loading, loaded(User), failed(Error) })
L11 原子操作层:调用 UseCase(self.user = try await useCase.fetchUser(id))
10. 客户端 UI 层(iOS)#
L0 业务生态层:设计用户旅程路径(注册登录主页详情支付)
L1 系统层:采用 SwiftUI 框架配置主题(ViewModifier+Environment)
L2 子系统层:无
L3 安全架构层:实现界面防劫持(.onReceive(UIApplication.willResignActiveNotification) { blurScreen() })
L4 模块层:构建UserInterface视图组件库
L5 包结构层:组织视图分层(Modules/Login/Views/Modules/Checkout/Components)
L6 类与接口层:定义 View 结构体(struct ProductDetailView:View { @StateObject var viewModel: DetailViewModel })
L7 方法层:编写事件处理(private func handlePurchase() { Task { await viewModel.purchase() } })
L8 代码块层:构建状态响应块(switch viewModel.state { case .loading: ProgressView() })
L9 语句层:组合视图元素(VStack { HeaderView(); ProductGallery() })
L10 表达式层:使用隐式动画(.animation(.spring, value: viewModel.state))
L11 原子操作层:设置文本显示(Text(user.name).font(.system(size: 16, weight: .semibold)))
Kotlin+TypeScript 全栈架构蓝图:纵向 11 层级 × 横向 10 模块的 SpringBoot+MySQL+Web 实践#
1. 服务端 Database#
L0 业务生态层:确定数据库在业务生态中的核心功能(如电商平台的订单数据中枢)
L1 系统层:设计 MySQL 高可用架构(主从集群+读写分离+自动故障转移)
L2 子系统层:按业务域划分物理数据库(用户库/订单库/库存库)并定义数据同步机制
L3 安全架构层:实施传输层加密(TLS1.3)和列级数据加密(AES-256)
L4 模块层:定义核心模块结构(用户管理模块表集合及关系)
L5 包结构层:组织版本化迁移脚本目录(/database/migrations/V1.0__core_schema.sql)
L6 类与接口层:设计表结构(字段类型/主外键/索引策略)
L7 方法层:编写存储过程实现业务逻辑(如计算用户消费等级)
L8 代码块层:构建事务控制块(START TRANSACTION; UPDATE; INSERT; COMMIT;)
L9 语句层:执行 DDL 定义语句(CREATE TABLE users(id BIGINT AUTO_INCREMENT PRIMARY KEY))
L10 表达式层:优化查询表达式(WHERE status = 'ACTIVE' AND last_login > NOW() - INTERVAL 30 DAY)
L11 原子操作层:设置约束条件(UNIQUE(email), NOT NULL(username))
2. 服务端 Entity#
L0 业务生态层:无
L1 系统层:配置 Hibernate 二级缓存及批量处理参数(hibernate.cache.use_second_level_cache=true)
L2 子系统层:按业务域分包(com.ecommerce.user.entity 包含User/Profile实体)
L3 安全架构层:实施字段级加密(@Convert(converter = PasswordEncryptor.class))
L4 模块层:构建 domain 模块包含实体扫描路径(@EntityScan(basePackages = "com.ecommerce"))
L5 包结构层:组织实体分层包(.entity/.embeddable/.enums)
L6 类与接口层:定义 JPA 实体类(@Entity @Table(name="users") class User)
L7 方法层:实现审计回调方法(@LastModifiedDate private LocalDateTime updatedAt)
L8 代码块层:构建字段校验块(if (email.isEmpty()) throw new InvalidEntityException())
L9 语句层:声明映射关系(@OneToMany(mappedBy = "user", cascade = CascadeType.ALL))
L10 表达式层:配置懒加载策略(@ManyToOne(fetch = FetchType.LAZY))
L11 原子操作层:生成equals()/hashCode()方法
3. 服务端 Repository#
L0 业务生态层:无
L1 系统层:配置 Spring Data JPA 查询策略(方法名解析/分页配置)
L2 子系统层:按聚合根分包(com.ecommerce.order.repository 包含Order/LineItem)
L3 安全架构层:实现行级安全过滤(@PostFilter("hasPermission(filterObject, 'READ')"))
L4 模块层:创建 repository 模块包含 JPA 仓库扫描(@EnableJpaRepositories)
L5 包结构层:组织仓库分层(.repository/.custom/.projection)
L6 类与接口层:声明仓库接口(interface OrderRepository extends JpaRepository<Order, Long>)
L7 方法层:定义动态查询方法(Page<Order> findByUserId(Long userId, Pageable pageable))
L8 代码块层:构建@Query注解块(@Query("SELECT o FROM Order o WHERE o.status = :status"))
L9 语句层:声明派生查询(List<Order> findByCreatedAtBetween(LocalDate start, LocalDate end))
L10 表达式层:使用 SpEL 安全表达式(@Query("SELECT u FROM #{#entityName} u WHERE u.active = true"))
L11 原子操作层:执行flush操作(saveAndFlush(entity))
4. 服务端 Service#
L0 业务生态层:无
L1 系统层:集成分布式事务(Seata AT模式+回滚日志)
L2 子系统层:按业务能力划分服务边界(PaymentService/InventoryService)
L3 安全架构层:实施方法级权限控制(@PreAuthorize("hasRole('ADMIN') or #userId == principal.id"))
L4 模块层:创建 service 模块配置事务管理器(@EnableTransactionManagement)
L5 包结构层:组织服务分层(.api/.impl/.event)
L6 类与接口层:实现服务类(@Service @Transactional(propagation=REQUIRED) class OrderServiceImpl)
L7 方法层:编写核心业务逻辑(Order createOrder(Cart cart) 扣减库存生成订单发消息)
L8 代码块层:构建事务控制块(@Transactional(timeout=30, rollbackFor=BusinessException.class))
L9 语句层:触发领域事件(applicationEventPublisher.publishEvent(new OrderCreatedEvent(this)))
L10 表达式层:使用 EL 表达业务规则(if (user.getLevel() >= VIP_LEVEL) applyDiscount(15%))
L11 原子操作层:执行空安全调用(user?.address ?: throw AddressRequiredException())
5. 服务端 Controller#
L0 业务生态层:无
L1 系统层:制定 OpenAPI 3.0 规范并配置 Swagger(@OpenAPIDefinition)
L2 子系统层:设置 API 网关路由规则(/order-service 路由到订单集群)
L3 安全架构层:实施 JWT 认证(@AuthenticationPrincipal JwtUserDetails)
L4 模块层:创建 web 模块配置消息转换器(HttpMessageConverters)
L5 包结构层:组织控制器分包(.controller.user/.controller.order)
L6 类与接口层:定义 RestController(@RestController @RequestMapping("/api/orders"))
L7 方法层:声明端点方法(@PostMapping @ResponseStatus(CREATED) fun createOrder())
L8 代码块层:构建参数校验块(@Valid @RequestBody OrderCreateDTO dto, BindingResult result)
L9 语句层:返回标准化响应(ResponseEntity.status(CREATED).body(OrderResponse.from(order)))
L10 表达式层:使用 MapStruct 转换表达式(OrderMapper.INSTANCE.toDTO(domainEntity))
L11 原子操作层:设置响应头(headers.setLocation(ServletUriComponentsBuilder.fromCurrentRequest()))
6. 客户端 数据源(Web)#
L0 业务生态层:无
L1 系统层:配置 Axios 实例(baseURL + interceptor + 30s超时)
L2 子系统层:无
L3 安全架构层:实施 CSRF 防护(anti-CSRF token)和 JWT 自动刷新
L4 模块层:构建api-service模块封装网络请求
L5 包结构层:组织数据源分层(/services/api/authService.ts,/services/api/productService.ts)
L6 类与接口层:定义 API 服务类(class AuthService { async login(credentials: LoginDTO): Promise<AuthResponse> })
L7 方法层:声明响应式数据流(const productObservable = new BehaviorSubject<Product[]>([]))
L8 代码块层:构建指数退避重试逻辑(retryWithBackoff(axiosCall, maxRetries = 3))
L9 语句层:执行 API 请求(return axios.post<AuthResponse>('/auth/login', credentials))
L10 表达式层:使用 zod 进行响应验证(AuthResponseSchema.parse(response.data))
L11 原子操作层:注入认证头(config.headers.Authorization = 'Bearer ${token}')
7. 客户端 状态管理(Web)#
L0 业务生态层:无
L1 系统层:设计 Redux 状态架构(redux-toolkit + redux-persist)
L2 子系统层:无
L3 安全架构层:实施敏感数据清除(localStorage.clear())
L4 模块层:创建store模块管理应用状态
L5 包结构层:组织状态切片(/store/slices/authSlice.ts,/store/slices/cartSlice.ts)
L6 类与接口层:定义异步 Thunk(export const fetchUser = createAsyncThunk('user/fetch'))
L7 方法层:编写状态更新逻辑(reducers: { addToCart: (state, action) => { ... } })
L8 代码块层:构建数据规范化块(createEntityAdapter<Product>())
L9 语句层:订阅状态变化(store.subscribe(() => { ... }))
L10 表达式层:使用 selector 高效数据选取(const user = useSelector(selectCurrentUser))
L11 原子操作层:生成 Immer 草稿(produce(state, draft => { draft.cart.items.push(item) }))
8. 客户端 业务逻辑(Web)#
L0 业务生态层:无
L1 系统层:制定用例规范(纯TypeScript实现+依赖注入)
L2 子系统层:无
L3 安全架构层:实施权限检查(if (!hasPermission('admin')) return false;)
L4 模块层:定义features模块封装业务逻辑
L5 包结构层:组织用例(/features/checkout/useCheckout.ts)
L6 类与接口层:创建业务钩子(const useCheckout = (cart) => { ... })
L7 方法层:实现核心逻辑(const placeOrder = async () => { 验证库存→计算总额→提交订单 })
L8 代码块层:构建异常处理块(try { ... } catch (e) { toast.error(e.message) })
L9 语句层:调用 API 服务(await OrderService.createOrder(orderData))
L10 表达式层:使用可选链安全取值(const total = cart?.items.reduce(...))
L11 原子操作层:构建领域对象(Order.create({ cartId, address }))
9. 客户端 UI 组件(Web)#
L0 业务生态层:无
L1 系统层:采用 React 框架配置主题系统(Material-UI或Chakra UI)
L2 子系统层:无
L3 安全架构层:实施 XSS 防护(react-dangerously-set-html-content)
L4 模块层:构建components模块
L5 包结构层:组织组件结构(/components/checkout/CartSummary.tsx)
L6 类与接口层:定义功能组件(const UserProfile: React.FC<UserProps> = ({ user }) => ...)
L7 方法层:编写交互逻辑(const handleSubmit = useCallback(() => { ... }, []))
L8 代码块层:构建上下文提供器(<AuthProvider value={user}>{children}</AuthProvider>)
L9 语句层:触发状态更新(dispatch(addToCart(product)))
L10 表达式层:使用 styled-components 动态样式(background: ${({ active }) => active ? 'blue' : 'gray'})
L11 原子操作层:渲染文本(<Typography variant="h6">{user.name}</Typography>)
10. 客户端 页面路由(Web)#
L0 业务生态层:设计用户旅程路径(/login→/dashboard→/products→/checkout)
L1 系统层:配置 React Router(BrowserRouter + React Suspense)
L2 子系统层:无
L3 安全架构层:实现路由守卫(<RequireAuth><ProtectedPage/></RequireAuth>)
L4 模块层:创建pages模块
L5 包结构层:组织页面结构(/pages/LoginPage.tsx,/pages/CheckoutPage.tsx)
L6 类与接口层:定义延迟加载组件(const HomePage = lazy(() => import('./HomePage')))
L7 方法层:处理路由事件(useBeforeUnload(showExitPrompt))
L8 代码块层:构建布局体系(<MainLayout><Outlet/></MainLayout>)
L9 语句层:声明路由配置(<Route path="/products" element={<ProductListingPage/>}>)
L10 表达式层:使用路由钩子(const params = useParams())
L11 原子操作层:导航跳转(const navigate = useNavigate(); navigate('/thank-you'))