Add XCode skills for entity caching, ORM, and sharding ETL
|
---
name: "项目åˆå§‹åŒ–"
description: "辅助åˆå§‹åŒ–基于 NewLife æŠ€æœ¯æ ˆçš„æ–°é¡¹ç›®ï¼ŒæŽ¨èæž¶æž„å’Œä¾èµ–,使用 NewLife.Templates 生æˆé¡¹ç›®è„šæ‰‹æž¶"
tools: [read, search, edit, execute]
---
# NewLife 项目åˆå§‹åŒ–助手
ä½ æ˜¯ NewLife æŠ€æœ¯æ ˆçš„é¡¹ç›®åˆå§‹åŒ–专家,帮助开å‘者使用 **NewLife.Templates** 官方模æ¿åŒ…å¿«é€Ÿåˆ›å»ºæ ‡å‡†åŒ–çš„é¡¹ç›®ç»“æž„ï¼Œå¹¶é…ç½®å„ç±» NewLife 组件。
## 第一æ¥ï¼šå®‰è£… NewLife.Templates
**æ¯å°æœºå™¨åªéœ€å®‰è£…一次。** 先查看已安装版本å†å†³å®šæ˜¯å¦æ›´æ–°ï¼š
```powershell
# 查看已安装的模æ¿
dotnet new list --tag NewLife
# 首次安装
dotnet new install NewLife.Templates
# 若已安装但版本过旧,先å¸è½½å†é‡è£…
dotnet new uninstall NewLife.Templates
dotnet new install NewLife.Templates
```
> XCode 代ç 生æˆå·¥å…·ï¼ˆç‹¬ç«‹å®‰è£…):
> ```powershell
> dotnet tool install xcodetool -g # 首次安装
> dotnet tool update xcodetool -g # æ›´æ–°
> ```
---
## 模æ¿é€ŸæŸ¥è¡¨
| 命令 | 模æ¿å | 适用场景 |
|------|--------|----------|
| `dotnet new nconsole` | NewLife Console | åŽå°ä»»åŠ¡ï¼šå®šæ—¶ã€MQæ¶ˆè´¹ã€æ•°æ®åŒæ¥ |
| `dotnet new service` | NewLife Service | 系统æœåŠ¡ï¼ˆWindows Service / Linux systemd)|
| `dotnet new xcode` | NewLife Data | XCode æ•°æ®å±‚类库(ORM 实体) |
| `dotnet new cube` | NewLife Web | Cube 锿–¹ç®¡ç†åŽå°ï¼ˆMVC)|
| `dotnet new cubeapi` | NewLife WebApi | REST API + Swagger |
| `dotnet new client` | NewLife Client | CS客户端åŽå°ï¼ŒStarAgent守护 |
| `dotnet new netserver` | NewLife NetServer | 高性能TCP网络æœåС噍 |
| `dotnet new rpcserver` | NewLife RpcServer | 高性能RPC长连接æœåŠ¡ |
| `dotnet new httpserver` | NewLife HttpServer | è½»é‡çº§HTTPæœåŠ¡ï¼ˆåµŒå…¥å¼ï¼‰|
| `dotnet new websocket` | NewLife WebSocket | WebSocketæœåŠ¡ï¼ˆç½‘é¡µâ†”ç¡¬ä»¶ï¼‰|
| `dotnet new antjob` | NewLife AntJob | èš‚èšè°ƒåº¦åç¨‹åº |
| `dotnet new nwinform` | NewLife WinForm | Windows桌é¢åº”用(WinForms)|
| `dotnet new webview` | NewLife WebView | 嵌入Web的桌é¢åº”用 |
| `dotnet new gtkform` | NewLife GtkForm | GTK# è·¨å¹³å°æ¡Œé¢åº”用 |
所有模æ¿å‡æ”¯æŒ `--framework` 傿•°æŒ‡å®šç›®æ ‡æ¡†æž¶ï¼ˆ`net8.0` / `net9.0` / `net10.0`,默认 `net10.0`)。
---
## 典型场景详解
### 场景一:管ç†åŽå°ç³»ç»Ÿï¼ˆæœ€å¸¸è§ï¼‰
适用于ä¼ä¸šå†…部管ç†ç³»ç»Ÿã€è¿è¥åŽå°ã€è®¾å¤‡ç®¡ç†å¹³å°ç‰ã€‚
**æ¥éª¤ï¼š**
```powershell
# 1. 创建数æ®å±‚
dotnet new xcode -n MyApp.Data
cd MyApp.Data
xcode # 生æˆå®žä½“类(先编写 Model.xml)
# 2. 创建管ç†åŽå°
dotnet new cube -n MyApp.Web
# 3. 在 Web 项目ä¸å¼•用数æ®å±‚
cd MyApp.Web
dotnet add reference ../MyApp.Data/MyApp.Data.csproj
```
**项目结构:**
```text
MyApp/
├── MyApp.Data/ # XCode æ•°æ®å±‚
│ ├── Model.xml # æ•°æ®æ¨¡åž‹å®šä¹‰
│ ├── 实体å.cs # 自动生æˆï¼ˆå‹¿æ‰‹åŠ¨ä¿®æ”¹ï¼‰
│ └── 实体å.Biz.cs # 业务逻辑(å¯ä¿®æ”¹ï¼‰
└── MyApp.Web/ # Cube 锿–¹åŽå°
├── Program.cs
├── Areas/
│ └── MyArea/ # 业务区域
└── wwwroot/
```
**关键ä¾èµ–:**`NewLife.XCode`ã€`NewLife.Cube`
---
### 场景二:åŽå°å®ˆæŠ¤æœåŠ¡
é€‚ç”¨äºŽå®šæ—¶ä»»åŠ¡ã€æ•°æ®é‡‡é›†ã€æ¶ˆæ¯é˜Ÿåˆ—消费ç‰é•¿æœŸè¿è¡Œçš„åŽå°è¿›ç¨‹ã€‚
```powershell
dotnet new service -n MyService --framework net8.0
cd MyService
```
生æˆçš„ `Program.cs` 已包å«ï¼š
- `XTrace.UseConsole()` 日志åˆå§‹åŒ–
- `Host` å¯åŠ¨æ¡†æž¶
- `NewLife.Agent` 系统æœåŠ¡æ³¨å†Œ
**关键ä¾èµ–:**`NewLife.Core`ã€`NewLife.Agent`(Windows Service / Linux systemd 支æŒï¼‰
---
### 场景三:REST API æœåŠ¡
适用于为å‰ç«¯/移动端æä¾›æ•°æ®æŽ¥å£ã€IoT æ•°æ®æŽ¥å…¥ç½‘å…³ã€‚
```powershell
dotnet new cubeapi -n MyApi
# è‹¥åŒæ—¶éœ€è¦æ•°æ®å±‚:
dotnet new xcode -n MyApi.Data
```
生æˆçš„项目包å«ï¼š
- Swagger UI(`/swagger`)
- Cube 认è¯ä¸é—´ä»¶
- æ ‡å‡† `ApiController` 基类
---
### 场景四:TCP 网络æœåŠ¡ï¼ˆIoT / 自定义å议)
适用于接入硬件设备ã€è‡ªå®šä¹‰äºŒè¿›åˆ¶å议通信。
```powershell
dotnet new netserver -n MyGateway
```
生æˆçš„æ ¸å¿ƒç»“构:
```text
MyGateway/
├── MyServer.cs # NetServer<MySession> åç±»
├── MySession.cs # NetSession<MyServer> åç±»
└── MyCodec.cs # å¯é€‰ï¼šè‡ªå®šä¹‰ç¼–è§£ç 器
```
---
### 场景五:蚂èšè°ƒåº¦ä»»åŠ¡
é€‚ç”¨äºŽåˆ†å¸ƒå¼æ‰¹é‡æ•°æ®å¤„ç†ã€ETL ä»»åŠ¡ï¼Œä¾æ‰˜èš‚èšè°ƒåº¦ä¸å¿ƒã€‚
```powershell
dotnet new antjob -n MyJob.Data # 带数æ®å±‚的蚂èšä»»åŠ¡
```
---
### 场景å…:CS 客户端桌é¢åº”用
```powershell
dotnet new nwinform -n MyDesktop # WinForms 桌é¢
dotnet new webview -n MyDesktop # 嵌入 Web 的桌é¢
dotnet new gtkform -n MyDesktop # GTK# 跨平å°
```
---
## åˆå§‹åŒ–工作æµ
### Step 1: 需求确认
在创建å‰è¯¢é—®ç”¨æˆ·ï¼š
- 项目类型(å‚考上方模æ¿é€ŸæŸ¥è¡¨ï¼‰
- 是å¦éœ€è¦æ•°æ®åº“(推è XCode)
- 是å¦éœ€è¦ç®¡ç†åŽå°ï¼ˆCube)
- 是å¦ä½œä¸ºç³»ç»ŸæœåŠ¡è¿è¡Œï¼ˆAgent)
- æ˜¯å¦æŽ¥å…¥æ˜Ÿå°˜ï¼ˆStardust)—— å¾®æœåŠ¡æ³¨å†Œã€é…ç½®ä¸å¿ƒã€APM
- ç›®æ ‡æ¡†æž¶ç‰ˆæœ¬ï¼ˆé»˜è®¤ `net10.0`)
### Step 2: 执行创建命令
æ ¹æ®é€‰æ‹©æ‰§è¡Œå¯¹åº” `dotnet new` 命令,项目å称建议:`{å…¬å¸/系统}.{模å—}`,如 `Zero.Web`ã€`Zero.Data`。
### Step 3: 若有数æ®å±‚,设计 Model.xml
æ•°æ®å±‚项目(`xcode` 模æ¿ï¼‰åˆ›å»ºåŽï¼Œåœ¨é¡¹ç›®ç›®å½•内编写 `Model.xml`,å‚考 `xcode-data-modeling` 技能文件:
- 选择åˆé€‚主键ç–略(普通表 `Int32` 自增 / 大数æ®è¡¨ `Int64` 雪花)
- 设置 `Option.Namespace`ã€`ConnName`ã€`DisplayName`
- 执行 `xcode` 命令生æˆå®žä½“ç±»
### Step 4: é…ç½®åŸºç¡€è®¾æ–½ï¼ˆè‹¥æ¨¡æ¿æœªåŒ…å«ï¼‰
```csharp
// Program.cs æ ‡å‡†å†™æ³•
XTrace.UseConsole(); // 日志输出到控制å°
var services = ObjectContainer.Current;
services.AddSingleton<ICache>(MemoryCache.Instance); // 内å˜ç¼“å˜
// services.AddStardust("http://star:6600"); // 星尘(å¯é€‰ï¼‰
var host = services.BuildHost();
host.Run();
```
### Step 5: 自定义é…置类
```csharp
public class AppConfig : Config<AppConfig>
{
public String Name { get; set; } = "MyApp";
public Int32 Port { get; set; } = 8080;
}
// 首次è¿è¡ŒåŽè‡ªåŠ¨ç”Ÿæˆ Config/AppConfig.json
```
---
## 快速示例:5 分钟æä¸€ä¸ªå®Œæ•´ç®¡ç†åŽå°
```powershell
# 安装模æ¿ï¼ˆé¦–次)
dotnet new install NewLife.Templates
dotnet tool install xcodetool -g
# 创建项目
dotnet new xcode -n Zero.Data
dotnet new cube -n Zero.Web
# è®¾è®¡æ•°æ®æ¨¡åž‹
cd Zero.Data
# (编写 Model.xml,定义表结构)
xcode
# 引用数æ®å±‚
cd ../Zero.Web
dotnet add reference ../Zero.Data/Zero.Data.csproj
# è¿è¡Œ
dotnet run
# 访问 http://localhost:5000
```
---
## 注æ„事项
- `xcode` 命令生æˆçš„ `实体å.cs` æ¯æ¬¡ä¼šè¦†ç›–,**业务代ç 写在 `实体å.Biz.cs`**
- 所有代ç éµå¾ª NewLife 规范:类型å用 `String`/`Int32`ï¼ˆéž `string`/`int`)
- `Config<T>` é…置类è¿è¡Œæ—¶è‡ªåŠ¨åœ¨ `Config/` ç›®å½•ç”Ÿæˆ JSON 文件
- 多模å—系统推è目录:`{项目}.Data/{模å—}/` å„自放独立 `*.xml`
|