Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tinylit/codearts

【代码艺术】一款轻量高效的基础框架(包含类型转换、复制、映射,以及ORM支持)。
https://github.com/tinylit/codearts

cast copy csharp lightweight linq map mapper mvc-core mvc-framework mysql netcore netcore-webapi orm orm-framework sql sqlserver webapi

Last synced: 1 day ago
JSON representation

【代码艺术】一款轻量高效的基础框架(包含类型转换、复制、映射,以及ORM支持)。

Awesome Lists containing this project

README

        

![CodeArts](http://oss.jschar.com/codearts.png 'Logo')

[![Gitee](https://gitee.com/static/images/logo-en.svg)](https://gitee.com/tinylit/codearts)
[![Github](http://oss.jschar.com/logo_github.png)](https://github.com/tinylit/codearts)

![GitHub](https://img.shields.io/github/license/tinylit/codearts.svg)
![language](https://img.shields.io/github/languages/top/tinylit/codearts.svg)
![codeSize](https://img.shields.io/github/languages/code-size/tinylit/codearts.svg)
![appveyor-ci](https://img.shields.io/appveyor/ci/tinylit/codearts.svg)
![AppVeyor tests (compact)](https://img.shields.io/appveyor/tests/tinylit/codearts.svg?compact_message)
[![GitHub issues](https://img.shields.io/github/issues-raw/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 | [![CodeArts](https://img.shields.io/nuget/v/CodeArts.svg)](https://www.nuget.org/packages/CodeArts/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts) | Core universal design. |
| CodeArts.Middleware | [![CodeArts.Middleware](https://img.shields.io/nuget/v/CodeArts.Middleware.svg)](https://www.nuget.org/packages/CodeArts.Middleware/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Middleware) | [IOC middleware.](./CodeArts.Middleware.md) |
| CodeArts.Caching | [![CodeArts.Caching](https://img.shields.io/nuget/v/CodeArts.Caching.svg)](https://www.nuget.org/packages/CodeArts.Caching/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Caching) | [Caching rules.](./CodeArts.Caching.md) |
| CodeArts.Casting | [![CodeArts.Casting](https://img.shields.io/nuget/v/CodeArts.Casting.svg)](https://www.nuget.org/packages/CodeArts.Casting/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Casting) | [Type conversion, cloning, mapping.](./CodeArts.Casting.md) |
| CodeArts.Configuration | [![CodeArts.Configuration](https://img.shields.io/nuget/v/CodeArts.Configuration.svg)](https://www.nuget.org/packages/CodeArts.Configuration/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Configuration) | [Read configuration file.](./CodeArts.Configuration.md) |
| CodeArts.Json | [![CodeArts.Json](https://img.shields.io/nuget/v/CodeArts.Json.svg)](https://www.nuget.org/packages/CodeArts.Json/) | ![Nuget](https://img.shields.io/nuget/dt/Codearts.Json) | [JSON read and write processing.](./CodeArts.Json.md) |
| CodeArts.Net | [![CodeArts.Net](https://img.shields.io/nuget/v/CodeArts.Net.svg)](https://www.nuget.org/packages/CodeArts.Net/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Net) | [Request component of HTTP/HTTPS.](./CodeArts.Net.md) |
| CodeArts.Emit | [![CodeArts.Emit](https://img.shields.io/nuget/v/CodeArts.Emit.svg)](https://www.nuget.org/packages/CodeArts.Emit/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Emit) | Abstract Syntax Tree(AST). |
| CodeArts.Mvc | [![CodeArts.Mvc](https://img.shields.io/nuget/v/CodeArts.Mvc.svg)](https://www.nuget.org/packages/CodeArts.Mvc/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Mvc) | [Model View Controller(MVC).](./CodeArts.Mvc.md) |
| CodeArts.Db | [![CodeArts.Db](https://img.shields.io/nuget/v/CodeArts.Db.svg)](https://www.nuget.org/packages/CodeArts.Db/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Db) | [Database operation base library.](./CodeArts.Db.md) |
| CodeArts.Db.Lts | [![CodeArts.Db.Lts](https://img.shields.io/nuget/v/CodeArts.Db.Lts.svg)](https://www.nuget.org/packages/CodeArts.Db.Lts/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Db.Lts) | [Independent research and development and long term maintenance of ORM.](./CodeArts.Db.Lts.md) |
| CodeArts.Db.EntityFramework | [![CodeArts.Db.EntityFramework](https://img.shields.io/nuget/v/CodeArts.Db.EntityFramework.svg)](https://www.nuget.org/packages/CodeArts.Db.EntityFramework/) | ![Nuget](https://img.shields.io/nuget/dt/CodeArts.Db.EntityFramework) | [EF/EFCore simple package.](./CodeArts.Db.EntityFramework.md) |
| CodeArts.Db.Linq2Sql | [![CodeArts.Db.Linq2Sql](https://img.shields.io/nuget/v/CodeArts.Db.Linq2Sql.svg)](https://www.nuget.org/packages/CodeArts.Db.Linq2Sql/) | ![Nuget](https://img.shields.io/nuget/dt/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`空实例时,抛出异常。

### 标星历程图。

[![Stargazers over time](https://starchart.cc/tinylit/CodeArts.svg)](https://starchart.cc/tinylit/CodeArts)