一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目
阅读原文时间:2021年08月17日阅读:3

这是一个基于最新的ASP.net core 5.0创建Razor Page应用程序解决方案模板。遵循Clean Architecture的原则,以最求简洁的代码风格和实现快速开发小型的web业务系统的目标,并且从没停止过更新。该项目从最早的asp.net web form,asp.net mvc5 到 asp.net core 3.1再到现在最新的asp.net core 5.0 Razor Page,从简单三层结构到N层结构再到现在流行的CQRS模式,一遍一遍的再重构,在这过程中体会到系统架构的重要性和在优秀的框架下开发系统是一件多么愉快的事情。做这样的项目纯粹是为了兴趣和能和很多Github上优秀的程序员一起交流和学习。

  • 新增
  • 修改
  • 删除
  • 查询
  • 导入Excel
  • 下载模板
  • 导出Excel

  • 新增
  • 修改
  • 删除
  • 查询
  • 导入Excel
  • 下载模板
  • 导出Excel
  • 重置密码
  • 角色管理

  • 新增
  • 修改
  • 删除
  • 查询
  • 导入Excel
  • 下载模板
  • 导出Excel
  • 授权管理
  1. 在Domain project中新增一个Entity,比如Customer客户信息

    public partial class Customer : AuditableEntity, IHasDomainEvent
    {
    public int Id { get; set; }
    public string Name { get; set; }
    public string NameOfEnglish { get; set; }
    public string GroupName { get; set; }
    public PartnerType PartnerType { get; set; }
    public string Region { get; set; }
    public string Sales { get; set; }
    public string RegionSalesDirector { get; set; }
    public string Address { get; set; }
    public string AddressOfEnglish { get; set; }
    public string Contract { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Fax { get; set; }
    public string Comments { get; set; }
    public List DomainEvents { get; set; } = new();
    }

  2. 在Application project中实现具体的功能请遵循CQRS模式

  • Command

    • AddEdit
    • Delete
    • Import
  • DTOs

  • Eventhandlers

  • Queries

    • Export
    • PaginationQuery
  1. 在SmartAdmin.WebUI中添加UI页面

    @page
    @using CleanArchitecture.Razor.Domain.Enums
    @using CleanArchitecture.Razor.Infrastructure.Constants.Permission
    @model SmartAdmin.WebUI.Pages.Customers.IndexModel
    @inject Microsoft.Extensions.Localization.IStringLocalizer _localizer
    @inject Microsoft.AspNetCore.Authorization.IAuthorizationService _authorizationService
    @{
    ViewData["Title"] = _localizer["Customers"].Value;
    ViewData["PageName"] = "customers_index";
    ViewData["Category1"] = _localizer["Customers"].Value;
    ViewData["Heading"] = _localizer["Customers"].Value;
    ViewData["PageDescription"] = _localizer["See all available options"].Value;
    ViewData["PreemptiveClass"] = "Default";
    var _canCreate = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Create);
    var _canEdit = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Edit);
    var _canDelete = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Delete);
    var _canSearch = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Search);
    var _canImport = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Import);
    var _canExport = await _authorizationService.AuthorizeAsync(User, null, Permissions.Customers.Export);

    }
    @section HeadBlock {

    <link rel="stylesheet" media="screen, print" href="~/css/formplugins/bootstrap-daterangepicker/bootstrap-daterangepicker.css">
    <link rel="stylesheet" media="screen, print" href="~/css/fa-solid.css">
    <link rel="stylesheet" media="screen, print" href="~/css/theme-demo.css">
    <link rel="stylesheet" media="screen,print" href="~/lib/easyui/themes/insdep/easyui.css">
    <style>
    .customer_dg_datagrid-cell-c1-_action {
        overflow: visible !important
    }
    </style>

    }

    @_localizer["Customers"] @_localizer["See all available options"]

    @if (_canCreate.Succeeded) { } @if (_canDelete.Succeeded) { } @if (_canSearch.Succeeded) { } @if (_canImport.Succeeded) {
    } @if (_canExport.Succeeded) { }

    @await Component.InvokeAsync("ImportExcel", new { importUri = Url.Page("/Customers/Index") + "?handler=Import",
    getTemplateUri = @Url.Page("/Customers/Index") + "?handler=CreateTemplate",
    onImportedSucceeded = "reload()" })
    @section ScriptsBlock {

    <script type="text/javascript" src="~/lib/easyui/jquery.easyui.min.js" asp-append-version="true"></script>
    <script type="text/javascript" src="~/lib/easyui/jquery.easyui.component.js" asp-append-version="true"></script>
    <script type="text/javascript" src="~/lib/easyui/plugins/datagrid-filter.js" asp-append-version="true"></script>
    <script>jQuery.fn.tooltip = bootstrapTooltip;</script>
    <script src="~/lib/axios/dist/axios.js"></script>
    <script src="~/lib/jquery-form/jquery.jsonToForm.js"></script>
    
    <script type="text/javascript">
        $('#searchbutton').click(function () {
            reload();
        });
        $('#addbutton').click(function () {
            popupmodal(null);
        });
        $('#deletebutton').click(function () {
            onDeleteChecked();
        });
        $('#exportbutton').click(function () {
            onExport();
        });
        $('#importbutton').click(function () {
            showImportModal();
        });
        $('#gettemplatebutton').click(function () {
            onGetTemplate();
        });
        $('#customer_form :submit').click(function (e) {
            ...
            event.preventDefault();
            event.stopPropagation();
        })
        var $dg={};
        var initdatagrid = () => {
            $dg = $('#customer_dg').datagrid({
               ...
    }
    
    var reload = () =&gt; {
        $dg.datagrid('load', '@Url.Page("/Customers/Index")?handler=Data');
    }
    
    $(() =&gt; {
        initdatagrid();
    })
    var popupmodal = (customer) =&gt; {
       ...
    }
    
    var onEdit = (index) =&gt; {
        var customer = $dg.datagrid('getRows')[index];
        popupmodal(customer);
    }
    var onDelete = (id) =&gt; {
        ...
    }
    var onDeleteChecked = () =&gt; {
        ...
    }
    var onExport = () =&gt; {
       ...
     }
    </script>

    }

网站

账号/密码

截图

http://tms.i247365.net/ TMS 运输管理系统

demo@email.com/123456

http://manage.i247365.net/ 委托业务内控管理系统

demo/123456

http://check.i247365.net/ 人脸考勤管理系统

demo/123456

http://supplier.i247365.net/ 供应商询价系统

demo/123456

http://iot.i247365.net/ 智能水务综合管理平台

demo/123456

http://book.i247365.net/ 小型图书管理工具

demo/123456

keep coding, enjoy coding.

如果你喜欢这个项目,请记得在Github上点赞,谢谢

https://github.com/neozhu/RazorPageCleanArchitecture

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章