SlickOne敏捷开发框架介绍(一) — 基于Dapper, Mvc和WebAPI 的全速支付框架

前言:在两年前(当前小说时间二零一五年10月七日,最初揭橥时间:2011年三月7日),项目组推出了基于Dapper,Mvc和WebApi的火速支付框架,随着后续Slickflow产品的执行和选用,今再一次对SlickOne项目做以追忆和总括。其目标是精简,持续创新,保持重构,让开发人士掌握到最新的变型,尤其是全栈开发人士做以参考。

两年此前的博客文章能够查看(最初发布时间:二零一三年5月2日):

http://blog.csdn.net/besley/article/details/8479943

 

1. 新本子变化总结:

1) Dapper部分的生成:

Dapper本人有帮助对数据库底层接口,本次重点是充实了Oracle和MySQL数据库的接口,也修改了Dapper里面包车型大巴SqlMapper文件。

2) SlickOne.Data 数据访问

在泛型封装的功底上,提供了列表分页,新增主键ID重回,根据多ID值查询重回列表,新增查询功能的蕴藏进程等接口。

3) Mvc/WebApi

将三个品种的档次动态库文件整合在三个Web项目里面,同时响应页面请求和Api请求。

4) Web前端

由JQueryUI 转换成 Bootstrap框架,大旨组件SlickGrid 转换为Bootstrap样式。

 

2. 框架设计

1) 数据访问Repository泛型类

Repository泛型类,彻底达成多少火速访问,不用再行编写分裂实体的通用基本办法;而且此泛型类的存在也用于帮衬Dapper,EF,Heibernate等各样数据访问框架,考虑到分化用户的技术储备,只要去落到实处IRepository的接口方法就足以三番4回应用本人喜欢的框架。

图片 1

2) 基于简单实体访问

差不离实体,原始来源为数量库表的呼应实体,而且并限量为只含有属性字段。在初期版本有别了多少实体和事务实体,有AutoMapper的变换工具,在新本子里面,不再强调工作实体,而是统一命名为简便实体,始终根据粗略实体做业务功能开发,做多少的囤积和读取。

3) 接口定义优先政策

接口方法尤其尊重于事情经过的概念。基本方法如新增,编辑和删除能够一向便捷调用Repository里的泛型方法,不再暗中同意自动生成Partial文件去珍爱,包涵Interface,
Service类和ApiController类都不再生成Partial类文件。

4) WebApi 接口封装

新闻体引用ResponseResult泛型类,包括情况(Status),音讯(Message)和实业(Entity)关键品质。ResponseResult类用于服务端到前者的多寡和信息封装,音讯内容格式是JSON数据格式。

5) Javascript模板引擎

动用前端Javascript模板引擎,解析WebApi传递回的JSON对象,做前端界面展现。模板引擎能够使用HandlebarsJS或DustJS。也能够挑选其余模板引擎。

6) Bootstrap 

前者框架连接到Bootstrap框架,相应的控件,如SlickGrid和ZTree等控件都足以找到相应Bootstrap的体制版本。

3. 消除方案结构图示

图片 2

4. 品类代码实例

 1) 实体对象

    /// <summary>
    /// 产品实体对象
    /// </summary>
    [Table("PrdProduct")]
    public class ProductEntity
    {
        public int ID { get; set; }
        public string ProductName { get; set; }
        public string ProductCode { get; set; }
        public string ProductType { get; set; }
        public Nullable<decimal> UnitPrice { get; set; }
        public string Notes { get; set; }
    }

2) 接口定义

    /// <summary>
    /// 产品服务接口
    /// </summary>
    public interface IProductService
    {
        List<ProductEntity> GetProductList();
    }

3) 服务完毕

        /// <summary>
        /// 获取列表数据(示例查询方法,实际会用到分页,此处用于演示。)
        /// </summary>
        /// <returns></returns>
        public List<ProductEntity> GetProductList()
        {
            var sql = @"SELECT ID, 
                            ProductName, 
                            ProductCode, 
                            ProductType, 
                            UnitPrice, 
                            CreatedDate 
                        FROM PrdProduct";
            var list = QuickReporsitory.Query<ProductEntity>(sql, null)
                        .ToList();
            return list;
        }

4) WebApi

        /// <summary>
        /// 获取产品列表
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public ResponseResult<List<ProductEntity>> GetProductList()
        {
            var result = ResponseResult<List<ProductEntity>>.Default();
            try
            {
                var list = ProductService.GetProductList();
                result = ResponseResult<List<ProductEntity>>.Success(list);
            }
            catch (System.Exception ex)
            {
                result = ResponseResult<List<ProductEntity>>.Error(
                    string.Format("读取{0}数据失败, 错误:{1}", "产品列表", ex.Message)
                );
            }
            return result;
        }

5) 前端脚本

productlist.load = function () {
        jshelper.ajaxGet("/soneweb/api/product/GetProductList", null, function (result) {
            if (result.Status == 1) {
                var columnProduct = [
                    { id: "ID", name: "ID", field: "ID", width: 40, cssClass: "bg-gray" },
                    { id: "ProductName", name: "名称", field: "ProductName", width: 120, cssClass: "bg-gray" },
                    { id: "ProductCode", name: "编码", field: "ProductCode", width: 120, cssClass: "bg-gray" },
                    { id: "ProductType", name: "类型", field: "ProductType", width: 160, cssClass: "bg-gray" },
                    { id: "UnitPrice", name: "单价", field: "UnitPrice", width: 160, cssClass: "bg-gray" },
                    { id: "CreatedDate", name: "创建时间", field: "CreatedDate", width: 200, cssClass: "bg-gray", formatter: datetimeFormatter },
                ];

                var optionsProduct = {
                    editable: true,
                    enableCellNavigation: true,
                    enableColumnReorder: true,
                    asyncEditorLoading: true,
                    forceFitColumns: false,
                    topPanelHeight: 25
                };

                var dsProduct = result.Entity;
                var dvProduct = new Slick.Data.DataView({ inlineFilters: true });
                var gridProduct = new Slick.Grid("#myProductGrid", dvProduct, columnProduct, optionsProduct);

                dvProduct.onRowsChanged.subscribe(function (e, args) {
                    gridProduct.invalidateRows(args.rows);
                    gridProduct.render();

                });

                dvProduct.onRowCountChanged.subscribe(function (e, args) {
                    gridProduct.updateRowCount();
                    gridProduct.render();
                });

                dvProduct.beginUpdate();
                dvProduct.setItems(dsProduct, "ID");
                gridProduct.setSelectionModel(new Slick.RowSelectionModel());
                dvProduct.endUpdate();

                gridProduct.onSelectedRowsChanged.subscribe(function (e, args) {
                    var selectionRowIndex = args.rows[0];
                    var row = dvProduct.getItemByIdx(selectionRowIndex);

                    if (row) {
                        productlist.mselectedProductID = row.ID;
                        productlist.mselectedProductRow = row;
                    }
                });
            };
        });

        function datetimeFormatter(row, cell, value, columnDef, dataContext) {
            if (value != null && value != "") {
                return value.substring(0, 10);
            }
        }
    }

6) 页面显示

图片 3

5. 项目利用场景

SlickOne适用于BS/CS等架构的系统,近来早就用于Web网站项目,电商E安德拉P,OA,工作流和App等各连串型的连串。

6. 门类能源

SlickOne项目开源地址:

http://github.com/besley/slickone

(包涵数据库脚本文件)

 SlickOne 做框架基础的权位管理:

http://github.com/besley/slicksafe

SlickSafe 权限管理在线DEMO:

http://demo.slickflow.com/ssweb/

 

7. 专门多谢

多谢随风,青文等网民对品种代码的贡献,开源能让大家集体加入,能让更几人享受代码成果。

8. 构建及技术支持

为公司开发人士急忙上手,Slickflow项目组提供线上开发框架架构划设想计培养和磨炼,流程引擎培养和陶冶,SlickGrid插件开发培养和练习等劳务,欢迎留言或咨询。

9. 在线QQ交流群

QQ群: 151650479

 

相关文章