# codearts
**Repository Path**: jitjit/codearts
## Basic Information
- **Project Name**: codearts
- **Description**: 代码艺术.
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-06-15
- **Last Updated**: 2022-06-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

[](https://gitee.com/tinylit/codearts)
[](https://github.com/tinylit/codearts)





[](../../issues)
### “CodeArts”是什么?
CodeArts 是一套简单、高效的轻量级框架(涵盖了类型转换、实体复制、实体映射、动态代理类,以及基于Linq分析实现的、支持分表和读写分离的ORM框架)。
### 如何安装?
First, [install NuGet](http://docs.nuget.org/docs/start-here/installing-nuget). Then, install [CodeArts](https://www.nuget.org/packages/CodeArts/) from the package manager console:
```
PM> Install-Package CodeArts
```
NuGet 包
--------
| Package | NuGet | Downloads | Jane Says Markdown |
| ------- | ----- | --------- | --------- |
| CodeArts | [](https://www.nuget.org/packages/CodeArts/) |  | Core universal design. |
| CodeArts.Middleware | [](https://www.nuget.org/packages/CodeArts.Middleware/) |  | [IOC middleware.](./CodeArts.Middleware.md) |
| CodeArts.Caching | [](https://www.nuget.org/packages/CodeArts.Caching/) |  | [Caching rules.](./CodeArts.Caching.md) |
| CodeArts.Casting | [](https://www.nuget.org/packages/CodeArts.Casting/) |  | [Type conversion, cloning, mapping.](./CodeArts.Casting.md) |
| CodeArts.Configuration | [](https://www.nuget.org/packages/CodeArts.Configuration/) |  | [Read configuration file.](./CodeArts.Configuration.md) |
| CodeArts.Json | [](https://www.nuget.org/packages/CodeArts.Json/) |  | [JSON read and write processing.](./CodeArts.Json.md) |
| CodeArts.Net | [](https://www.nuget.org/packages/CodeArts.Net/) |  | [Request component of HTTP/HTTPS.](./CodeArts.Net.md) |
| CodeArts.Emit | [](https://www.nuget.org/packages/CodeArts.Emit/) |  | Abstract Syntax Tree(AST). |
| CodeArts.Mvc | [](https://www.nuget.org/packages/CodeArts.Mvc/) |  | [Model View Controller(MVC).](./CodeArts.Mvc.md) |
| CodeArts.Db | [](https://www.nuget.org/packages/CodeArts.Db/) |  | [Database operation base library.](./CodeArts.Db.md) |
| CodeArts.Db.Lts | [](https://www.nuget.org/packages/CodeArts.Db.Lts/) |  | [Independent research and development and long term maintenance of ORM.](./CodeArts.Db.Lts.md) |
| CodeArts.Db.EntityFramework | [](https://www.nuget.org/packages/CodeArts.Db.EntityFramework/) |  | [EF/EFCore simple package.](./CodeArts.Db.EntityFramework.md) |
| CodeArts.Db.Linq2Sql | [](https://www.nuget.org/packages/CodeArts.Db.Linq2Sql/) |  | [Linq to SQL.](./CodeArts.Db.Linq2Sql.md) |
### 引包即用?
* 引包即用是指,安装 `NuGet` 包后,自动注入配置信息。
* 在启动方法中添加如下代码即可:
``` csharp
using (var startup = new XStartup())
{
startup.DoStartup();
}
```
### 单例。
* 作为单例基类。
```c#
public class ASingleton : Singleton {
private ASingleton(){ }
}
ASingleton singleton = ASingleton.Instance;
```
* 作为单例使用。
```c#
public class BSingleton {
}
BSingleton singleton = Singleton.Instance
```
* 绝对单例。
```c#
public class CSingleton : Singleton {
private CSingleton(){ }
}
CSingleton singleton1 = CSingleton.Instance;
CSingleton singleton2 = Singleton.Instance; // 与“singleton1”是同一实例。
```
### 服务池。
* TryAddSingleton:添加单例实现。
* Singleton:获取单例。
* 单例实现:
- 单例实现(一)。
- 添加默认支持的单例实现。
```c#
RuntimeServPools.TryAddSingleton(); //=> true.
```
- 在未使用A的实现前,可以刷新单例实现支持。
```c#
RuntimeServPools.TryAddSingleton(); //=> true;
RuntimeServPools.TryAddSingleton(new C()); //=> true;
```
- 单例实现(二)。
- 添加实例或工厂支持的单例实现。
```c#
RuntimeServPools.TryAddSingleton(new B()); //=> true.
```
- 在未使用A的实现前,可以被实例或工厂刷新单例实现支持,默认支持方式不被生效。
```c#
RuntimeServPools.TryAddSingleton(); //=> false;
RuntimeServPools.TryAddSingleton(new C()); //=> true;
```
* 单例使用:
- 单例使用(一)。
```c#
A a = RuntimeServPools.Singleton();
```
未提前注入单例实现,会直接抛出`NotImplementedException`异常。
- 单例使用(二)。
```c#
A a = RuntimeServPools.Singleton();
```
未提前注入单例实现,会尝试创建`B`实例。
- 说明:
- TryAddSingleton<T>:使用实例时,使用【公共/非公共】无参构造函数创建实例。
- TryAddSingleton<T1,T2>:使用实例时,尽量使用参数更多且被支持的公共构造函数创建实例。
```c#
public class A {
}
public class B {
private readonly A a;
public B() : this(new A()){ }
Public B(A a){ this.a = a ?? throw new ArgumentNullException(nameof(a)); }
}
```
使用单例时,未注入A的单例实现,使用无参构造函数生成实例。
使用单例时,已注入A的单例实现,使用参数`A`的造函数生成实例。
### 命名规范。
* 命名方式。
```c#
/// 命名规范。
public enum NamingType
{
/// 默认命名(原样/业务自定义)。
Normal = 0,
/// 驼峰命名,如:userName。
CamelCase = 1,
/// url命名,如:user_name,注:反序列化时也需要指明。
UrlCase = 2,
/// 帕斯卡命名,如:UserName。
PascalCase = 3
}
```
* 命名标记。
```c#
///
/// 命名特性。
///
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = false)]
public sealed class NamingAttribute : Attribute
{
///
/// 名称。
///
public string Name { get; set; }
///
/// 命名规范。
///
public NamingType NamingType { get; set; }
///
/// 构造函数。
///
/// 名称。
public NamingAttribute(string name)
{
Name = name;
}
///
/// 构造函数。
///
/// 名称风格。
public NamingAttribute(NamingType namingType)
{
NamingType = namingType;
}
///
/// 构造函数。
///
/// 名称。
/// 名称风格。
public NamingAttribute(string name, NamingType namingType) : this(name)
{
NamingType = namingType;
}
}
```
### 命名转换。
* 指定命名方式。
```c#
string named = "name".ToNamingCase(NamingType.CamelCase);
```
* 特定命名方式。
- 帕斯卡命名(又称大驼峰)。
```c#
string named = "name".ToPascalCase();
```
- 驼峰命名。
```c#
string named = "name".ToCamelCase();
```
- Url命名。
```c#
string named = "name".ToUrlCase();
```
### 读取配置文件。
* 普通方式。
```c#
T value = "key".Config(); // 未找到时,返回指定类型的默认值。
```
```c#
T value = "key".Config(defaultValue); // 未找到时,返回defaultValue。
```
* 配置变更自动同步方式。
- 实现以下接口。
```c#
///
/// 配置变更监听能力。
///
public interface IConfigable where TSelf : class, IConfigable
{
///
/// 监听到变更后的新数据。
///
/// 变更后的数据。
void SaveChanges(TSelf changedValue);
}
```
- 使用方式。
```c#
T value = "key".Config(); // 未找到时,返回:null。
```
### 字符串语法糖。
```c#
string value = "{a + b}".PropSugar(new { A = 1, B = 2 }, NamingType.CamelCase); //=> value = "3"。
```
* 语法说明:
- 空运算符:A?B、A ?? B
当A为`null`时,返回B,否则返回A。
- 合并运算符:A+B
当A和B可以参与运算时,返回运算结果。否则转成字符串拼接。
- 试空合并运算符:A?+B
当A为`null`时,返回B,否则按照【合并运算符】计算A+B的结果。
- 可支持任意组合,从左到右依次计算(不支持小括号)。
### 可空能力(非`null`空实例)。
* Nullable<T>:`T`的默认值。
* 值类型:默认值。
* 字符串类型:`string.Empty`。
* 自定义空实例实现:`Emptyable.Register`。
- 普通类型。
```c#
Emptyable.Register(new Version());
```
- 继承或实现关系。
```c#
public class A{}
public class B : A {}
Emptyable.Register();
```
- 泛型声明类型。
```c#
public class A{}
public class B : A {}
Emptyable.Register(typeof(A<>),typeof(B<>));
```
* 其它:调用参数最多的构造函数生成默认值,确保构造函数参数相关内容不会为`null`。
- 可选参数不为`null`时,直接使用可选参数默认值。
- 生成可空实例。
* 不能生成非`null`空实例时,抛出异常。
### 标星历程图。
[](https://starchart.cc/tinylit/CodeArts)