解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
|
# æ•°æ®æ¨¡åž‹æŽ¥å£ï¼ˆIExtend / IModel / IFilter)
## 概述
`NewLife.Data` 命å空间æä¾›äº†ä¸‰ä¸ªè½»é‡çº§æ•°æ®æ¨¡åž‹æŽ¥å£ï¼Œç”¨äºŽå¯¹è±¡çš„æ‰©å±•å±žæ€§ã€æ¨¡åž‹å±žæ€§ç´¢å¼•和过滤器责任链场景。
**命å空间**:`NewLife.Data`
---
## IExtend — æ‰©å±•æ•°æ®æŽ¥å£
用于在对象上æºå¸¦"éžæ¨¡åž‹/éžå¸¸è§„"属性的数æ®å—典,区别于 `IModel` çš„"模型属性"访问。
```csharp
public interface IExtend
{
/// <summary>扩展数æ®é¡¹å—å…¸</summary>
IDictionary<String, Object?> Items { get; }
/// <summary>è®¾ç½®æˆ–èŽ·å–æ‰©å±•æ•°æ®é¡¹</summary>
Object? this[String key] { get; set; }
}
```
### 约定
- `Items` 应返回éžç©ºå®žä¾‹ï¼Œé¿å…调用方判空
- 索引读å–缺失键时应返回 `null`ï¼Œè€ŒéžæŠ›å‡ºå¼‚å¸¸
- 典型使用场景:网络会è¯ã€ä¸Šä¸‹æ–‡å¯¹è±¡ç‰éœ€è¦æŒ‰éœ€æŒ‚载临时数æ®
---
## IModel — æ¨¡åž‹æ•°æ®æŽ¥å£
用于以å—符串键索引访问"模型属性",而ä¸ç›´æŽ¥ä½¿ç”¨å射。常用于 WebApi 模型ã€XCode 实体ã€å¯¹è±¡æ‹·è´ä¸Žç»‘定。
```csharp
public interface IModel
{
/// <summary>è®¾ç½®æˆ–èŽ·å–æ¨¡åž‹æ•°æ®é¡¹</summary>
Object? this[String key] { get; set; }
}
```
### 约定
- 实现者应将键与公开属性å(或逻辑åï¼‰æ˜ å°„
- 缺失键读å–返回 `null`;写入缺失键由实现自行决定行为
- å¤§éƒ¨åˆ†åœºæ™¯é€æ¥æ›¿ä»£ `IExtend`ï¼›`IExtend` 适åˆ"ä¸´æ—¶æ‰©å±•å—æ®µ",而 `IModel` é¢å‘"模型属性"
---
## IFilter — æ•°æ®è¿‡æ»¤å™¨æŽ¥å£
责任链模å¼è¿‡æ»¤å™¨ï¼Œç”¨äºŽæŒ‰é¡ºåºå¯¹ `FilterContext` 进行处ç†ã€‚常用于å议管é“的数æ®é¢„å¤„ç†æˆ–åŽå¤„ç†ã€‚
```csharp
public interface IFilter
{
/// <summary>下一个过滤器</summary>
IFilter? Next { get; }
/// <summary>对å°åŒ…执行过滤器</summary>
void Execute(FilterContext context);
}
```
### FilterContext
```csharp
public class FilterContext
{
/// <summary>å°åŒ…。为 null 表示终æ¢åŽç»è¿‡æ»¤</summary>
public virtual IPacket? Packet { get; set; }
}
```
### 辅助方法
```csharp
public static class FilterHelper
{
/// <summary>在链æ¡ä¸æŸ¥æ‰¾æŒ‡å®šç±»åž‹çš„过滤器</summary>
public static IFilter? Find(this IFilter filter, Type filterType);
/// <summary>泛型版本</summary>
public static TFilter? Find<TFilter>(this IFilter filter) where TFilter : IFilter;
}
```
|