增加初始化类文件
xiyunfei authored at 2026-02-27 00:31:51
13.18 KiB
NewLife.WeChat
# NewLife.WeChat 项目创建指南(Claude AI) 本文档用于指导 AI 助手(如 Claude)创建标准的 NewLife 系列工具类库项目。 ## 项目概述 **项目名称**: NewLife.WeChat **项目类型**: .NET 类库 **目标框架**: .NET 10 **主要功能**: 微信开发工具类库,提供公众号、小程序等功能支持 **依赖框架**: NewLife.Core、NewLife.XCode ## 技术栈要求 ### 核心依赖 ```xml <PackageReference Include="NewLife.Core" Version="*" /> <PackageReference Include="NewLife.XCode" Version="*" /> ``` ### 开发环境 - .NET SDK 10.0+ - C# 14.0 - Visual Studio 2024 或 VS Code - 支持 ImplicitUsings 和 Nullable ## 项目结构设计 ``` NewLife.WeChat/ ├── Entities/ # XCode 实体模型层 │ ├── Model.xml # XCode 模型定义文件 │ ├── 微信配置.cs # 实体定义(自动生成) │ └── 微信配置.Biz.cs # 业务逻辑扩展(手动编写) │ ├── Services/ # 服务层 │ ├── WeChatService.cs # 微信核心服务 │ └── ApiClient.cs # API 客户端(可选) │ ├── Models/ # 数据模型层 │ ├── WeChatModels.cs # 基础模型 │ ├── Messages.cs # 消息模型 │ ├── Request/ # 请求模型(可选) │ └── Response/ # 响应模型(可选) │ ├── Utils/ # 工具类 │ ├── SignHelper.cs # 签名辅助类 │ └── CryptoHelper.cs # 加密辅助类 │ ├── docs/ # 文档 │ ├── Architecture.md # 架构设计文档 │ └── QuickStart.md # 快速开始指南 │ ├── GlobalUsings.cs # 全局 using 声明 ├── WeChatManager.cs # 管理器类(可选) ├── README.md # 项目说明 └── NewLife.WeChat.csproj # 项目文件 ``` ## 代码规范 ### 命名约定 1. **实体类**: 使用中文命名(符合 XCode 规范) - 示例: `微信配置`, `微信用户`, `微信消息` 2. **服务类**: 使用英文 + Service 后缀 - 示例: `WeChatService`, `TokenService`, `MessageService` 3. **工具类**: 使用英文 + Helper 后缀 - 示例: `SignHelper`, `CryptoHelper`, `XmlHelper` 4. **模型类**: 使用英文描述性名称 - 示例: `AccessTokenResponse`, `WeChatMessage`, `TextMessage` ### 文件头注释 ```csharp /// <summary>类功能描述</summary> public class ClassName { // 实现代码 } ``` ### 属性注释 ```csharp /// <summary>属性描述</summary> [DisplayName("属性显示名")] [Description("详细描述")] public String PropertyName { get; set; } ``` ## XCode 实体模型设计 ### Model.xml 结构 ```xml <?xml version="1.0" encoding="utf-8"?> <Tables Version="11.0.2024.1101" Output="Entities" NameSpace="项目命名空间.Entities" ConnName="连接名" BaseClass="Entity"> <Table Name="表名" Description="表描述" DbType="SqlServer"> <Columns> <Column Name="Id" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" /> <!-- 更多字段 --> </Columns> <Indexes> <Index Columns="字段名" Unique="True" /> </Indexes> </Table> </Tables> ``` ### 实体类要求 1. **基础属性** - Id: 主键,Int32,自增 - CreateTime: 创建时间 - UpdateTime: 更新时间 - Remark: 备注 2. **索引设计** - 唯一索引:业务主键(如 AppId) - 普通索引:查询频繁的字段(如 IsEnabled) 3. **业务扩展** (*.Biz.cs) ```csharp public partial class 实体名 : Entity<实体名> { #region 对象操作 static 实体名() { // 过滤器 Meta.Modules.Add<TimeModule>(); Meta.Modules.Add<IPModule>(); // 单对象缓存 var sc = Meta.SingleCache; sc.FindSlaveKeyMethod = k => Find(_.唯一字段 == k); sc.GetSlaveKeyMethod = e => e.唯一字段; } public override void Valid(Boolean isNew) { base.Valid(isNew); // 数据验证逻辑 } #endregion #region 扩展查询 public static 实体名 FindByXxx(参数类型 参数) { } #endregion #region 业务操作 // 业务方法 #endregion } ``` ## 服务层设计 ### WeChatService 模板 ```csharp public class WeChatService { private readonly 配置实体 _config; private readonly HttpClient _httpClient; private static readonly ILog _log = XTrace.Log; public const String ApiBaseUrl = "https://api.weixin.qq.com"; public WeChatService(配置实体 config) { } public WeChatService(String appId) { } // AccessToken 管理 public async Task<String> GetAccessTokenAsync(Boolean forceRefresh = false) { } public async Task<String> RefreshAccessTokenAsync() { } // 通用请求 public async Task<T> GetAsync<T>(String url, Boolean includeToken = true) { } public async Task<T> PostAsync<T>(String url, Object data, Boolean includeToken = true) { } } ``` ### 服务层原则 1. **依赖注入**: 支持构造函数注入配置 2. **异步优先**: 所有 I/O 操作使用 async/await 3. **异常处理**: 使用 try-catch 并记录日志 4. **缓存管理**: 使用 NewLife.Caching 5. **日志记录**: 使用 XTrace.Log ## 工具类设计 ### SignHelper 要求 ```csharp public static class SignHelper { /// <summary>SHA1签名</summary> public static String SHA1(String data) { } /// <summary>签名验证</summary> public static Boolean Verify(参数...) { } /// <summary>生成随机字符串</summary> public static String GenerateNonceStr(Int32 length = 16) { } /// <summary>生成时间戳</summary> public static String GenerateTimeStamp() { } } ``` ### CryptoHelper 要求 ```csharp public static class CryptoHelper { /// <summary>MD5加密</summary> public static String MD5(String data) { } /// <summary>AES加密</summary> public static String AESEncrypt(String data, String key, String iv = null) { } /// <summary>AES解密</summary> public static String AESDecrypt(String data, String key, String iv = null) { } /// <summary>Base64编码</summary> public static String Base64Encode(String data) { } /// <summary>Base64解码</summary> public static String Base64Decode(String data) { } } ``` ## 模型层设计 ### 基础模型 ```csharp /// <summary>API响应基类</summary> public class WeChatResponse { public Int32 ErrCode { get; set; } public String ErrMsg { get; set; } public Boolean IsSuccess => ErrCode == 0; } /// <summary>具体响应</summary> public class XxxResponse : WeChatResponse { // 业务字段 } ``` ### 枚举定义 ```csharp /// <summary>枚举描述</summary> public enum EnumName { /// <summary>选项1</summary> Option1 = 1, /// <summary>选项2</summary> Option2 = 2 } ``` ## 文档要求 ### README.md 必须包含 1. **项目简介**: 一句话描述 2. **功能特性**: 列表形式 3. **快速开始**: 安装、配置、使用示例 4. **项目结构**: 目录树 5. **数据库支持**: 列表说明 6. **依赖项**: 链接到相关项目 7. **开发计划**: 带复选框的任务列表 8. **联系方式**: 官网、QQ群、源码地址 ### Architecture.md 必须包含 1. **项目概述** 2. **技术栈** 3. **整体架构**: 目录结构 4. **核心模块**: 详细说明每个模块 5. **数据流程**: 流程图或文字描述 6. **配置管理** 7. **扩展性设计** 8. **功能模块**: 分阶段开发计划 9. **数据库设计** 10. **性能优化** 11. **安全性** ### QuickStart.md 必须包含 1. **配置数据库连接**: 多种数据库示例 2. **初始化数据表** 3. **创建配置** 4. **使用服务**: 完整代码示例 5. **完整示例**: ASP.NET Core 示例 6. **常见问题**: FAQ ## 项目文件配置 ### .csproj 标准结构 ```xml <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net10.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <LangVersion>latest</LangVersion> <OutputType>Library</OutputType> <AssemblyTitle>项目标题</AssemblyTitle> <Description>项目描述</Description> <Company>NewLife</Company> <Copyright>Copyright © NewLife 2024</Copyright> </PropertyGroup> <ItemGroup> <PackageReference Include="NewLife.Core" Version="*" /> <PackageReference Include="NewLife.XCode" Version="*" /> </ItemGroup> </Project> ``` ### GlobalUsings.cs ```csharp // 全局 Using 声明 global using System; global using NewLife; ``` ## 缓存策略 ### AccessToken 缓存 ```csharp public void SetAccessToken(String token, Int32 expireSeconds = 7200) { var cache = NewLife.Caching.Cache.Default; var key = GetAccessTokenCacheKey(); // 提前5分钟过期 cache.Set(key, token, expireSeconds - 300); } public String GetAccessToken() { var cache = NewLife.Caching.Cache.Default; var key = GetAccessTokenCacheKey(); return cache.Get<String>(key); } ``` ### 实体缓存 ```csharp // 单对象缓存 var config = 实体类.FindById(id); // 自动使用缓存 // 批量查询缓存 var list = 实体类.FindAllEnabled(); // 根据需要缓存 ``` ## 日志记录 ### 使用 XTrace ```csharp private static readonly ILog _log = XTrace.Log; // 信息日志 _log.Info("操作成功: {0}", message); // 警告日志 _log.Warn("警告信息: {0}", warning); // 错误日志 _log.Error("错误: {0}", ex.Message); // 调试日志 _log.Debug("调试信息: {0}", debug); ``` ## 异常处理 ### 标准异常处理 ```csharp public async Task<T> MethodAsync() { try { // 业务逻辑 return result; } catch (Exception ex) { _log.Error($"操作失败: {ex.Message}"); throw; // 或返回默认值 } } ``` ## 单元测试建议 ### 测试项目结构 ``` NewLife.WeChat.Tests/ ├── Entities/ │ └── 微信配置Tests.cs ├── Services/ │ └── WeChatServiceTests.cs └── Utils/ ├── SignHelperTests.cs └── CryptoHelperTests.cs ``` ### 测试用例示例 ```csharp [TestClass] public class WeChatServiceTests { [TestMethod] public async Task GetAccessTokenAsync_Success() { // Arrange var service = new WeChatService("test_appid"); // Act var token = await service.GetAccessTokenAsync(); // Assert Assert.IsNotNull(token); } } ``` ## 部署说明 ### NuGet 打包 ```xml <PropertyGroup> <PackageId>NewLife.WeChat</PackageId> <Version>1.0.0</Version> <Authors>NewLife</Authors> <PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageProjectUrl>https://git.newlifex.com/NewLife/NewLife.WeChat</PackageProjectUrl> <RepositoryUrl>https://git.newlifex.com/NewLife/NewLife.WeChat</RepositoryUrl> <PackageTags>wechat;微信;newlife</PackageTags> </PropertyGroup> ``` ### 发布命令 ```bash dotnet pack -c Release dotnet nuget push bin/Release/NewLife.WeChat.*.nupkg -s https://nuget.newlifex.com/v3/index.json ``` ## 版本管理 ### 语义化版本 - **主版本号**: 不兼容的 API 修改 - **次版本号**: 向下兼容的功能性新增 - **修订号**: 向下兼容的问题修正 示例: `1.2.3` - 1: 主版本 - 2: 次版本 - 3: 修订版本 ## Git 提交规范 ### Commit Message 格式 ``` <type>(<scope>): <subject> <body> <footer> ``` ### Type 类型 - `feat`: 新功能 - `fix`: 修复 bug - `docs`: 文档更新 - `style`: 代码格式 - `refactor`: 重构 - `test`: 测试 - `chore`: 构建/工具 ### 示例 ``` feat(entities): 添加微信配置实体模型 - 创建微信配置表结构 - 实现业务逻辑扩展 - 添加缓存支持 Closes #1 ``` ## AI 创建项目的步骤 ### 第1步: 创建项目文件 ``` NewLife.WeChat.csproj GlobalUsings.cs ``` ### 第2步: 创建实体模型 ``` Entities/Model.xml Entities/微信配置.cs Entities/微信配置.Biz.cs ``` ### 第3步: 创建服务层 ``` Services/WeChatService.cs ``` ### 第4步: 创建工具类 ``` Utils/SignHelper.cs Utils/CryptoHelper.cs ``` ### 第5步: 创建模型 ``` Models/WeChatModels.cs Models/Messages.cs ``` ### 第6步: 创建管理器 ``` WeChatManager.cs ``` ### 第7步: 创建文档 ``` README.md docs/Architecture.md docs/QuickStart.md ``` ### 第8步: 验证编译 ```bash dotnet restore dotnet build ``` ## 质量检查清单 - [ ] 所有类和方法都有 XML 注释 - [ ] 实体模型有对应的 Model.xml - [ ] 服务层支持异步操作 - [ ] 工具类都是静态类 - [ ] 异常有适当的处理和日志 - [ ] 缓存策略已实现 - [ ] README.md 完整 - [ ] Architecture.md 详细 - [ ] QuickStart.md 有示例 - [ ] 项目可以成功编译 ## 参考资源 - NewLife.Core: https://github.com/NewLifeX/X - XCode 教程: https://newlifex.com/xcode - 微信开发文档: https://developers.weixin.qq.com/doc/ --- **文档版本**: 1.0 **更新时间**: 2024-01 **维护者**: NewLife 开发团队