AI辅助的软件架构设计与评估:智能化架构决策支持系统

摘要

软件架构设计是决定系统成败的关键因素,传统的架构设计往往依赖架构师的经验和直觉。本文将探讨如何利用AI技术辅助软件架构设计与评估,从架构模式推荐到质量属性分析,从技术选型到架构演化,全面提升架构设计的科学性和有效性。

目录

  1. AI架构设计概述
  2. 架构模式智能推荐
  3. 技术栈选型助手
  4. 架构质量评估
  5. 性能预测与优化
  6. 架构演化规划
  7. 风险识别与缓解
  8. 架构文档生成
  9. 实战案例分析
  10. 最佳实践与总结

AI架构设计概述

智能架构设计系统架构

知识库
架构模式库
技术栈数据库
最佳实践库
案例库
需求输入
需求分析引擎
架构模式推荐
技术选型建议
质量属性分析
架构设计生成器
架构评估器
性能预测
风险分析
成本评估
优化建议
架构文档生成
实施计划

核心架构设计框架

import json
import yaml
import networkx as nx
import matplotlib.pyplot as plt
from typing import Dict, List, Any, Optional, Tuple, Union
from dataclasses import dataclass, asdict, field
from abc import ABC, abstractmethod
from enum import Enum
import numpy as np
from collections import defaultdict
import time

class ArchitecturePattern(Enum):
    """架构模式枚举"""
    LAYERED = "layered"
    MICROSERVICES = "microservices"
    EVENT_DRIVEN = "event_driven"
    HEXAGONAL = "hexagonal"
    CLEAN_ARCHITECTURE = "clean_architecture"
    MVC = "mvc"
    MVP = "mvp"
    MVVM = "mvvm"
    PIPE_FILTER = "pipe_filter"
    BLACKBOARD = "blackboard"
    BROKER = "broker"
    MASTER_SLAVE = "master_slave"

class QualityAttribute(Enum):
    """质量属性枚举"""
    PERFORMANCE = "performance"
    SCALABILITY = "scalability"
    AVAILABILITY = "availability"
    RELIABILITY = "reliability"
    SECURITY = "security"
    MAINTAINABILITY = "maintainability"
    TESTABILITY = "testability"
    USABILITY = "usability"
    PORTABILITY = "portability"
    INTEROPERABILITY = "interoperability"

@dataclass
class Requirement:
    """需求数据结构"""
    id: str
    name: str
    description: str
    type: str  # functional, non_functional, constraint
    priority: str  # high, medium, low
    quality_attributes: List[QualityAttribute]
    constraints: List[str]
    stakeholders: List[str]

@dataclass
class Component:
    """组件数据结构"""
    id: str
    name: str
    description: str
    responsibilities: List[str]
    interfaces: List[str]
    dependencies: List[str]
    technology: str
    deployment_unit: str

@dataclass
class ArchitectureDecision:
    """架构决策记录"""
    id: str
    title: str
    status: str  # proposed, accepted, deprecated, superseded
    context: str
    decision: str
    consequences: List[str]
    alternatives: List[str]
    rationale: str
    date: str

@dataclass
class ArchitectureDesign:
    """架构设计"""
    id: str
    name: str
    description: str
    pattern: ArchitecturePattern
    components: List[Component]
    connections: List[Dict[str, str]]
    decisions: List[ArchitectureDecision]
    quality_scenarios: List[Dict[str, Any]]
    constraints: List[str]
    assumptions: List[str]

class RequirementAnalyzer:
    """需求分析器"""
    
    def __init__(self):
        self.nlp_processor = self._init_nlp_processor()
        self.quality_keywords = self._load_quality_keywords()
    
    def analyze_requirements(self, requirements_text: str) -> List[Requirement]:
        """分析需求文本"""
        requirements = []
        
        # 分割需求
        req_sections = self._split_requirements(requirements_text)
        
        for i, section in enumerate(req_sections):
            req = self._parse_requirement_section(f"REQ_{i+1:03d}", section)
            if req:
                requirements.append(req)
        
        return requirements
    
    def _split_requirements(self, text: str) -> List[str]:
        """分割需求文本"""
        # 简化的需求分割逻辑
        sections = []
        lines = text.split('\n')
        current_section = []
        
        for line in lines:
            line = line.strip()
            if not line:
                if current_section:
                    sections.append('\n'.join(current_section))
                    current_section = []
            else:
                current_section.append(line)
        
        if current_section:
            sections.append('\n'.join(current_section))
        
        return sections
    
    def _parse_requirement_section(self, req_id: str, section: str) -> Optional[Requirement]:
        """解析需求段落"""
        lines = section.split('\n')
        if not lines:
            return None
        
        name = lines[0][:50] + "..." if len(lines[0]) > 50 else lines[0]
        description = section
        
        # 分析需求类型
        req_type = self._classify_requirement_type(section)
        
        # 提取质量属性
        quality_attrs = self._extract_quality_attributes(section)
        
        # 提取约束
        constraints = self._extract_constraints(section)
        
        # 确定优先级
        priority = self._determine_priority(section)
        
        return Requirement(
            id=req_id,
            name=name,
            description=description,
            type=req_type,
            priority=priority,
            quality_attributes=quality_attrs,
            constraints=constraints,
            stakeholders=["stakeholder"]  # 简化处理
        )
    
    def _classify_requirement_type(self, text: str) -> str:
        """分类需求类型"""
        text_lower = text.lower()
        
        # 非功能性需求关键词
        non_functional_keywords = [
            'performance', 'scalability', 'availability', 'security',
            'maintainability', 'usability', 'reliability', 'response time',
            'throughput', 'load', 'concurrent users'
        ]
        
        # 约束关键词
        constraint_keywords = [
            'must use', 'required to', 'constraint', 'limitation',
            'platform', 'technology', 'budget', 'timeline'
        ]
        
        if any(keyword in text_lower for keyword in constraint_keywords):
            return 'constraint'
        elif any(keyword in text_lower for keyword in non_functional_keywords):
            return 'non_functional'
        else:
            return 'functional'
    
    def _extract_quality_attributes(self, text: str) -> List[QualityAttribute]:
        """提取质量属性"""
        text_lower = text.lower()
        attributes = []
        
        for attr in QualityAttribute:
            if attr.value in text_lower:
                attributes.append(attr)
        
        # 基于关键词推断
        if any(word in text_lower for word in ['fast', 'quick', 'response time', 'latency']):
            attributes.append(QualityAttribute.PERFORMANCE)
        
        if any(word in text_lower for word in ['scale', 'load', 'users', 'concurrent']):
            attributes.append(QualityAttribute.SCALABILITY)
        
        if any(word in text_lower for word in ['secure', 'authentication', 'authorization', 'encrypt']):
            attributes.append(QualityAttribute.SECURITY)
        
        if any(word in text_lower for word in ['available', 'uptime', '24/7', 'downtime']):
            attributes.append(QualityAttribute.AVAILABILITY)
        
        return list(set(attributes))  # 去重
    
    def _extract_constraints(self, text: str) -> List[str]:
        """提取约束条件"""
        constraints = []
        text_lower = text.lower()
        
        # 技术约束
        if 'java' in text_lower:
            constraints.append('Technology: Java')
        if 'python' in text_lower:
            constraints.append('Technology: Python')
        if 'cloud' in text_lower:
            constraints.append('Deployment: Cloud')
        if 'on-premise' in text_lower:
            constraints.append('Deployment: On-premise')
        
        # 预算约束
        if 'budget' in text_lower or 'cost' in text_lower:
            constraints.append('Budget constraint')
        
        # 时间约束
        if 'deadline' in text_lower or 'timeline' in text_lower:
            constraints.append('Time constraint')
        
        return constraints
    
    def _determine_priority(self, text: str) -> str:
        """确定优先级"""
        text_lower = text.lower()
        
        if any(word in text_lower for word in ['critical', 'essential', 'must', 'required']):
            return 'high'
        elif any(word in text_lower for word in ['important', 'should', 'significant']):
            return 'medium'
        else:
            return 'low'
    
    def _init_nlp_processor(self):
        """初始化NLP处理器"""
        # 占位符 - 实际应用中可以使用spaCy、NLTK等
        return None
    
    def _load_quality_keywords(self) -> Dict[str, List[str]]:
        """加载质量属性关键词"""
        return {
            'performance': ['fast', 'quick', 'speed', 'response time', 'latency', 'throughput'],
            'scalability': ['scale', 'load', 'users', 'concurrent', 'growth', 'capacity'],
            'security': ['secure', 'safe', 'protect', 'authentication', 'authorization', 'encrypt'],
            'availability': ['available', 'uptime', '24/7', 'downtime', 'accessible'],
            'reliability': ['reliable', 'stable', 'consistent', 'fault tolerance', 'robust'],
            'maintainability': ['maintain', 'modify', 'extend', 'flexible', 'modular'],
            'usability': ['user-friendly', 'intuitive', 'easy', 'simple', 'interface'],
            'testability': ['test', 'verify', 'validate', 'debug', 'monitor']
        }

class ArchitecturePatternRecommender:
    """架构模式推荐器"""
    
    def __init__(self):
        self.pattern_database = self._load_pattern_database()
        self.decision_tree = self._build_decision_tree()
    
    def recommend_patterns(self, requirements: List[Requirement]) -> List[Tuple[ArchitecturePattern, float]]:
        """推荐架构模式"""
        scores = defaultdict(float)
        
        # 基于质量属性评分
        for req in requirements:
            for qa in req.quality_attributes:
                pattern_scores = self._get_pattern_scores_for_quality(qa)
                for pattern, score in pattern_scores.items():
                    weight = self._get_requirement_weight(req.priority)
                    scores[pattern] += score * weight
        
        # 基于约束条件调整评分
        for req in requirements:
            constraint_adjustments = self._get_constraint_adjustments(req.constraints)
            for pattern, adjustment in constraint_adjustments.items():
                scores[pattern] += adjustment
        
        # 基于需求复杂度调整
        complexity_factor = self._calculate_complexity_factor(requirements)
        complexity_adjustments = self._get_complexity_adjustments(complexity_factor)
        for pattern, adjustment in complexity_adjustments.items():
            scores[pattern] += adjustment
        
        # 排序并返回推荐结果
        sorted_patterns = sorted(scores.items(), key=lambda x: x[1], reverse=True)
        
        # 归一化分数到0-1范围
        if sorted_patterns:
            max_score = sorted_patterns[0][1]
            if max_score > 0:
                normalized_patterns = [(pattern, score/max_score) for pattern, score in sorted_patterns]
            else:
                normalized_patterns = [(pattern, 0.0) for pattern, score in sorted_patterns]
        else:
            normalized_patterns = []
        
        return normalized_patterns[:5]  # 返回前5个推荐
    
    def _get_pattern_scores_for_quality(self, quality_attr: QualityAttribute) -> Dict[ArchitecturePattern, float]:
        """获取质量属性对应的模式评分"""
        quality_pattern_map = {
            QualityAttribute.PERFORMANCE: {
                ArchitecturePattern.LAYERED: 0.6,
                ArchitecturePattern.MICROSERVICES: 0.7,
                ArchitecturePattern.EVENT_DRIVEN: 0.8,
                ArchitecturePattern.PIPE_FILTER: 0.7,
                ArchitecturePattern.BROKER: 0.6
            },
            QualityAttribute.SCALABILITY: {
                ArchitecturePattern.MICROSERVICES: 0.9,
                ArchitecturePattern.EVENT_DRIVEN: 0.8,
                ArchitecturePattern.BROKER: 0.7,
                ArchitecturePattern.LAYERED: 0.5,
                ArchitecturePattern.MASTER_SLAVE: 0.6
            },
            QualityAttribute.MAINTAINABILITY: {
                ArchitecturePattern.CLEAN_ARCHITECTURE: 0.9,
                ArchitecturePattern.HEXAGONAL: 0.8,
                ArchitecturePattern.LAYERED: 0.7,
                ArchitecturePattern.MVC: 0.7,
                ArchitecturePattern.MICROSERVICES: 0.6
            },
            QualityAttribute.TESTABILITY: {
                ArchitecturePattern.CLEAN_ARCHITECTURE: 0.9,
                ArchitecturePattern.HEXAGONAL: 0.8,
                ArchitecturePattern.MVC: 0.7,
                ArchitecturePattern.LAYERED: 0.6,
                ArchitecturePattern.MICROSERVICES: 0.7
            },
            QualityAttribute.SECURITY: {
                ArchitecturePattern.LAYERED: 0.8,
                ArchitecturePattern.HEXAGONAL: 0.7,
                ArchitecturePattern.BROKER: 0.6,
                ArchitecturePattern.MICROSERVICES: 0.5,
                ArchitecturePattern.CLEAN_ARCHITECTURE: 0.7
            }
        }
        
        return quality_pattern_map.get(quality_attr, {})
    
    def _get_requirement_weight(self, priority: str) -> float:
        """获取需求权重"""
        weights = {
            'high': 1.0,
            'medium': 0.7,
            'low': 0.4
        }
        return weights.get(priority, 0.5)
    
    def _get_constraint_adjustments(self, constraints: List[str]) -> Dict[ArchitecturePattern, float]:
        """基于约束条件调整评分"""
        adjustments = defaultdict(float)
        
        for constraint in constraints:
            if 'cloud' in constraint.lower():
                adjustments[ArchitecturePattern.MICROSERVICES] += 0.3
                adjustments[ArchitecturePattern.EVENT_DRIVEN] += 0.2
            
            if 'monolith' in constraint.lower():
                adjustments[ArchitecturePattern.LAYERED] += 0.4
                adjustments[ArchitecturePattern.CLEAN_ARCHITECTURE] += 0.3
                adjustments[ArchitecturePattern.MICROSERVICES] -= 0.5
            
            if 'legacy' in constraint.lower():
                adjustments[ArchitecturePattern.HEXAGONAL] += 0.3
                adjustments[ArchitecturePattern.BROKER] += 0.2
        
        return adjustments
    
    def _calculate_complexity_factor(self, requirements: List[Requirement]) -> float:
        """计算需求复杂度因子"""
        total_reqs = len(requirements)
        functional_reqs = len([r for r in requirements if r.type == 'functional'])
        quality_attrs = set()
        
        for req in requirements:
            quality_attrs.update(req.quality_attributes)
        
        # 简化的复杂度计算
        complexity = (total_reqs * 0.1 + functional_reqs * 0.2 + len(quality_attrs) * 0.3) / 3
        return min(1.0, complexity)
    
    def _get_complexity_adjustments(self, complexity_factor: float) -> Dict[ArchitecturePattern, float]:
        """基于复杂度调整模式评分"""
        adjustments = {}
        
        if complexity_factor > 0.7:  # 高复杂度
            adjustments[ArchitecturePattern.MICROSERVICES] = 0.3
            adjustments[ArchitecturePattern.EVENT_DRIVEN] = 0.2
            adjustments[ArchitecturePattern.LAYERED] = -0.2
        elif complexity_factor < 0.3:  # 低复杂度
            adjustments[ArchitecturePattern.LAYERED] = 0.3
            adjustments[ArchitecturePattern.MVC] = 0.2
            adjustments[ArchitecturePattern.MICROSERVICES] = -0.3
        
        return adjustments
    
    def _load_pattern_database(self) -> Dict[ArchitecturePattern, Dict[str, Any]]:
        """加载架构模式数据库"""
        return {
            ArchitecturePattern.LAYERED: {
                'name': '分层架构',
                'description': '将系统组织成层次结构,每层只能调用下层服务',
                'pros': ['简单易懂', '职责分离', '易于测试'],
                'cons': ['性能开销', '层间耦合', '难以并行开发'],
                'use_cases': ['企业应用', 'Web应用', '传统系统'],
                'complexity': 'low'
            },
            ArchitecturePattern.MICROSERVICES: {
                'name': '微服务架构',
                'description': '将应用拆分为小型、独立的服务',
                'pros': ['高可扩展性', '技术多样性', '独立部署'],
                'cons': ['分布式复杂性', '网络延迟', '数据一致性'],
                'use_cases': ['大型系统', '云原生应用', '高并发系统'],
                'complexity': 'high'
            },
            ArchitecturePattern.EVENT_DRIVEN: {
                'name': '事件驱动架构',
                'description': '基于事件的异步通信架构',
                'pros': ['高性能', '松耦合', '实时响应'],
                'cons': ['调试困难', '事件顺序', '复杂性'],
                'use_cases': ['实时系统', 'IoT应用', '流处理'],
                'complexity': 'medium'
            }
        }
    
    def _build_decision_tree(self):
        """构建决策树"""
        # 简化的决策树实现
        return {
            'root': {
                'question': 'system_size',
                'large': {
                    'question': 'scalability_requirement',
                    'high': ArchitecturePattern.MICROSERVICES,
                    'medium': ArchitecturePattern.EVENT_DRIVEN,
                    'low': ArchitecturePattern.LAYERED
                },
                'small': {
                    'question': 'maintainability_requirement',
                    'high': ArchitecturePattern.CLEAN_ARCHITECTURE,
                    'medium': ArchitecturePattern.MVC,
                    'low': ArchitecturePattern.LAYERED
                }
            }
        }

class TechnologyStackAdvisor:
    """技术栈选型顾问"""
    
    def __init__(self):
        self.technology_database = self._load_technology_database()
        self.compatibility_matrix = self._load_compatibility_matrix()
    
    def recommend_technology_stack(self, 
                                 requirements: List[Requirement],
                                 architecture_pattern: ArchitecturePattern) -> Dict[str, List[Dict[str, Any]]]:
        """推荐技术栈"""
        
        recommendations = {
            'backend': [],
            'frontend': [],
            'database': [],
            'messaging': [],
            'deployment': [],
            'monitoring': []
        }
        
        # 分析需求特征
        features = self._analyze_requirement_features(requirements)
        
        # 为每个技术类别推荐
        for category in recommendations.keys():
            category_recommendations = self._recommend_category_technologies(
                category, features, architecture_pattern
            )
            recommendations[category] = category_recommendations
        
        return recommendations
    
    def _analyze_requirement_features(self, requirements: List[Requirement]) -> Dict[str, Any]:
        """分析需求特征"""
        features = {
            'performance_critical': False,
            'high_scalability': False,
            'real_time': False,
            'security_critical': False,
            'data_intensive': False,
            'mobile_support': False,
            'cloud_native': False,
            'legacy_integration': False
        }
        
        for req in requirements:
            # 分析质量属性
            if QualityAttribute.PERFORMANCE in req.quality_attributes:
                features['performance_critical'] = True
            
            if QualityAttribute.SCALABILITY in req.quality_attributes:
                features['high_scalability'] = True
            
            if QualityAttribute.SECURITY in req.quality_attributes:
                features['security_critical'] = True
            
            # 分析描述文本
            desc_lower = req.description.lower()
            if any(word in desc_lower for word in ['real-time', 'instant', 'immediate']):
                features['real_time'] = True
            
            if any(word in desc_lower for word in ['data', 'analytics', 'big data', 'ml']):
                features['data_intensive'] = True
            
            if any(word in desc_lower for word in ['mobile', 'app', 'ios', 'android']):
                features['mobile_support'] = True
            
            if any(word in desc_lower for word in ['cloud', 'aws', 'azure', 'gcp']):
                features['cloud_native'] = True
            
            if any(word in desc_lower for word in ['legacy', 'existing', 'integration']):
                features['legacy_integration'] = True
        
        return features
    
    def _recommend_category_technologies(self, 
                                       category: str, 
                                       features: Dict[str, Any],
                                       pattern: ArchitecturePattern) -> List[Dict[str, Any]]:
        """为特定类别推荐技术"""
        
        category_techs = self.technology_database.get(category, [])
        scored_techs = []
        
        for tech in category_techs:
            score = self._calculate_technology_score(tech, features, pattern)
            if score > 0.3:  # 只推荐评分较高的技术
                tech_with_score = tech.copy()
                tech_with_score['score'] = score
                tech_with_score['rationale'] = self._generate_rationale(tech, features, pattern)
                scored_techs.append(tech_with_score)
        
        # 按评分排序
        scored_techs.sort(key=lambda x: x['score'], reverse=True)
        
        return scored_techs[:3]  # 返回前3个推荐
    
    def _calculate_technology_score(self, 
                                  tech: Dict[str, Any], 
                                  features: Dict[str, Any],
                                  pattern: ArchitecturePattern) -> float:
        """计算技术评分"""
        score = 0.5  # 基础分
        
        # 基于特征匹配
        tech_features = tech.get('features', [])
        
        if features['performance_critical'] and 'high_performance' in tech_features:
            score += 0.3
        
        if features['high_scalability'] and 'scalable' in tech_features:
            score += 0.3
        
        if features['real_time'] and 'real_time' in tech_features:
            score += 0.2
        
        if features['security_critical'] and 'secure' in tech_features:
            score += 0.2
        
        if features['cloud_native'] and 'cloud_ready' in tech_features:
            score += 0.2
        
        # 基于架构模式匹配
        pattern_compatibility = tech.get('architecture_compatibility', {})
        pattern_score = pattern_compatibility.get(pattern.value, 0.5)
        score *= pattern_score
        
        # 基于成熟度和社区支持
        maturity_score = tech.get('maturity', 0.5)
        community_score = tech.get('community_support', 0.5)
        score *= (maturity_score + community_score) / 2
        
        return min(1.0, score)
    
    def _generate_rationale(self, 
                          tech: Dict[str, Any], 
                          features: Dict[str, Any],
                          pattern: ArchitecturePattern) -> str:
        """生成推荐理由"""
        reasons = []
        
        tech_features = tech.get('features', [])
        
        if features['performance_critical'] and 'high_performance' in tech_features:
            reasons.append("高性能需求匹配")
        
        if features['high_scalability'] and 'scalable' in tech_features:
            reasons.append("可扩展性需求匹配")
        
        if features['cloud_native'] and 'cloud_ready' in tech_features:
            reasons.append("云原生支持")
        
        pattern_compatibility = tech.get('architecture_compatibility', {})
        if pattern_compatibility.get(pattern.value, 0) > 0.7:
            reasons.append(f"与{pattern.value}架构高度兼容")
        
        if tech.get('maturity', 0) > 0.8:
            reasons.append("技术成熟稳定")
        
        if tech.get('community_support', 0) > 0.8:
            reasons.append("社区支持良好")
        
        return "; ".join(reasons) if reasons else "基础匹配"
    
    def _load_technology_database(self) -> Dict[str, List[Dict[str, Any]]]:
        """加载技术数据库"""
        return {
            'backend': [
                {
                    'name': 'Spring Boot',
                    'language': 'Java',
                    'type': 'Framework',
                    'features': ['enterprise', 'scalable', 'secure', 'cloud_ready'],
                    'architecture_compatibility': {
                        'layered': 0.9,
                        'microservices': 0.8,
                        'clean_architecture': 0.8,
                        'hexagonal': 0.7
                    },
                    'maturity': 0.9,
                    'community_support': 0.9,
                    'learning_curve': 'medium',
                    'pros': ['成熟稳定', '企业级支持', '丰富生态'],
                    'cons': ['相对重量级', '启动时间较长']
                },
                {
                    'name': 'Node.js',
                    'language': 'JavaScript',
                    'type': 'Runtime',
                    'features': ['high_performance', 'real_time', 'scalable', 'cloud_ready'],
                    'architecture_compatibility': {
                        'microservices': 0.9,
                        'event_driven': 0.9,
                        'layered': 0.7,
                        'clean_architecture': 0.6
                    },
                    'maturity': 0.8,
                    'community_support': 0.9,
                    'learning_curve': 'low',
                    'pros': ['高并发', '快速开发', '统一语言栈'],
                    'cons': ['单线程限制', '回调地狱']
                },
                {
                    'name': 'Django',
                    'language': 'Python',
                    'type': 'Framework',
                    'features': ['rapid_development', 'secure', 'scalable'],
                    'architecture_compatibility': {
                        'layered': 0.8,
                        'mvc': 0.9,
                        'clean_architecture': 0.7,
                        'microservices': 0.6
                    },
                    'maturity': 0.9,
                    'community_support': 0.8,
                    'learning_curve': 'medium',
                    'pros': ['快速开发', '内置安全', 'ORM强大'],
                    'cons': ['单体架构', '性能限制']
                }
            ],
            'frontend': [
                {
                    'name': 'React',
                    'language': 'JavaScript',
                    'type': 'Library',
                    'features': ['component_based', 'virtual_dom', 'scalable', 'mobile_support'],
                    'architecture_compatibility': {
                        'mvc': 0.7,
                        'mvvm': 0.8,
                        'clean_architecture': 0.8,
                        'microservices': 0.9
                    },
                    'maturity': 0.9,
                    'community_support': 0.9,
                    'learning_curve': 'medium',
                    'pros': ['组件化', '生态丰富', '性能优秀'],
                    'cons': ['学习曲线', '频繁更新']
                },
                {
                    'name': 'Vue.js',
                    'language': 'JavaScript',
                    'type': 'Framework',
                    'features': ['progressive', 'easy_learning', 'component_based'],
                    'architecture_compatibility': {
                        'mvc': 0.8,
                        'mvvm': 0.9,
                        'layered': 0.7,
                        'clean_architecture': 0.7
                    },
                    'maturity': 0.8,
                    'community_support': 0.8,
                    'learning_curve': 'low',
                    'pros': ['易学易用', '渐进式', '文档完善'],
                    'cons': ['生态相对小', '企业采用率低']
                }
            ],
            'database': [
                {
                    'name': 'PostgreSQL',
                    'type': 'Relational',
                    'features': ['acid', 'scalable', 'json_support', 'extensible'],
                    'architecture_compatibility': {
                        'layered': 0.9,
                        'microservices': 0.7,
                        'clean_architecture': 0.8,
                        'hexagonal': 0.8
                    },
                    'maturity': 0.9,
                    'community_support': 0.8,
                    'learning_curve': 'medium',
                    'pros': ['功能强大', '标准兼容', '扩展性好'],
                    'cons': ['配置复杂', '内存占用高']
                },
                {
                    'name': 'MongoDB',
                    'type': 'NoSQL',
                    'features': ['document_based', 'scalable', 'flexible_schema', 'cloud_ready'],
                    'architecture_compatibility': {
                        'microservices': 0.9,
                        'event_driven': 0.8,
                        'layered': 0.6,
                        'clean_architecture': 0.7
                    },
                    'maturity': 0.8,
                    'community_support': 0.8,
                    'learning_curve': 'low',
                    'pros': ['灵活模式', '水平扩展', '开发友好'],
                    'cons': ['一致性弱', '内存占用大']
                }
            ],
            'messaging': [
                {
                    'name': 'Apache Kafka',
                    'type': 'Message Broker',
                    'features': ['high_throughput', 'distributed', 'real_time', 'scalable'],
                    'architecture_compatibility': {
                        'microservices': 0.9,
                        'event_driven': 0.9,
                        'broker': 0.8,
                        'layered': 0.5
                    },
                    'maturity': 0.9,
                    'community_support': 0.8,
                    'learning_curve': 'high',
                    'pros': ['高吞吐量', '持久化', '分布式'],
                    'cons': ['复杂配置', '运维成本高']
                },
                {
                    'name': 'RabbitMQ',
                    'type': 'Message Broker',
                    'features': ['reliable', 'flexible_routing', 'easy_setup'],
                    'architecture_compatibility': {
                        'microservices': 0.8,
                        'event_driven': 0.8,
                        'broker': 0.9,
                        'layered': 0.7
                    },
                    'maturity': 0.9,
                    'community_support': 0.8,
                    'learning_curve': 'medium',
                    'pros': ['可靠性高', '路由灵活', '易于使用'],
                    'cons': ['性能限制', '单点故障']
                }
            ]
        }
    
    def _load_compatibility_matrix(self) -> Dict[str, Dict[str, float]]:
        """加载技术兼容性矩阵"""
        return {
            'Spring Boot': {
                'PostgreSQL': 0.9,
                'MySQL': 0.9,
                'MongoDB': 0.7,
                'Redis': 0.8,
                'Kafka': 0.8,
                'RabbitMQ': 0.9
            },
            'Node.js': {
                'MongoDB': 0.9,
                'PostgreSQL': 0.8,
                'Redis': 0.9,
                'Kafka': 0.7,
                'RabbitMQ': 0.8
            }
        }

class ArchitectureEvaluator:
    """架构评估器"""
    
    def __init__(self):
        self.evaluation_criteria = self._load_evaluation_criteria()
        self.metrics_calculator = MetricsCalculator()
    
    def evaluate_architecture(self, 
                            design: ArchitectureDesign, 
                            requirements: List[Requirement]) -> Dict[str, Any]:
        """评估架构设计"""
        
        evaluation_result = {
            'overall_score': 0.0,
            'quality_scores': {},
            'metrics': {},
            'strengths': [],
            'weaknesses': [],
            'recommendations': [],
            'risk_assessment': {},
            'compliance_check': {}
        }
        
        # 质量属性评估
        quality_scores = self._evaluate_quality_attributes(design, requirements)
        evaluation_result['quality_scores'] = quality_scores
        
        # 架构度量计算
        metrics = self._calculate_architecture_metrics(design)
        evaluation_result['metrics'] = metrics
        
        # 整体评分计算
        overall_score = self._calculate_overall_score(quality_scores, metrics)
        evaluation_result['overall_score'] = overall_score
        
        # 优势和劣势分析
        strengths, weaknesses = self._analyze_strengths_weaknesses(design, quality_scores, metrics)
        evaluation_result['strengths'] = strengths
        evaluation_result['weaknesses'] = weaknesses
        
        # 改进建议
        recommendations = self._generate_recommendations(design, quality_scores, metrics, requirements)
        evaluation_result['recommendations'] = recommendations
        
        # 风险评估
        risk_assessment = self._assess_risks(design, requirements)
        evaluation_result['risk_assessment'] = risk_assessment
        
        # 合规性检查
        compliance_check = self._check_compliance(design, requirements)
        evaluation_result['compliance_check'] = compliance_check
        
        return evaluation_result
    
    def _evaluate_quality_attributes(self, 
                                   design: ArchitectureDesign, 
                                   requirements: List[Requirement]) -> Dict[str, float]:
        """评估质量属性"""
        quality_scores = {}
        
        # 收集所有需要评估的质量属性
        required_qualities = set()
        for req in requirements:
            required_qualities.update(req.quality_attributes)
        
        # 为每个质量属性评分
        for quality in required_qualities:
            score = self._evaluate_single_quality(design, quality, requirements)
            quality_scores[quality.value] = score
        
        return quality_scores
    
    def _evaluate_single_quality(self, 
                               design: ArchitectureDesign, 
                               quality: QualityAttribute, 
                               requirements: List[Requirement]) -> float:
        """评估单个质量属性"""
        
        if quality == QualityAttribute.PERFORMANCE:
            return self._evaluate_performance(design)
        elif quality == QualityAttribute.SCALABILITY:
            return self._evaluate_scalability(design)
        elif quality == QualityAttribute.MAINTAINABILITY:
            return self._evaluate_maintainability(design)
        elif quality == QualityAttribute.SECURITY:
            return self._evaluate_security(design)
        elif quality == QualityAttribute.AVAILABILITY:
            return self._evaluate_availability(design)
        elif quality == QualityAttribute.TESTABILITY:
            return self._evaluate_testability(design)
        else:
            return 0.5  # 默认中等评分
    
    def _evaluate_performance(self, design: ArchitectureDesign) -> float:
        """评估性能"""
        score = 0.5
        
        # 基于架构模式
        pattern_scores = {
            ArchitecturePattern.EVENT_DRIVEN: 0.8,
            ArchitecturePattern.PIPE_FILTER: 0.7,
            ArchitecturePattern.MICROSERVICES: 0.6,
            ArchitecturePattern.LAYERED: 0.5,
            ArchitecturePattern.BROKER: 0.4
        }
        score = pattern_scores.get(design.pattern, 0.5)
        
        # 基于组件数量(过多组件可能影响性能)
        component_count = len(design.components)
        if component_count > 20:
            score -= 0.2
        elif component_count < 5:
            score += 0.1
        
        # 基于连接复杂度
        connection_count = len(design.connections)
        if connection_count > component_count * 2:
            score -= 0.1
        
        return max(0.0, min(1.0, score))
    
    def _evaluate_scalability(self, design: ArchitectureDesign) -> float:
        """评估可扩展性"""
        score = 0.5
        
        # 基于架构模式
        pattern_scores = {
            ArchitecturePattern.MICROSERVICES: 0.9,
            ArchitecturePattern.EVENT_DRIVEN: 0.8,
            ArchitecturePattern.BROKER: 0.7,
            ArchitecturePattern.LAYERED: 0.4,
            ArchitecturePattern.MVC: 0.3
        }
        score = pattern_scores.get(design.pattern, 0.5)
        
        # 检查是否有负载均衡组件
        has_load_balancer = any('load' in comp.name.lower() or 'balance' in comp.name.lower() 
                               for comp in design.components)
        if has_load_balancer:
            score += 0.1
        
        # 检查是否有缓存组件
        has_cache = any('cache' in comp.name.lower() or 'redis' in comp.name.lower() 
                       for comp in design.components)
        if has_cache:
            score += 0.1
        
        return max(0.0, min(1.0, score))
    
    def _evaluate_maintainability(self, design: ArchitectureDesign) -> float:
        """评估可维护性"""
        score = 0.5
        
        # 基于架构模式
        pattern_scores = {
            ArchitecturePattern.CLEAN_ARCHITECTURE: 0.9,
            ArchitecturePattern.HEXAGONAL: 0.8,
            ArchitecturePattern.LAYERED: 0.7,
            ArchitecturePattern.MVC: 0.6,
            ArchitecturePattern.MICROSERVICES: 0.5
        }
        score = pattern_scores.get(design.pattern, 0.5)
        
        # 基于组件职责清晰度
        avg_responsibilities = sum(len(comp.responsibilities) for comp in design.components) / len(design.components)
        if avg_responsibilities <= 3:
            score += 0.1
        elif avg_responsibilities > 5:
            score -= 0.1
        
        # 基于依赖关系复杂度
        total_dependencies = sum(len(comp.dependencies) for comp in design.components)
        if total_dependencies < len(design.components):
            score += 0.1
        elif total_dependencies > len(design.components) * 2:
            score -= 0.1
        
        return max(0.0, min(1.0, score))
    
    def _evaluate_security(self, design: ArchitectureDesign) -> float:
        """评估安全性"""
        score = 0.5
        
        # 检查是否有安全相关组件
        security_components = ['auth', 'security', 'firewall', 'gateway', 'proxy']
        has_security = any(any(sec_comp in comp.name.lower() for sec_comp in security_components) 
                          for comp in design.components)
        if has_security:
            score += 0.3
        
        # 基于架构模式的安全性
        pattern_scores = {
            ArchitecturePattern.LAYERED: 0.8,
            ArchitecturePattern.HEXAGONAL: 0.7,
            ArchitecturePattern.MICROSERVICES: 0.5,
            ArchitecturePattern.BROKER: 0.6
        }
        pattern_score = pattern_scores.get(design.pattern, 0.5)
        score = (score + pattern_score) / 2
        
        return max(0.0, min(1.0, score))
    
    def _evaluate_availability(self, design: ArchitectureDesign) -> float:
        """评估可用性"""
        score = 0.5
        
        # 检查是否有冗余组件
        component_names = [comp.name.lower() for comp in design.components]
        redundancy_indicators = ['replica', 'backup', 'failover', 'cluster']
        has_redundancy = any(indicator in name for name in component_names for indicator in redundancy_indicators)
        if has_redundancy:
            score += 0.2
        
        # 检查是否有监控组件
        monitoring_indicators = ['monitor', 'health', 'check', 'alert']
        has_monitoring = any(indicator in name for name in component_names for indicator in monitoring_indicators)
        if has_monitoring:
            score += 0.1
        
        # 基于架构模式
        if design.pattern == ArchitecturePattern.MICROSERVICES:
            score += 0.1  # 微服务架构有利于可用性
        elif design.pattern == ArchitecturePattern.LAYERED:
            score -= 0.1  # 分层架构可能存在单点故障
        
        return max(0.0, min(1.0, score))
    
    def _evaluate_testability(self, design: ArchitectureDesign) -> float:
        """评估可测试性"""
        score = 0.5
        
        # 基于架构模式
        pattern_scores = {
            ArchitecturePattern.CLEAN_ARCHITECTURE: 0.9,
            ArchitecturePattern.HEXAGONAL: 0.8,
            ArchitecturePattern.MVC: 0.7,
            ArchitecturePattern.LAYERED: 0.6,
            ArchitecturePattern.MICROSERVICES: 0.7
        }
        score = pattern_scores.get(design.pattern, 0.5)
        
        # 基于组件独立性
        independent_components = len([comp for comp in design.components if len(comp.dependencies) <= 2])
        independence_ratio = independent_components / len(design.components)
        score += independence_ratio * 0.2
        
        return max(0.0, min(1.0, score))
    
    def _calculate_architecture_metrics(self, design: ArchitectureDesign) -> Dict[str, float]:
        """计算架构度量"""
        metrics = {}
        
        # 组件数量
        metrics['component_count'] = len(design.components)
        
        # 连接数量
        metrics['connection_count'] = len(design.connections)
        
        # 平均组件职责数
        if design.components:
            metrics['avg_responsibilities_per_component'] = sum(len(comp.responsibilities) for comp in design.components) / len(design.components)
        else:
            metrics['avg_responsibilities_per_component'] = 0
        
        # 平均组件依赖数
        if design.components:
            metrics['avg_dependencies_per_component'] = sum(len(comp.dependencies) for comp in design.components) / len(design.components)
        else:
            metrics['avg_dependencies_per_component'] = 0
        
        # 架构复杂度(基于组件和连接)
        if design.components:
            metrics['architecture_complexity'] = (len(design.components) + len(design.connections)) / len(design.components)
        else:
            metrics['architecture_complexity'] = 0
        
        # 耦合度(基于依赖关系)
        total_dependencies = sum(len(comp.dependencies) for comp in design.components)
        if design.components:
            metrics['coupling_degree'] = total_dependencies / len(design.components)
        else:
            metrics['coupling_degree'] = 0
        
        # 内聚度(基于组件职责)
        if design.components:
            responsibility_variance = np.var([len(comp.responsibilities) for comp in design.components])
            metrics['cohesion_degree'] = 1.0 / (1.0 + responsibility_variance)
        else:
            metrics['cohesion_degree'] = 0
        
        return metrics
    
    def _calculate_overall_score(self, quality_scores: Dict[str, float], metrics: Dict[str, float]) -> float:
        """计算整体评分"""
        if not quality_scores:
            return 0.0
        
        # 质量属性权重
        quality_weights = {
            'performance': 0.2,
            'scalability': 0.2,
            'maintainability': 0.15,
            'security': 0.15,
            'availability': 0.1,
            'testability': 0.1,
            'reliability': 0.1
        }
        
        # 计算加权质量分数
        weighted_quality_score = 0.0
        total_weight = 0.0
        
        for quality, score in quality_scores.items():
            weight = quality_weights.get(quality, 0.1)
            weighted_quality_score += score * weight
            total_weight += weight
        
        if total_weight > 0:
            quality_score = weighted_quality_score / total_weight
        else:
            quality_score = 0.0
        
        # 基于度量调整分数
        metrics_adjustment = 0.0
        
        # 复杂度惩罚
        complexity = metrics.get('architecture_complexity', 0)
        if complexity > 3:
            metrics_adjustment -= 0.1
        elif complexity < 1.5:
            metrics_adjustment += 0.05
        
        # 耦合度惩罚
        coupling = metrics.get('coupling_degree', 0)
        if coupling > 3:
            metrics_adjustment -= 0.1
        elif coupling < 1:
            metrics_adjustment += 0.05
        
        # 内聚度奖励
        cohesion = metrics.get('cohesion_degree', 0)
        if cohesion > 0.8:
            metrics_adjustment += 0.05
        
        overall_score = quality_score + metrics_adjustment
        return max(0.0, min(1.0, overall_score))
    
    def _analyze_strengths_weaknesses(self, 
                                    design: ArchitectureDesign, 
                                    quality_scores: Dict[str, float], 
                                    metrics: Dict[str, float]) -> Tuple[List[str], List[str]]:
        """分析优势和劣势"""
        strengths = []
        weaknesses = []
        
        # 基于质量分数分析
        for quality, score in quality_scores.items():
            if score >= 0.8:
                strengths.append(f"{quality}表现优秀 (评分: {score:.2f})")
            elif score <= 0.4:
                weaknesses.append(f"{quality}需要改进 (评分: {score:.2f})")
        
        # 基于架构模式分析
        pattern_strengths = {
            ArchitecturePattern.MICROSERVICES: ["高可扩展性", "技术多样性", "独立部署"],
            ArchitecturePattern.LAYERED: ["简单易懂", "职责分离", "易于开发"],
            ArchitecturePattern.EVENT_DRIVEN: ["高性能", "松耦合", "实时响应"],
            ArchitecturePattern.CLEAN_ARCHITECTURE: ["高可维护性", "易于测试", "依赖倒置"]
        }
        
        pattern_weaknesses = {
            ArchitecturePattern.MICROSERVICES: ["分布式复杂性", "网络延迟", "数据一致性"],
            ArchitecturePattern.LAYERED: ["性能开销", "层间耦合", "难以并行开发"],
            ArchitecturePattern.EVENT_DRIVEN: ["调试困难", "事件顺序", "复杂性"],
            ArchitecturePattern.CLEAN_ARCHITECTURE: ["学习曲线陡峭", "初期开发成本高"]
        }
        
        if design.pattern in pattern_strengths:
            strengths.extend(pattern_strengths[design.pattern])
        
        if design.pattern in pattern_weaknesses:
            weaknesses.extend(pattern_weaknesses[design.pattern])
        
        # 基于度量分析
        if metrics.get('coupling_degree', 0) < 1.5:
            strengths.append("组件间耦合度较低")
        elif metrics.get('coupling_degree', 0) > 3:
            weaknesses.append("组件间耦合度过高")
        
        if metrics.get('cohesion_degree', 0) > 0.8:
            strengths.append("组件内聚度较高")
        elif metrics.get('cohesion_degree', 0) < 0.5:
            weaknesses.append("组件内聚度较低")
        
        return strengths, weaknesses
    
    def _generate_recommendations(self, 
                                design: ArchitectureDesign, 
                                quality_scores: Dict[str, float], 
                                metrics: Dict[str, float],
                                requirements: List[Requirement]) -> List[str]:
        """生成改进建议"""
        recommendations = []
        
        # 基于质量分数生成建议
        for quality, score in quality_scores.items():
            if score < 0.6:
                if quality == 'performance':
                    recommendations.append("考虑添加缓存层或优化数据访问路径")
                elif quality == 'scalability':
                    recommendations.append("考虑采用微服务架构或添加负载均衡")
                elif quality == 'security':
                    recommendations.append("添加安全网关或身份认证组件")
                elif quality == 'maintainability':
                    recommendations.append("重构组件职责,降低耦合度")
                elif quality == 'availability':
                    recommendations.append("添加冗余组件和健康检查机制")
        
        # 基于度量生成建议
        if metrics.get('coupling_degree', 0) > 2.5:
            recommendations.append("降低组件间依赖,考虑使用事件驱动或消息队列")
        
        if metrics.get('architecture_complexity', 0) > 3:
            recommendations.append("简化架构设计,合并功能相似的组件")
        
        if metrics.get('component_count', 0) > 20:
            recommendations.append("考虑将相关组件合并或分层组织")
        
        # 基于需求生成建议
        high_priority_reqs = [req for req in requirements if req.priority == 'high']
        for req in high_priority_reqs:
            if QualityAttribute.PERFORMANCE in req.quality_attributes:
                recommendations.append("针对高优先级性能需求,考虑性能优化策略")
            if QualityAttribute.SECURITY in req.quality_attributes:
                recommendations.append("针对高优先级安全需求,加强安全防护措施")
        
        return list(set(recommendations))  # 去重
    
    def _assess_risks(self, design: ArchitectureDesign, requirements: List[Requirement]) -> Dict[str, Any]:
        """评估风险"""
        risks = {
            'technical_risks': [],
            'operational_risks': [],
            'business_risks': [],
            'overall_risk_level': 'medium'
        }
        
        # 技术风险
        if design.pattern == ArchitecturePattern.MICROSERVICES:
            risks['technical_risks'].append({
                'risk': '分布式系统复杂性',
                'probability': 'high',
                'impact': 'medium',
                'mitigation': '建立完善的监控和日志系统'
            })
        
        if len(design.components) > 15:
            risks['technical_risks'].append({
                'risk': '系统复杂度过高',
                'probability': 'medium',
                'impact': 'high',
                'mitigation': '简化架构设计,合并相似组件'
            })
        
        # 运营风险
        has_monitoring = any('monitor' in comp.name.lower() for comp in design.components)
        if not has_monitoring:
            risks['operational_risks'].append({
                'risk': '缺乏监控机制',
                'probability': 'high',
                'impact': 'high',
                'mitigation': '添加监控和告警系统'
            })
        
        # 业务风险
        critical_reqs = [req for req in requirements if req.priority == 'high']
        if len(critical_reqs) > 5:
            risks['business_risks'].append({
                'risk': '关键需求过多',
                'probability': 'medium',
                'impact': 'high',
                'mitigation': '重新评估需求优先级'
            })
        
        # 计算整体风险级别
        total_risks = len(risks['technical_risks']) + len(risks['operational_risks']) + len(risks['business_risks'])
        if total_risks >= 5:
            risks['overall_risk_level'] = 'high'
        elif total_risks <= 2:
            risks['overall_risk_level'] = 'low'
        
        return risks
    
    def _check_compliance(self, design: ArchitectureDesign, requirements: List[Requirement]) -> Dict[str, Any]:
        """检查合规性"""
        compliance = {
            'requirements_coverage': 0.0,
            'architecture_principles': [],
            'best_practices': [],
            'violations': []
        }
        
        # 需求覆盖率检查
        covered_requirements = 0
        for req in requirements:
            if self._is_requirement_covered(req, design):
                covered_requirements += 1
        
        if requirements:
            compliance['requirements_coverage'] = covered_requirements / len(requirements)
        
        # 架构原则检查
        principles = self._check_architecture_principles(design)
        compliance['architecture_principles'] = principles
        
        # 最佳实践检查
        best_practices = self._check_best_practices(design)
        compliance['best_practices'] = best_practices
        
        # 违规检查
        violations = self._check_violations(design)
        compliance['violations'] = violations
        
        return compliance
    
    def _is_requirement_covered(self, requirement: Requirement, design: ArchitectureDesign) -> bool:
        """检查需求是否被覆盖"""
        # 简化的需求覆盖检查
        req_keywords = requirement.description.lower().split()
        
        for component in design.components:
            comp_text = (component.name + " " + component.description + " " + 
                        " ".join(component.responsibilities)).lower()
            
            # 如果组件描述中包含需求关键词,认为需求被覆盖
            if any(keyword in comp_text for keyword in req_keywords if len(keyword) > 3):
                return True
        
        return False
    
    def _check_architecture_principles(self, design: ArchitectureDesign) -> List[Dict[str, Any]]:
        """检查架构原则"""
        principles = []
        
        # 单一职责原则
        avg_responsibilities = sum(len(comp.responsibilities) for comp in design.components) / len(design.components)
        principles.append({
            'principle': '单一职责原则',
            'status': 'pass' if avg_responsibilities <= 3 else 'fail',
            'description': f'平均每个组件承担 {avg_responsibilities:.1f} 个职责'
        })
        
        # 依赖倒置原则
        has_interfaces = any(comp.interfaces for comp in design.components)
        principles.append({
            'principle': '依赖倒置原则',
            'status': 'pass' if has_interfaces else 'warning',
            'description': '检查是否定义了抽象接口'
        })
        
        # 开闭原则
        extensible_components = len([comp for comp in design.components if 'interface' in comp.description.lower()])
        principles.append({
            'principle': '开闭原则',
            'status': 'pass' if extensible_components > 0 else 'warning',
            'description': f'{extensible_components} 个组件支持扩展'
        })
        
        return principles
    
    def _check_best_practices(self, design: ArchitectureDesign) -> List[Dict[str, Any]]:
        """检查最佳实践"""
        practices = []
        
        # 分层清晰
        if design.pattern == ArchitecturePattern.LAYERED:
            practices.append({
                'practice': '分层架构',
                'status': 'pass',
                'description': '采用了分层架构模式'
            })
        
        # 组件命名规范
        well_named_components = len([comp for comp in design.components if len(comp.name) > 3 and '_' not in comp.name])
        practices.append({
            'practice': '组件命名规范',
            'status': 'pass' if well_named_components / len(design.components) > 0.8 else 'warning',
            'description': f'{well_named_components}/{len(design.components)} 个组件命名规范'
        })
        
        # 文档完整性
        documented_components = len([comp for comp in design.components if comp.description])
        practices.append({
            'practice': '文档完整性',
            'status': 'pass' if documented_components == len(design.components) else 'warning',
            'description': f'{documented_components}/{len(design.components)} 个组件有描述'
        })
        
        return practices
    
    def _check_violations(self, design: ArchitectureDesign) -> List[Dict[str, Any]]:
        """检查违规情况"""
        violations = []
        
        # 循环依赖检查
        if self._has_circular_dependencies(design):
            violations.append({
                'violation': '循环依赖',
                'severity': 'high',
                'description': '组件间存在循环依赖关系'
            })
        
        # 组件过大检查
        large_components = [comp for comp in design.components if len(comp.responsibilities) > 5]
        if large_components:
            violations.append({
                'violation': '组件职责过多',
                'severity': 'medium',
                'description': f'{len(large_components)} 个组件职责过多'
            })
        
        # 孤立组件检查
        isolated_components = [comp for comp in design.components if not comp.dependencies and 
                             not any(other.dependencies and comp.id in other.dependencies for other in design.components)]
        if isolated_components:
            violations.append({
                'violation': '孤立组件',
                'severity': 'low',
                'description': f'{len(isolated_components)} 个组件没有依赖关系'
            })
        
        return violations
    
    def _has_circular_dependencies(self, design: ArchitectureDesign) -> bool:
        """检查是否存在循环依赖"""
        # 构建依赖图
        graph = nx.DiGraph()
        
        for component in design.components:
            graph.add_node(component.id)
            for dep in component.dependencies:
                graph.add_edge(component.id, dep)
        
        # 检查循环
        try:
            cycles = list(nx.simple_cycles(graph))
            return len(cycles) > 0
        except:
            return False
    
    def _load_evaluation_criteria(self) -> Dict[str, Any]:
        """加载评估标准"""
        return {
            'quality_weights': {
                'performance': 0.2,
                'scalability': 0.2,
                'maintainability': 0.15,
                'security': 0.15,
                'availability': 0.1,
                'testability': 0.1,
                'reliability': 0.1
            },
            'metrics_thresholds': {
                'max_components': 20,
                'max_coupling': 3.0,
                'min_cohesion': 0.6,
                'max_complexity': 3.0
            }
        }

class MetricsCalculator:
    """度量计算器"""
    
    def calculate_coupling_metrics(self, design: ArchitectureDesign) -> Dict[str, float]:
        """计算耦合度量"""
        if not design.components:
            return {}
        
        # 传入耦合 (Ca)
        ca_values = {}
        for comp in design.components:
            ca_values[comp.id] = len([other for other in design.components 
                                    if comp.id in other.dependencies])
        
        # 传出耦合 (Ce)
        ce_values = {}
        for comp in design.components:
            ce_values[comp.id] = len(comp.dependencies)
        
        # 不稳定性 (I = Ce / (Ca + Ce))
        instability = {}
        for comp in design.components:
            ca = ca_values[comp.id]
            ce = ce_values[comp.id]
            if ca + ce > 0:
                instability[comp.id] = ce / (ca + ce)
            else:
                instability[comp.id] = 0
        
        return {
            'afferent_coupling': ca_values,
            'efferent_coupling': ce_values,
            'instability': instability,
            'avg_instability': sum(instability.values()) / len(instability) if instability else 0
        }
    
    def calculate_cohesion_metrics(self, design: ArchitectureDesign) -> Dict[str, float]:
        """计算内聚度量"""
        cohesion_values = {}
        
        for comp in design.components:
            # 基于职责数量计算内聚度(简化方法)
            responsibility_count = len(comp.responsibilities)
            if responsibility_count <= 1:
                cohesion_values[comp.id] = 1.0
            elif responsibility_count <= 3:
                cohesion_values[comp.id] = 0.8
            elif responsibility_count <= 5:
                cohesion_values[comp.id] = 0.6
            else:
                cohesion_values[comp.id] = 0.4
        
        avg_cohesion = sum(cohesion_values.values()) / len(cohesion_values) if cohesion_values else 0
        
        return {
            'component_cohesion': cohesion_values,
            'avg_cohesion': avg_cohesion
        }

# 使用示例和演示
def demo_architecture_design_system():
    """演示架构设计系统"""
    
    print("🏗️ AI辅助软件架构设计与评估系统演示")
    print("=" * 60)
    
    # 1. 需求分析
    print("\n1. 需求分析阶段")
    print("-" * 30)
    
    requirements_text = """
    系统需要支持高并发用户访问,预计同时在线用户数达到10万。
    系统必须具备高可用性,年可用性不低于99.9%。
    系统需要支持快速扩展,能够根据负载自动伸缩。
    系统必须确保数据安全,支持用户身份认证和授权。
    系统需要易于维护和测试,支持持续集成和部署。
    系统必须使用云原生技术栈,部署在AWS云平台。
    系统需要支持实时数据处理和分析功能。
    """
    
    analyzer = RequirementAnalyzer()
    requirements = analyzer.analyze_requirements(requirements_text)
    
    print(f"分析出 {len(requirements)} 个需求:")
    for req in requirements[:3]:  # 显示前3个
        print(f"  - {req.name}")
        print(f"    类型: {req.type}, 优先级: {req.priority}")
        print(f"    质量属性: {[qa.value for qa in req.quality_attributes]}")
        print()
    
    # 2. 架构模式推荐
    print("2. 架构模式推荐")
    print("-" * 30)
    
    recommender = ArchitecturePatternRecommender()
    pattern_recommendations = recommender.recommend_patterns(requirements)
    
    print("推荐的架构模式:")
    for pattern, score in pattern_recommendations[:3]:
        print(f"  - {pattern.value}: {score:.2f}")
    
    # 选择最佳模式
    best_pattern = pattern_recommendations[0][0] if pattern_recommendations else ArchitecturePattern.MICROSERVICES
    print(f"\n选择架构模式: {best_pattern.value}")
    
    # 3. 技术栈推荐
    print("\n3. 技术栈推荐")
    print("-" * 30)
    
    tech_advisor = TechnologyStackAdvisor()
    tech_recommendations = tech_advisor.recommend_technology_stack(requirements, best_pattern)
    
    for category, techs in tech_recommendations.items():
        if techs:
            print(f"\n{category.upper()}:")
            for tech in techs[:2]:  # 显示前2个推荐
                print(f"  - {tech['name']} (评分: {tech['score']:.2f})")
                print(f"    理由: {tech['rationale']}")
    
    # 4. 创建架构设计
    print("\n4. 架构设计生成")
    print("-" * 30)
    
    # 创建示例架构设计
    components = [
        Component(
            id="api_gateway",
            name="API Gateway",
            description="统一API入口,负责路由和认证",
            responsibilities=["请求路由", "身份认证", "限流"],
            interfaces=["HTTP REST API"],
            dependencies=["auth_service", "user_service"],
            technology="Spring Cloud Gateway",
            deployment_unit="Container"
        ),
        Component(
            id="user_service",
            name="User Service",
            description="用户管理微服务",
            responsibilities=["用户注册", "用户信息管理"],
            interfaces=["REST API", "gRPC"],
            dependencies=["user_db", "cache"],
            technology="Spring Boot",
            deployment_unit="Container"
        ),
        Component(
            id="auth_service",
            name="Authentication Service",
            description="身份认证服务",
            responsibilities=["用户认证", "令牌管理"],
            interfaces=["REST API"],
            dependencies=["auth_db"],
            technology="Spring Security",
            deployment_unit="Container"
        ),
        Component(
            id="user_db",
            name="User Database",
            description="用户数据存储",
            responsibilities=["数据持久化"],
            interfaces=["SQL"],
            dependencies=[],
            technology="PostgreSQL",
            deployment_unit="Database"
        ),
        Component(
            id="cache",
            name="Cache Layer",
            description="缓存层",
            responsibilities=["数据缓存"],
            interfaces=["Redis Protocol"],
            dependencies=[],
            technology="Redis",
            deployment_unit="Container"
        )
    ]
    
    connections = [
        {"from": "api_gateway", "to": "user_service", "type": "HTTP"},
        {"from": "api_gateway", "to": "auth_service", "type": "HTTP"},
        {"from": "user_service", "to": "user_db", "type": "JDBC"},
        {"from": "user_service", "to": "cache", "type": "Redis"},
        {"from": "auth_service", "to": "auth_db", "type": "JDBC"}
    ]
    
    decisions = [
        ArchitectureDecision(
            id="ADR_001",
            title="选择微服务架构",
            status="accepted",
            context="系统需要支持高并发和快速扩展",
            decision="采用微服务架构模式",
            consequences=["提高可扩展性", "增加运维复杂度"],
            alternatives=["单体架构", "分层架构"],
            rationale="微服务架构最适合高并发和扩展需求",
            date="2024-07-14"
        )
    ]
    
    architecture_design = ArchitectureDesign(
        id="arch_001",
        name="用户管理系统架构",
        description="基于微服务的用户管理系统",
        pattern=best_pattern,
        components=components,
        connections=connections,
        decisions=decisions,
        quality_scenarios=[],
        constraints=["云原生部署", "高可用性"],
        assumptions=["AWS云平台", "容器化部署"]
    )
    
    print(f"生成架构设计: {architecture_design.name}")
    print(f"架构模式: {architecture_design.pattern.value}")
    print(f"组件数量: {len(architecture_design.components)}")
    print(f"连接数量: {len(architecture_design.connections)}")
    
    # 5. 架构评估
    print("\n5. 架构评估")
    print("-" * 30)
    
    evaluator = ArchitectureEvaluator()
    evaluation_result = evaluator.evaluate_architecture(architecture_design, requirements)
    
    print(f"整体评分: {evaluation_result['overall_score']:.2f}")
    print("\n质量属性评分:")
    for quality, score in evaluation_result['quality_scores'].items():
        print(f"  - {quality}: {score:.2f}")
    
    print(f"\n架构度量:")
    for metric, value in evaluation_result['metrics'].items():
        print(f"  - {metric}: {value:.2f}")
    
    print(f"\n优势 ({len(evaluation_result['strengths'])}):")
    for strength in evaluation_result['strengths'][:3]:
        print(f"  ✓ {strength}")
    
    print(f"\n劣势 ({len(evaluation_result['weaknesses'])}):")
    for weakness in evaluation_result['weaknesses'][:3]:
        print(f"  ✗ {weakness}")
    
    print(f"\n改进建议 ({len(evaluation_result['recommendations'])}):")
    for recommendation in evaluation_result['recommendations'][:3]:
        print(f"  → {recommendation}")
    
    # 6. 风险评估
    print("\n6. 风险评估")
    print("-" * 30)
    
    risk_assessment = evaluation_result['risk_assessment']
    print(f"整体风险级别: {risk_assessment['overall_risk_level']}")
    
    if risk_assessment['technical_risks']:
        print("\n技术风险:")
        for risk in risk_assessment['technical_risks'][:2]:
            print(f"  - {risk['risk']} (概率: {risk['probability']}, 影响: {risk['impact']})")
            print(f"    缓解措施: {risk['mitigation']}")
    
    # 7. 合规性检查
    print("\n7. 合规性检查")
    print("-" * 30)
    
    compliance = evaluation_result['compliance_check']
    print(f"需求覆盖率: {compliance['requirements_coverage']:.1%}")
    
    print("\n架构原则检查:")
    for principle in compliance['architecture_principles']:
        status_icon = "✓" if principle['status'] == 'pass' else "⚠" if principle['status'] == 'warning' else "✗"
        print(f"  {status_icon} {principle['principle']}: {principle['description']}")
    
    # 8. 生成架构文档
    print("\n8. 架构文档生成")
    print("-" * 30)
    
    doc_generator = ArchitectureDocumentGenerator()
    architecture_doc = doc_generator.generate_architecture_document(
        architecture_design, requirements, evaluation_result
    )
    
    # 保存文档
    with open('architecture_document.md', 'w', encoding='utf-8') as f:
        f.write(architecture_doc)
    
    print("架构文档已生成: architecture_document.md")
    
    print("\n🎯 架构设计与评估完成!")
    print("\n生成的文件:")
    print("- architecture_document.md (架构文档)")

class ArchitectureDocumentGenerator:
    """架构文档生成器"""
    
    def generate_architecture_document(self, 
                                     design: ArchitectureDesign,
                                     requirements: List[Requirement],
                                     evaluation: Dict[str, Any]) -> str:
        """生成架构文档"""
        
        doc = f"""# {design.name} - 架构设计文档

## 1. 概述

### 1.1 项目背景
{design.description}

### 1.2 架构模式
**选择的架构模式**: {design.pattern.value}

### 1.3 关键决策
"""
        
        for decision in design.decisions:
            doc += f"""
#### {decision.title}
- **状态**: {decision.status}
- **上下文**: {decision.context}
- **决策**: {decision.decision}
- **理由**: {decision.rationale}
- **后果**: {', '.join(decision.consequences)}
"""
        
        doc += f"""
## 2. 需求分析

### 2.1 功能需求
"""
        functional_reqs = [req for req in requirements if req.type == 'functional']
        for req in functional_reqs:
            doc += f"- {req.name}: {req.description[:100]}...\n"
        
        doc += f"""
### 2.2 非功能需求
"""
        non_functional_reqs = [req for req in requirements if req.type == 'non_functional']
        for req in non_functional_reqs:
            doc += f"- {req.name}: {req.description[:100]}...\n"
        
        doc += f"""
### 2.3 约束条件
"""
        for constraint in design.constraints:
            doc += f"- {constraint}\n"
        
        doc += f"""
## 3. 架构设计

### 3.1 系统架构图

```mermaid
graph TB
"""
        
        # 生成Mermaid图
        for component in design.components:
            doc += f"    {component.id}[{component.name}]\n"
        
        for connection in design.connections:
            doc += f"    {connection['from']} --> {connection['to']}\n"
        
        doc += "```\n"
        
        doc += f"""
### 3.2 组件说明

| 组件名称 | 职责 | 技术栈 | 部署单元 |
|----------|------|--------|----------|
"""
        
        for component in design.components:
            responsibilities = ', '.join(component.responsibilities[:2])
            doc += f"| {component.name} | {responsibilities} | {component.technology} | {component.deployment_unit} |\n"
        
        doc += f"""
### 3.3 接口设计

"""
        for component in design.components:
            if component.interfaces:
                doc += f"#### {component.name}\n"
                for interface in component.interfaces:
                    doc += f"- {interface}\n"
                doc += "\n"
        
        doc += f"""
## 4. 质量属性

### 4.1 质量评估结果

| 质量属性 | 评分 | 状态 |
|----------|------|------|
"""
        
        for quality, score in evaluation['quality_scores'].items():
            status = "优秀" if score >= 0.8 else "良好" if score >= 0.6 else "需改进"
            doc += f"| {quality} | {score:.2f} | {status} |\n"
        
        doc += f"""
### 4.2 架构度量

| 度量指标 | 值 |
|----------|-----|
"""
        
        for metric, value in evaluation['metrics'].items():
            doc += f"| {metric} | {value:.2f} |\n"
        
        doc += f"""
## 5. 风险分析

### 5.1 技术风险
"""
        
        for risk in evaluation['risk_assessment']['technical_risks']:
            doc += f"""
#### {risk['risk']}
- **概率**: {risk['probability']}
- **影响**: {risk['impact']}
- **缓解措施**: {risk['mitigation']}
"""
        
        doc += f"""
### 5.2 运营风险
"""
        
        for risk in evaluation['risk_assessment']['operational_risks']:
            doc += f"""
#### {risk['risk']}
- **概率**: {risk['probability']}
- **影响**: {risk['impact']}
- **缓解措施**: {risk['mitigation']}
"""
        
        doc += f"""
## 6. 实施建议

### 6.1 优势
"""
        
        for strength in evaluation['strengths']:
            doc += f"- {strength}\n"
        
        doc += f"""
### 6.2 改进建议
"""
        
        for recommendation in evaluation['recommendations']:
            doc += f"- {recommendation}\n"
        
        doc += f"""
### 6.3 实施路线图

1. **阶段一**: 核心服务开发
   - 实现用户服务和认证服务
   - 建立基础设施

2. **阶段二**: 扩展功能
   - 添加业务服务
   - 完善监控体系

3. **阶段三**: 优化改进
   - 性能优化
   - 安全加固

## 7. 运维指南

### 7.1 部署架构
- 容器化部署
- 微服务编排
- 自动化运维

### 7.2 监控策略
- 应用性能监控
- 基础设施监控
- 业务指标监控

### 7.3 安全措施
- 身份认证
- 数据加密
- 网络安全

---

**文档版本**: 1.0  
**生成时间**: {time.strftime('%Y-%m-%d %H:%M:%S')}  
**生成工具**: AI架构设计助手
"""
        
        return doc

if __name__ == "__main__":
    demo_architecture_design_system()

架构模式智能推荐

决策树推荐算法

class AdvancedPatternRecommender:
    """高级架构模式推荐器"""
    
    def __init__(self):
        self.decision_tree = self._build_advanced_decision_tree()
        self.ml_model = self._load_ml_model()
        self.case_database = self._load_case_database()
    
    def recommend_with_reasoning(self, requirements: List[Requirement]) -> Dict[str, Any]:
        """带推理过程的架构模式推荐"""
        
        # 特征提取
        features = self._extract_features(requirements)
        
        # 决策树推荐
        tree_recommendation = self._tree_based_recommendation(features)
        
        # 案例推理推荐
        case_recommendation = self._case_based_recommendation(features)
        
        # ML模型推荐
        ml_recommendation = self._ml_based_recommendation(features)
        
        # 综合推荐
        final_recommendation = self._combine_recommendations(
            tree_recommendation, case_recommendation, ml_recommendation
        )
        
        return {
            'recommended_pattern': final_recommendation['pattern'],
            'confidence': final_recommendation['confidence'],
            'reasoning': final_recommendation['reasoning'],
            'alternatives': final_recommendation['alternatives'],
            'decision_path': final_recommendation['decision_path'],
            'similar_cases': final_recommendation['similar_cases']
        }
    
    def _extract_features(self, requirements: List[Requirement]) -> Dict[str, Any]:
        """提取特征向量"""
        features = {
            'system_size': self._estimate_system_size(requirements),
            'complexity_level': self._estimate_complexity(requirements),
            'performance_criticality': self._assess_performance_criticality(requirements),
            'scalability_needs': self._assess_scalability_needs(requirements),
            'security_requirements': self._assess_security_requirements(requirements),
            'maintainability_importance': self._assess_maintainability_importance(requirements),
            'team_size': self._estimate_team_size(requirements),
            'technology_constraints': self._extract_technology_constraints(requirements),
            'deployment_environment': self._identify_deployment_environment(requirements),
            'integration_complexity': self._assess_integration_complexity(requirements)
        }
        
        return features
    
    def _estimate_system_size(self, requirements: List[Requirement]) -> str:
        """估算系统规模"""
        functional_reqs = len([req for req in requirements if req.type == 'functional'])
        
        if functional_reqs <= 5:
            return 'small'
        elif functional_reqs <= 15:
            return 'medium'
        else:
            return 'large'
    
    def _estimate_complexity(self, requirements: List[Requirement]) -> str:
        """估算复杂度"""
        complexity_indicators = 0
        
        for req in requirements:
            desc_lower = req.description.lower()
            if any(word in desc_lower for word in ['integration', 'workflow', 'process', 'complex']):
                complexity_indicators += 1
            if len(req.quality_attributes) > 3:
                complexity_indicators += 1
        
        if complexity_indicators <= 2:
            return 'low'
        elif complexity_indicators <= 5:
            return 'medium'
        else:
            return 'high'
    
    def _tree_based_recommendation(self, features: Dict[str, Any]) -> Dict[str, Any]:
        """基于决策树的推荐"""
        decision_path = []
        current_node = self.decision_tree
        
        while isinstance(current_node, dict) and 'question' in current_node:
            question = current_node['question']
            feature_value = features.get(question, 'unknown')
            
            decision_path.append(f"{question}: {feature_value}")
            
            if feature_value in current_node:
                current_node = current_node[feature_value]
            else:
                current_node = current_node.get('default', ArchitecturePattern.LAYERED)
        
        return {
            'pattern': current_node,
            'confidence': 0.8,
            'decision_path': decision_path
        }
    
    def _case_based_recommendation(self, features: Dict[str, Any]) -> Dict[str, Any]:
        """基于案例推理的推荐"""
        similarities = []
        
        for case in self.case_database:
            similarity = self._calculate_case_similarity(features, case['features'])
            similarities.append((case, similarity))
        
        # 排序并选择最相似的案例
        similarities.sort(key=lambda x: x[1], reverse=True)
        best_case = similarities[0][0]
        
        return {
            'pattern': best_case['pattern'],
            'confidence': similarities[0][1],
            'similar_case': best_case
        }
    
    def _calculate_case_similarity(self, features1: Dict[str, Any], features2: Dict[str, Any]) -> float:
        """计算案例相似度"""
        similarity = 0.0
        total_features = 0
        
        for key in features1:
            if key in features2:
                if features1[key] == features2[key]:
                    similarity += 1.0
                elif isinstance(features1[key], str) and isinstance(features2[key], str):
                    # 字符串相似度
                    if features1[key] in features2[key] or features2[key] in features1[key]:
                        similarity += 0.5
                total_features += 1
        
        return similarity / total_features if total_features > 0 else 0.0
    
    def _build_advanced_decision_tree(self) -> Dict[str, Any]:
        """构建高级决策树"""
        return {
            'question': 'system_size',
            'small': {
                'question': 'complexity_level',
                'low': ArchitecturePattern.LAYERED,
                'medium': ArchitecturePattern.MVC,
                'high': ArchitecturePattern.CLEAN_ARCHITECTURE,
                'default': ArchitecturePattern.LAYERED
            },
            'medium': {
                'question': 'scalability_needs',
                'low': ArchitecturePattern.LAYERED,
                'medium': ArchitecturePattern.HEXAGONAL,
                'high': ArchitecturePattern.MICROSERVICES,
                'default': ArchitecturePattern.LAYERED
            },
            'large': {
                'question': 'performance_criticality',
                'low': ArchitecturePattern.MICROSERVICES,
                'medium': ArchitecturePattern.EVENT_DRIVEN,
                'high': ArchitecturePattern.EVENT_DRIVEN,
                'default': ArchitecturePattern.MICROSERVICES
            },
            'default': ArchitecturePattern.LAYERED
        }
    
    def _load_case_database(self) -> List[Dict[str, Any]]:
        """加载案例数据库"""
        return [
            {
                'name': '电商平台',
                'features': {
                    'system_size': 'large',
                    'complexity_level': 'high',
                    'performance_criticality': 'high',
                    'scalability_needs': 'high',
                    'team_size': 'large'
                },
                'pattern': ArchitecturePattern.MICROSERVICES,
                'success_factors': ['高可扩展性', '团队独立开发', '技术多样性'],
                'challenges': ['分布式复杂性', '数据一致性', '运维成本']
            },
            {
                'name': '企业管理系统',
                'features': {
                    'system_size': 'medium',
                    'complexity_level': 'medium',
                    'performance_criticality': 'medium',
                    'scalability_needs': 'low',
                    'team_size': 'small'
                },
                'pattern': ArchitecturePattern.LAYERED,
                'success_factors': ['开发简单', '易于理解', '成本较低'],
                'challenges': ['扩展性限制', '性能瓶颈']
            },
            {
                'name': '实时数据处理系统',
                'features': {
                    'system_size': 'large',
                    'complexity_level': 'high',
                    'performance_criticality': 'high',
                    'scalability_needs': 'high',
                    'deployment_environment': 'cloud'
                },
                'pattern': ArchitecturePattern.EVENT_DRIVEN,
                'success_factors': ['高性能', '实时处理', '松耦合'],
                'challenges': ['调试困难', '事件顺序', '复杂性管理']
            }
        ]

总结与最佳实践

架构设计最佳实践

class ArchitectureDesignBestPractices:
    """架构设计最佳实践"""
    
    @staticmethod
    def get_design_principles() -> Dict[str, List[str]]:
        """获取设计原则"""
        return {
            'SOLID原则': [
                '单一职责原则 (SRP)',
                '开闭原则 (OCP)',
                '里氏替换原则 (LSP)',
                '接口隔离原则 (ISP)',
                '依赖倒置原则 (DIP)'
            ],
            '架构原则': [
                '关注点分离',
                '松耦合高内聚',
                '最小知识原则',
                '不要重复自己 (DRY)',
                '保持简单 (KISS)'
            ],
            '设计模式': [
                '合理使用设计模式',
                '避免过度设计',
                '优先组合而非继承',
                '面向接口编程',
                '依赖注入'
            ]
        }
    
    @staticmethod
    def get_evaluation_checklist() -> Dict[str, List[str]]:
        """获取评估检查清单"""
        return {
            '功能性': [
                '是否满足所有功能需求',
                '接口设计是否合理',
                '数据流是否清晰',
                '业务逻辑是否正确'
            ],
            '质量属性': [
                '性能是否满足要求',
                '可扩展性是否足够',
                '安全性是否到位',
                '可维护性是否良好',
                '可测试性是否充分'
            ],
            '技术实现': [
                '技术选型是否合适',
                '架构是否可实现',
                '团队技能是否匹配',
                '成本是否可控'
            ],
            '风险管控': [
                '技术风险是否可控',
                '业务风险是否评估',
                '运营风险是否考虑',
                '应急预案是否完备'
            ]
        }

def main():
    """主函数"""
    print("🏗️ AI辅助软件架构设计与评估系统")
    print("=" * 50)
    
    # 运行演示
    demo_architecture_design_system()
    
    # 显示最佳实践
    practices = ArchitectureDesignBestPractices()
    principles = practices.get_design_principles()
    
    print("\n📋 架构设计原则:")
    print("-" * 30)
    
    for category, principle_list in principles.items():
        print(f"\n{category}:")
        for principle in principle_list[:3]:
            print(f"  ✓ {principle}")
    
    print("\n🎯 架构设计完成!")

if __name__ == "__main__":
    main()

作者简介:资深软件架构师,专注于企业级系统架构设计,拥有丰富的大型项目架构经验。

版权声明:本文为原创技术文章,转载请注明出处。

更新时间:2024年7月14日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CarlowZJ

我的文章对你有用的话,可以支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值