[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G2AXFD4093TQMKD1HPKF4R":3,"skill-same:01M6G2AXFD4093TQMKD1HPKF4R":54},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":28,"frontMatter":29,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":37,"ownerDescription":38,"updatedAt":39,"install":40,"resources":53},"01M6G2AXFD4093TQMKD1HPKF4R","java-coding-standards",null,"Spring Boot服务的Java编码标准：命名、不可变性、Optional用法、流、异常、泛型和项目布局。","oabdelmaksoud\u002FAgention","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D8A4TE76V3DCSH3D94VG1V",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fjava-coding-standards\u002FSKILL.md",[],[19,20,21,22,23,24],"coding standards","java","java coding standards","coding","standards","spring","2026-11-10 10:12:30",false,"---\nname: java-coding-standards\ndescription: \"Spring Boot服务的Java编码标准：命名、不可变性、Optional用法、流、异常、泛型和项目布局。\"\norigin: ECC\n---\n\n# Java 编码规范\n\n适用于 Spring Boot 服务中可读、可维护的 Java (17+) 代码的规范。\n\n## 何时激活\n\n* 在 Spring Boot 项目中编写或审查 Java 代码时\n* 强制执行命名、不可变性或异常处理约定时\n* 使用记录类、密封类或模式匹配（Java 17+）时\n* 审查 Optional、流或泛型的使用时\n* 构建包和项目布局时\n\n## 核心原则\n\n* 清晰优于巧妙\n* 默认不可变；最小化共享可变状态\n* 快速失败并提供有意义的异常\n* 一致的命名和包结构\n\n## 命名\n\n```java\n\u002F\u002F ✅ Classes\u002FRecords: PascalCase\npublic class MarketService {}\npublic record Money(BigDecimal amount, Currency currency) {}\n\n\u002F\u002F ✅ Methods\u002Ffields: camelCase\nprivate final MarketRepository marketRepository;\npublic Market findBySlug(String slug) {}\n\n\u002F\u002F ✅ Constants: UPPER_SNAKE_CASE\nprivate static final int MAX_PAGE_SIZE = 100;\n```\n\n## 不可变性\n\n```java\n\u002F\u002F ✅ Favor records and final fields\npublic record MarketDto(Long id, String name, MarketStatus status) {}\n\npublic class Market {\n  private final Long id;\n  private final String name;\n  \u002F\u002F getters only, no setters\n}\n```\n\n## Optional 使用\n\n```java\n\u002F\u002F ✅ Return Optional from find* methods\nOptional\u003CMarket> market = marketRepository.findBySlug(slug);\n\n\u002F\u002F ✅ Map\u002FflatMap instead of get()\nreturn market\n    .map(MarketResponse::from)\n    .orElseThrow(() -> new EntityNotFoundException(\"Market not found\"));\n```\n\n## Streams 最佳实践\n\n```java\n\u002F\u002F ✅ Use streams for transformations, keep pipelines short\nList\u003CString> names = markets.stream()\n    .map(Market::name)\n    .filter(Objects::nonNull)\n    .toList();\n\n\u002F\u002F ❌ Avoid complex nested streams; prefer loops for clarity\n```\n\n## 异常\n\n* 领域错误使用非受检异常；包装技术异常时提供上下文\n* 创建特定领域的异常（例如，`MarketNotFoundException`）\n* 避免宽泛的 `catch (Exception ex)`，除非在中心位置重新抛出\u002F记录\n\n```java\nthrow new MarketNotFoundException(slug);\n```\n\n## 泛型和类型安全\n\n* 避免原始类型；声明泛型参数\n* 对于可复用的工具类，优先使用有界泛型\n\n```java\npublic \u003CT extends Identifiable> Map\u003CLong, T> indexById(Collection\u003CT> items) { ... }\n```\n\n## 项目结构 (Maven\u002FGradle)\n\n```\nsrc\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fapp\u002F\n  config\u002F\n  controller\u002F\n  service\u002F\n  repository\u002F\n  domain\u002F\n  dto\u002F\n  util\u002F\nsrc\u002Fmain\u002Fresources\u002F\n  application.yml\nsrc\u002Ftest\u002Fjava\u002F... (mirrors main)\n```\n\n## 格式化和风格\n\n* 一致地使用 2 或 4 个空格（项目标准）\n* 每个文件一个公共顶级类型\n* 保持方法简短且专注；提取辅助方法\n* 成员顺序：常量、字段、构造函数、公共方法、受保护方法、私有方法\n\n## 需要避免的代码坏味道\n\n* 长参数列表 → 使用 DTO\u002F构建器\n* 深度嵌套 → 提前返回\n* 魔法数字 → 命名常量\n* 静态可变状态 → 优先使用依赖注入\n* 静默捕获块 → 记录日志并处理或重新抛出\n\n## 日志记录\n\n```java\nprivate static final Logger log = LoggerFactory.getLogger(MarketService.class);\nlog.info(\"fetch_market slug={}\", slug);\nlog.error(\"failed_fetch_market slug={}\", slug, ex);\n```\n\n## Null 处理\n\n* 仅在不可避免时接受 `@Nullable`；否则使用 `@NonNull`\n* 在输入上使用 Bean 验证（`@NotNull`, `@NotBlank`）\n\n## 测试期望\n\n* 使用 JUnit 5 + AssertJ 进行流畅的断言\n* 使用 Mockito 进行模拟；尽可能避免部分模拟\n* 倾向于确定性测试；没有隐藏的休眠\n\n**记住**：保持代码意图明确、类型安全且可观察。除非证明有必要，否则优先考虑可维护性而非微优化。\n","# Java 编码规范\n\n适用于 Spring Boot 服务中可读、可维护的 Java (17+) 代码的规范。\n\n## 何时激活\n\n* 在 Spring Boot 项目中编写或审查 Java 代码时\n* 强制执行命名、不可变性或异常处理约定时\n* 使用记录类、密封类或模式匹配（Java 17+）时\n* 审查 Optional、流或泛型的使用时\n* 构建包和项目布局时\n\n## 核心原则\n\n* 清晰优于巧妙\n* 默认不可变；最小化共享可变状态\n* 快速失败并提供有意义的异常\n* 一致的命名和包结构\n\n## 命名\n\n```java\n\u002F\u002F ✅ Classes\u002FRecords: PascalCase\npublic class MarketService {}\npublic record Money(BigDecimal amount, Currency currency) {}\n\n\u002F\u002F ✅ Methods\u002Ffields: camelCase\nprivate final MarketRepository marketRepository;\npublic Market findBySlug(String slug) {}\n\n\u002F\u002F ✅ Constants: UPPER_SNAKE_CASE\nprivate static final int MAX_PAGE_SIZE = 100;\n```\n\n## 不可变性\n\n```java\n\u002F\u002F ✅ Favor records and final fields\npublic record MarketDto(Long id, String name, MarketStatus status) {}\n\npublic class Market {\n  private final Long id;\n  private final String name;\n  \u002F\u002F getters only, no setters\n}\n```\n\n## Optional 使用\n\n```java\n\u002F\u002F ✅ Return Optional from find* methods\nOptional\u003CMarket> market = marketRepository.findBySlug(slug);\n\n\u002F\u002F ✅ Map\u002FflatMap instead of get()\nreturn market\n    .map(MarketResponse::from)\n    .orElseThrow(() -> new EntityNotFoundException(\"Market not found\"));\n```\n\n## Streams 最佳实践\n\n```java\n\u002F\u002F ✅ Use streams for transformations, keep pipelines short\nList\u003CString> names = markets.stream()\n    .map(Market::name)\n    .filter(Objects::nonNull)\n    .toList();\n\n\u002F\u002F ❌ Avoid complex nested streams; prefer loops for clarity\n```\n\n## 异常\n\n* 领域错误使用非受检异常；包装技术异常时提供上下文\n* 创建特定领域的异常（例如，`MarketNotFoundException`）\n* 避免宽泛的 `catch (Exception ex)`，除非在中心位置重新抛出\u002F记录\n\n```java\nthrow new MarketNotFoundException(slug);\n```\n\n## 泛型和类型安全\n\n* 避免原始类型；声明泛型参数\n* 对于可复用的工具类，优先使用有界泛型\n\n```java\npublic \u003CT extends Identifiable> Map\u003CLong, T> indexById(Collection\u003CT> items) { ... }\n```\n\n## 项目结构 (Maven\u002FGradle)\n\n```\nsrc\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fapp\u002F\n  config\u002F\n  controller\u002F\n  service\u002F\n  repository\u002F\n  domain\u002F\n  dto\u002F\n  util\u002F\nsrc\u002Fmain\u002Fresources\u002F\n  application.yml\nsrc\u002Ftest\u002Fjava\u002F... (mirrors main)\n```\n\n## 格式化和风格\n\n* 一致地使用 2 或 4 个空格（项目标准）\n* 每个文件一个公共顶级类型\n* 保持方法简短且专注；提取辅助方法\n* 成员顺序：常量、字段、构造函数、公共方法、受保护方法、私有方法\n\n## 需要避免的代码坏味道\n\n* 长参数列表 → 使用 DTO\u002F构建器\n* 深度嵌套 → 提前返回\n* 魔法数字 → 命名常量\n* 静态可变状态 → 优先使用依赖注入\n* 静默捕获块 → 记录日志并处理或重新抛出\n\n## 日志记录\n\n```java\nprivate static final Logger log = LoggerFactory.getLogger(MarketService.class);\nlog.info(\"fetch_market slug={}\", slug);\nlog.error(\"failed_fetch_market slug={}\", slug, ex);\n```\n\n## Null 处理\n\n* 仅在不可避免时接受 `@Nullable`；否则使用 `@NonNull`\n* 在输入上使用 Bean 验证（`@NotNull`, `@NotBlank`）\n\n## 测试期望\n\n* 使用 JUnit 5 + AssertJ 进行流畅的断言\n* 使用 Mockito 进行模拟；尽可能避免部分模拟\n* 倾向于确定性测试；没有隐藏的休眠\n\n**记住**：保持代码意图明确、类型安全且可观察。除非证明有必要，否则优先考虑可维护性而非微优化。\n",{"name":5,"origin":30,"description":7},"ECC","main","a318f48de3c5718e8ea2e9f6fae7790e8a759e85","upstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fjava-coding-standards",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:23:03",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add oabdelmaksoud\u002FAgention --skill java-coding-standards",{"tool":46,"command":47},"bunx","bunx skills add oabdelmaksoud\u002FAgention --skill java-coding-standards",{"tool":49,"command":50},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FAgention --skill java-coding-standards","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-CN\u002Fskills\u002Fjava-coding-standards\u002FSKILL.md",true,[],[55,79,93,126,152,172],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":66,"publishedAt":25},"01M6G2QFCBNBYAJF2KTK85G9A6","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[61],{"categoryNo":62,"categoryName":63,"taxonomyType":64,"taxonomyTypeDesc":65},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[67,68,69,70,71,72,73,74,75,76,77,78],"translate","doc","visa doc translate","bilingual","with","english","application","PDF","translation","documents","create","images",{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":25},"01M6G2QB09TSK6BY4ME5X20EVQ","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[86,87,88,89,90,91,92],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":110,"publishedAt":25},"01M6G2Q6V2F7G03VAAF27FXPJR","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[99,102,105],{"categoryNo":100,"categoryName":101,"taxonomyType":64,"taxonomyTypeDesc":65},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":103,"categoryName":104,"taxonomyType":64,"taxonomyTypeDesc":65},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[111,112,113,114,115,116,117,118,119,90,120,121,122,123,71,124,125],"workflow","tdd","tdd workflow","use","unit","coverage","refactoring","e2e","integration","development","e2e tests","tests","driven","test","writing",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":25},"01M6G2Q359YJRWAR2PFCEQAXF3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,71],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":159,"publishedAt":25},"01M6G2PY8B2FWZTWPZ84H83Y7C","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[158],{"categoryNo":100,"categoryName":101,"taxonomyType":64,"taxonomyTypeDesc":65},[160,161,162,163,90,164,165,166,167,92,168,169,170,171],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection","mock",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":25},"01M6G2PSCN2GXV9FFZDRRRWVB6","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FAgention\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[179,180,181,162,182,31,183],"concurrency","swift concurrency","swift concurrency 6 2","default","types"]