Mario是一个基于.NETCore的简单快速开发框架
Mario .NET Core简单快速开发框架
Mario是一个基于.NET Core的简单快速开发框架
GitHub:https://github.com/deeround/Mario
技术特点
基于.NET Core 2.2 集成常用三方组件
AutoMapper
FluentValidation
Newtonsoft.Json
NLog
Swashbuckle
支持jwt认证、支持API资源权限验证
支持swagger中API分组显示
所有服务自动注入,无需手动注入
......
使用场景
中小型项目有时候并不需要各种复杂的驱动设计,复杂的分层设计,只需简单业务逻辑开发。Mario框架就是为了简化我们开发,减少各种繁琐的配置注入,只需关注于业务逻辑开发本身。
框架结构

| 项目 | 说明 |
|---|---|
| Mario.Core | 底层核心库 |
| Mario.Data | 数据封装库 |
| Mario.Mvc | WebApi封装库 |
| Mario.Web | WebApi业务库 |
| WangSql | 数据底层库 |
业务模块开发
简单模块

当我们业务非常简单,我们连实体类都不写的应用场景,就是简单直接干,只用写API,直接在控制器写业务就行了。
分为以下几步即可完成:
1、模块相关配置

- 配置swagger信息,每个模块都是配置swagger信息(需要开启API分组功能)
- 配置数据库信息,可以配置多个多种数据库(支持很多数据库的)
2、添加模块目录

- Test就是模块
- Test\Controllers就是API,在控制器里面写业务逻辑就行了
- Test\ApiModule.cs为模块启动初始化类,可以在里面写模块初始化逻辑
3、添加测试控制器
在Test\Controllers下添加Test控制器
public class TestController : ApiController
{
/// <summary>
/// 演示使用原始方法和扩展方法查询数据
/// </summary>
/// <returns></returns>
[HttpGet()]
public IList<Dictionary<string, object>> GetList()
{
return SqlMapper.Query<Dictionary<string, object>>("select * from T_SYS_USER", null).ToList(); //原始方法
//return SqlMapper.ListSod("select * from T_SYS_USER"); //扩展方法
}
/// <summary>
/// 分页查询
/// </summary>
/// <returns></returns>
[HttpGet()]
public PageData<StrObjDict> GetPage(string name)
{
string sql = "select * from T_SYS_USER where 1=1";
StrObjDict sod = new StrObjDict();
if (!string.IsNullOrEmpty(name))
{
sql += $" and USERNAME like '%$USERNAME$%'";
sod.Add("USERNAME", name);
}
//排序设置
sql += $" order by USERNAME desc";
return SqlMapper.PageSod(sql, sod, 1, 20, out int total);
}
/// <summary>
/// 定义好入参,但不定义出参格式
/// 方便扩展入参,也可使用swagger直接测试,但是前端无法通过swagger查看接口出参格式,只有请求后才知道出参格式
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[HttpGet()]
public IList<StrObjDict> GetByName(string name)
{
//return SqlMapper.ListSod("select * from T_SYS_USER where USERNAME like '%$USERNAME$%'", name); //写法1
return SqlMapper.ListSod("select * from T_SYS_USER where USERNAME like '%$USERNAME$%'", new StrObjDict() { { "USERNAME", name } }); //写法1
}
/// <summary>
/// 这个是上面方法另一种写法
/// 这种方法不固定入参,可随时添加删除入参,但是无法使用swagger直接测试,可使用postman等其他接口工具测试
/// 这种方法前端入参和出参都不知道格式,需要前后端提前约定好出入参
/// </summary>
/// <returns></returns>
[HttpGet()]
public IList<StrObjDict> GetByNameNoParam()
{
var param = ApiContext.GetRequestParam();
string name = param.GetString("name");
//return SqlMapper.ListSod("select * from T_SYS_USER where USERNAME like '%$USERNAME$%'", name); //写法1
return SqlMapper.ListSod("select * from T_SYS_USER where USERNAME like '%$USERNAME$%'", new StrObjDict() { { "USERNAME", name } }); //写法1
}
}
4、使用swagger测试API

复杂模块
包含dto和实体相互转换、实体验证、登录验证、加入service层等
主要用于展示框架更多功能,实际上框架还有更多特性供探索。

具体代码请查看GitHub
GitHub & 说明
GitHub link https://github.com/deeround/Mario
Mario框架仅仅提供给大家学习使用,现在只有后端,暂无前端,后期可能考虑使用vue做个admin模板,目前还在完善中......
Mario是一个基于.NETCore的简单快速开发框架的更多相关文章
- TomatoLog 是一个基于 .NETCore 平台的产品。
TomatoLog TomatoLog 是一个基于 .NETCore 平台的产品. The TomatoLog 是一个中间件,包含客户端.服务端,非常容易使用和部署. 客户端实现了ILoggerFac ...
- jmGraph:一个基于html5的简单画图组件
jmGraph:一个基于html5的简单画图组件 特性: 代码书写简单易理解 面向对象的代码结构 对图形控件化 样式抽离 模块化:入seajs实现模块化开发 兼容性:暂只推荐支持html5的浏览器:i ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
- [基于NetCore的简单博客系统]-登录
0-项目背景 一个基于.NET CORE RAZOR PAGES的简单博客系统 技术栈全部采用微软官方实现方式,目的是熟悉新技术 项目地址:https://github.com/ganqiyin/BL ...
- 02 基于umi搭建React快速开发框架(国际化)
前言 之前写过一篇关于React的国际化文章,主要是用react-intl库,雅虎开源的.react-intl是用高阶组件包装一层来做国际化. 基于组件化会有一些问题,比如在一些工具方法中需要国际化, ...
- 01 基于umi搭建React快速开发框架
介绍 基于umi搭建一个快速开发框架,react 应用框架.umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载. 我们会 ...
- 一个基于jQuery的简单树形菜单
在工作中的项目使用的是一个前端基于 jQuery easyui 的一个系统,其中左侧的主菜单使用的是 easyui 中的 tree 组件,不是太熟悉,不过感觉不是太好用. 比如 easyui 中的 t ...
- AgileRepository - 一个基于接口的Repository快速开发库
AgileRepository 这是一个可以帮助你快速开发Repository的lib.有点像SpringData JPA根据方法名.注解来自动生成查询方法的功能. 对于一些简单的查询,只需要定义接口 ...
- 学习LSM(Linux security module)之四:一个基于LSM的简单沙箱的设计与实现
嗯!如题,一个简单的基于LSM的沙箱设计.环境是Linux v4.4.28.一个比较新的版本,所以在实现过程中很难找到资料,而且还有各种坑逼,所以大部分的时间都是在看源码,虽然写的很烂,但是感觉收获还 ...
随机推荐
- 从N个元素中抽取K个不重复元素(抽奖问题)
核心就是 把N数组抽中的元素给K数组 把N数组最后一位给N数组被抽走的那一位(这时候N数组最后一位元素和被抽走的那位元素值相等) 把N数组长度减一,去除最后一位
- schedule of 2016-11-7~2016-11-10(Monday~Thursday)——1st semester of 2nd Grade
most important things to do 1.joint phd preparations 2.journal paper to write 3.solid fundamental kn ...
- CF1200E Compress Words | 字符串hash
传送门 Examples input 1 5 I want to order pizza output 1 Iwantorderpizza input 2 5 sample please ease i ...
- MapInfo常见数据格式
在MapInfo 中所指的表是单纯的数据表或是图形与数据的结合.一个典型的MapInfo表将主要由*.tab.*.dat.*.wks.*.dbf.*.xls.*.map.*.id.*.ind文件格式组 ...
- spring boot通过@Bean注解定义一个Controller
功能需求 提供一个公共的jar包给其他业务模块依赖,需要在这个公共的jar中暴露一个restful API 采用spring auto config机制,在公共jar包中定义spring.factor ...
- DSN
用户DSN注册信息记录在本机的注册表上 文件DSN保存在本地磁盘上 系统DSN注册在服务器的注册表上,所以客户端连接服务器,只要一台在服务器建立了DSN,其他客户端登录时都会看到该DSN
- String.valueOf(null)
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); ...
- IDEA使用 磨刀霍霍向代码
工欲善其事,必先利其器 ,当下有数不清的 Java 程序员将石器时代的 Eclipse 替换成了现代化的智能开发工具 InteliJ IDEA ,写代码的小日子过得不亦乐乎(玩笑话,两者各有千秋,看个 ...
- Linux内存管理解析(一) : 分段与分页机制
背景 : 在此文章里会从分页分段机制去解析Linux内存管理系统如何工作的,由于Linux内存管理过于复杂而本人能力有限.会尽量将自己总结归纳的部分写清晰. 从实模式到保护模式的寻址方式的不同 : 1 ...
- 这个时候 快下班了 我来翻译一段: Pro ASP.NET MVC 3 Framework
Binding to a Derived Type绑定派生类型Although we have focused on interfaces (since that is most relevant i ...