A:增加缺失文件
This commit is contained in:
1 parent
b2a9e94bad
commit
b15e57d150
1 file changed
+312
@@ -0,0 +1,312 @@
|
||||
# Sharp.Demo - Sharp Framework 综合演示应用
|
||||
|
||||
> Sharp Framework 的最佳实践示例和功能演示平台
|
||||
|
||||
[](https://dotnet.microsoft.com/)
|
||||
[](https://www.gnu.org/licenses/agpl-3.0)
|
||||
[](https://github.com/dotnet/wpf)
|
||||
|
||||
## 项目简介
|
||||
|
||||
Sharp.Demo 是 Sharp Framework 的官方综合演示应用,展示了框架中所有模块的最佳使用方式。它替代了原有的 Client 和 Server 模块,提供了统一的、交互式的功能演示平台。
|
||||
|
||||
**设计理念**:通过实际可运行的示例,让开发者快速理解和掌握 Sharp Framework 的各项功能。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 🎯 核心功能
|
||||
|
||||
- **模块化启动器** - 卡片式展示所有功能模块,支持独立窗口运行
|
||||
- **开发者工具集** - 集成 F10(性能监控)、F11(日志查看)、F12(开发工具)
|
||||
- **最佳实践演示** - 所有代码采用 Quick Start API、标准 DI、Result<T> 模式
|
||||
- **交互式验证** - 17+ 功能点支持实时测试和验证
|
||||
- **应用状态管理** - 完整的 IApplicationState 演示
|
||||
|
||||
### 📦 演示模块(9 大类)
|
||||
|
||||
#### 🌐 网络通信
|
||||
- **HTTP 服务器** - 轻量级 HTTP 服务器,支持中间件和路由
|
||||
- **HTTP 客户端** - 集成 Polly 重试策略的 HTTP 客户端
|
||||
|
||||
#### 💾 数据管理
|
||||
- **数据库管理** - EF Core + Repository 模式,支持 SQLite
|
||||
|
||||
#### 🏭 工业控制
|
||||
- **PLC 调试** - 西门子 PLC 通信调试工具(S7-1200/1500)
|
||||
- **串口调试** - RS232/RS485 串口通信工具
|
||||
|
||||
#### ⚙️ 进程管理
|
||||
- **Process 执行** - 外部进程执行和管理
|
||||
- **Python 集成** - Python 脚本执行和集成
|
||||
|
||||
#### 🔨 基础设施
|
||||
- **日志管理** - Serilog 结构化日志系统
|
||||
- **配置管理** - 多格式配置文件管理(JSON/XML/INI/TOML)
|
||||
- **WPF 服务** - 对话框、文件选择、MVVM 基础服务
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前置要求
|
||||
|
||||
- .NET 8.0 SDK 或更高版本
|
||||
- Windows 10/11(WPF 应用)
|
||||
- Visual Studio 2022 或 Rider(推荐)
|
||||
|
||||
### 运行应用
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone https://github.com/your-org/sharp-basic.git
|
||||
cd sharp-basic/src/Sharp
|
||||
|
||||
# 构建解决方案
|
||||
dotnet build Sharp.sln
|
||||
|
||||
# 运行 Demo
|
||||
dotnet run --project Sharp.Demo/Sharp.Demo.csproj
|
||||
```
|
||||
|
||||
### 配置说明
|
||||
|
||||
应用使用 `appsettings.json` 进行配置:
|
||||
|
||||
```json
|
||||
{
|
||||
"System": {
|
||||
"AppName": "Sharp Framework Demo",
|
||||
"Version": "1.0.0"
|
||||
},
|
||||
"SharpLog": {
|
||||
"UseSerilog": true,
|
||||
"MinLevel": "Information"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
详细配置模板请参考:`appsettings.template.json`
|
||||
|
||||
## 使用指南
|
||||
|
||||
### 启动界面
|
||||
|
||||
应用启动后会显示模块化的启动器界面,包含:
|
||||
|
||||
- **模块卡片** - 按类别分组展示所有功能模块
|
||||
- **状态栏** - 显示服务器状态、运行时间、打开窗口数
|
||||
- **快捷键** - F10/F11/F12 快速访问开发者工具
|
||||
|
||||
### 开发者工具
|
||||
|
||||
| 快捷键 | 功能 | 说明 |
|
||||
|--------|------|------|
|
||||
| F12 | 开发者工具 | 可视化树、属性查看器、实时日志 |
|
||||
| F11 | 日志查看器 | 支持 JSON 日志、分页加载、搜索过滤 |
|
||||
| F10 | 性能监控 | CPU/内存使用率、GC 统计、线程监控 |
|
||||
|
||||
### 功能演示
|
||||
|
||||
#### 1. HTTP 服务器演示
|
||||
```csharp
|
||||
// 演示 Result<T> 模式
|
||||
Result.Try(() => _serverService.Start())
|
||||
.OnSuccess(() => AppendLog("✅ 服务器启动成功"))
|
||||
.OnFailure((ex, msg) => AppendLog($"❌ 启动失败: {msg}"));
|
||||
```
|
||||
|
||||
#### 2. WPF 服务演示
|
||||
- 4 种对话框类型(Info/Warning/Error/Confirm)
|
||||
- 4 种文件对话框(打开/保存/选择文件夹/多选)
|
||||
- UI 线程调度演示
|
||||
- MVVM 基础功能演示
|
||||
|
||||
#### 3. 数据库演示
|
||||
- CRUD 操作演示
|
||||
- Repository 模式使用
|
||||
- 软删除和审计字段
|
||||
- 数据库迁移
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
Sharp.Demo/
|
||||
├── App.xaml.cs # 应用入口(Quick Start 示例)
|
||||
├── Models/ # 数据模型
|
||||
│ └── ModuleInfo.cs # 模块信息模型
|
||||
├── Services/ # 业务服务
|
||||
│ ├── WindowManager.cs # 窗口管理器
|
||||
│ ├── ServerService.cs # HTTP 服务管理
|
||||
│ ├── IApplicationState.cs # 应用状态接口
|
||||
│ └── ApplicationState.cs # 应用状态实现
|
||||
├── ViewModels/ # 视图模型
|
||||
│ ├── LauncherViewModel.cs # 启动器 VM
|
||||
│ ├── MainViewModel.cs # 主窗口 VM
|
||||
│ └── Pages/ # 页面 VM
|
||||
│ ├── HttpServerViewModel.cs
|
||||
│ ├── DatabaseViewModel.cs
|
||||
│ └── ... (其他模块)
|
||||
├── Views/ # 视图
|
||||
│ ├── LauncherWindow.xaml # 启动器窗口
|
||||
│ └── Windows/ # 功能窗口
|
||||
│ ├── HttpServerWindow.xaml
|
||||
│ ├── DatabaseWindow.xaml
|
||||
│ └── ... (其他窗口)
|
||||
└── appsettings.json # 配置文件
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
### 核心框架
|
||||
- **.NET 8.0** - 最新的 .NET 框架
|
||||
- **WPF** - Windows Presentation Foundation
|
||||
- **HandyControl 3.5** - 现代化 UI 控件库
|
||||
|
||||
### Sharp 模块
|
||||
- **Sharp.Common** - 核心工具(Result<T>、Global 容器)
|
||||
- **Sharp.Config** - 配置管理(多格式、热重载)
|
||||
- **Sharp.Log** - 日志系统(Serilog)
|
||||
- **Sharp.Data** - 数据访问(EF Core + Repository)
|
||||
- **Sharp.Wpf** - WPF 服务(对话框、MVVM)
|
||||
- **Sharp.Wpf.HandyControl** - HandyControl 集成
|
||||
- **Sharp.Wpf.DevTools** - 开发者工具
|
||||
- **Sharp.NetClient** - HTTP 客户端(Polly)
|
||||
- **Sharp.NetServer** - HTTP 服务器
|
||||
- **Sharp.Plc.Siemens** - 西门子 PLC(S7.NET+)
|
||||
- **Sharp.Ports** - 串口通信
|
||||
- **Sharp.Process** - 进程管理
|
||||
- **Sharp.Python** - Python 集成
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 1. Quick Start API
|
||||
```csharp
|
||||
var services = new ServiceCollection();
|
||||
var config = ConfigBuilderExtensions.CreateDefault().Configuration;
|
||||
|
||||
services.AddSharpEssentials(config); // 配置 + 日志 + 缓存
|
||||
services.AddSharpWpf(); // WPF 服务
|
||||
services.AddSharpHandyControl(); // HandyControl UI
|
||||
services.AddSharpDevTools(); // 开发者工具
|
||||
```
|
||||
|
||||
### 2. 标准依赖注入
|
||||
```csharp
|
||||
// ❌ 避免使用 Global 容器
|
||||
var service = Global.Get<IService>();
|
||||
|
||||
// ✅ 推荐使用构造函数注入
|
||||
public MyViewModel(IService service) {
|
||||
_service = service;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Result<T> 模式
|
||||
```csharp
|
||||
// Railway-Oriented Programming
|
||||
Result.Try(() => riskyOperation())
|
||||
.Map(result => transform(result))
|
||||
.OnSuccess(value => handleSuccess(value))
|
||||
.OnFailure((ex, msg) => handleError(msg));
|
||||
```
|
||||
|
||||
### 4. 应用状态管理
|
||||
```csharp
|
||||
// 使用 IApplicationState 共享状态
|
||||
public MyViewModel(IApplicationState appState) {
|
||||
_appState = appState;
|
||||
_appState.StateChanged += OnStateChanged;
|
||||
}
|
||||
```
|
||||
|
||||
## 开发指南
|
||||
|
||||
### 添加新模块演示
|
||||
|
||||
1. 在 `ViewModels/Pages/` 创建 ViewModel
|
||||
2. 在 `Views/Windows/` 创建 Window
|
||||
3. 在 `App.xaml.cs` 注册服务
|
||||
4. 在 `LauncherViewModel.InitializeModules()` 添加模块卡片
|
||||
|
||||
### 使用 Result<T> 包装操作
|
||||
|
||||
```csharp
|
||||
private void MyOperation() {
|
||||
Result.Try(() => {
|
||||
// 可能抛出异常的代码
|
||||
return dangerousOperation();
|
||||
})
|
||||
.OnSuccess(result => {
|
||||
// 成功处理
|
||||
AppendLog($"✅ 操作成功: {result}");
|
||||
})
|
||||
.OnFailure((ex, msg) => {
|
||||
// 失败处理
|
||||
_logger.LogError(ex, msg);
|
||||
AppendLog($"❌ 操作失败: {msg}");
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
**Q: 日志查看器无法打开日志文件**
|
||||
A: 这是正常的,因为 Serilog 正在写入文件。日志查看器现在使用 `FileShare.ReadWrite` 模式,应该可以正常读取。
|
||||
|
||||
**Q: PLC 调试无法连接**
|
||||
A: 确保 PLC IP 地址正确,并且 PLC 支持 S7 协议(S7-1200/1500/300/400)。
|
||||
|
||||
**Q: 数据库文件在哪里?**
|
||||
A: SQLite 数据库文件 `demo.db` 位于应用程序输出目录。
|
||||
|
||||
## 性能优化
|
||||
|
||||
Sharp.Demo 采用了以下性能优化措施:
|
||||
|
||||
1. **异步操作** - 所有 I/O 操作使用 async/await
|
||||
2. **懒加载** - 窗口按需创建和加载
|
||||
3. **资源清理** - 实现 IDisposable,及时释放资源
|
||||
4. **日志分页** - 日志查看器支持分页加载,避免内存溢出
|
||||
|
||||
## 贡献指南
|
||||
|
||||
欢迎提交 Issue 和 Pull Request!
|
||||
|
||||
1. Fork 本仓库
|
||||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||||
5. 提交 Pull Request
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目采用 GNU AGPLv3 许可证 - 详见 [LICENSE](../../../LICENSE) 文件
|
||||
|
||||
网络服务使用本框架时必须开源修改部分。如需商业许可,请联系作者。
|
||||
|
||||
## 作者
|
||||
|
||||
**Sharp Team** - [GitHub](https://github.com/your-org/sharp-basic)
|
||||
|
||||
## 致谢
|
||||
|
||||
- [HandyControl](https://github.com/HandyOrg/HandyControl) - 现代化 WPF 控件库
|
||||
- [Serilog](https://serilog.net/) - 结构化日志框架
|
||||
- [S7.NET+](https://github.com/mesta1/s7-dotnet-plus) - 西门子 PLC 通信库
|
||||
- [Polly](https://github.com/App-vNext/Polly) - 弹性和瞬态故障处理库
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.0 (2024-12-28)
|
||||
- 🎉 首次发布
|
||||
- ✨ 集成 9 大类功能模块
|
||||
- ✨ 开发者工具集成(F10/F11/F12)
|
||||
- ✨ 采用 Quick Start API
|
||||
- ✨ Result<T> 模式演示
|
||||
- ✨ 应用状态管理
|
||||
- 🐛 修复日志查看器文件锁定问题
|
||||
- 📝 完整的交互式功能演示
|
||||
|
||||
---
|
||||
|
||||
**享受使用 Sharp Framework!** 🚀
|
||||
Reference in new issue
Block a user