Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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支持)。
- Host: GitHub
- URL: https://github.com/tinylit/codearts
- Owner: tinylit
- License: mit
- Archived: true
- Created: 2019-10-08T13:10:51.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T20:26:31.000Z (almost 2 years ago)
- Last Synced: 2024-05-29T01:19:52.411Z (6 months ago)
- Topics: cast, copy, csharp, lightweight, linq, map, mapper, mvc-core, mvc-framework, mysql, netcore, netcore-webapi, orm, orm-framework, sql, sqlserver, webapi
- Language: C#
- Homepage:
- Size: 3.16 MB
- Stars: 43
- Watchers: 3
- Forks: 6
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
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)