全栈架构蓝图 —— 作者:王教成#
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')
)