.NET Core模块化

源码地址

GitHub:https://github.com/iamoldli/NetModular

演示地址

地址:https://nm.iamoldli.com
账户:admin
密码:admin

前端框架演示地址(临时)

地址:http://progqx5cu.bkt.clouddn.com/skins/index.html#/
账户:admin
密码:admin

一、目录

1、开篇
2、快速创建一个业务模块
3、数据访问模块介绍
4、模块化实现思路

二、实现快速开发的前提条件

NetModular实现快速开发有两个前提条件:

1、约定优于配置的开发原则

2、代码生成器

约定优于配置是现在到处可见的一种开发原则,比如ASP.NET MVC中的HttpGet、HttpPost等特性限制请求方式,比如控制器都以Controller结尾,比如SpringBoot中各种注解等,都属于约定优于配置,这种开发原则的好处在于可以减少开发人员需要做决定的次数,使开发变得简单、快速,只是这是对于老手来说的,对于新手则提高了学习成本。

基本上每个开源的框架都会有配套的代码生成器,而代码生成器其实就是以约定优于配置为基础的,只有先约定好了项目结构和开发规范,你才能实现一个代码生成器。与其它代码生成器不同,NetModular的代码生成器不是根据数据库来生成代码,而是提供了一个单独的模块,可以很方便的集成到任何项目当中,通过Web的形式在线配置项目、实体、属性、模型、枚举等内容,然后可以一键生成项目代码并下载。

其实,我的最终目标是希望能够有一个强大的可视化编辑页面,可以灵活配置前端的视图页面以及后端的实体信息,最后直接在线编译并热加载到当前项目中。后端热加载还有点思路,但是前端因为要打包的原因,现在还没想好解决,以后努力~

三、模块的结构

上面说了,代码生成器是依赖与约定的,所以我们先来看下一个模块的项目结构

上图中的Blog目录,就是一个模块的示例,本身就是通过代码生成器生成后放到项目当中的(很多人第一眼看到以为是DDD架构的,其实不是,顶多就是个DDDLite~),先说一下每层的作用

1、Domain:领域层,包含实体、实体扩展、实体相关的枚举、仓储接口

实体都已Entity结尾
仓储接口都已Repository结尾,且必须继承IRepository<>泛型接口
实体包含扩展属性的,需要把实体设置为部分类,且扩展类需要以Extend.cs结尾

2、Infrastructure:基础设施层,包含仓储实现以及一些当前模块特有的类,像配置项等

仓储实现位于Repositories目录下,不同数据库放到不同的目录下面
模块特有的配置项放在Options目录下

3、Application:应用服务层、包含所有的业务逻辑

每个实体对应一个目录,目录名称为实体名称+Service
每个目录下包含有服务接口和实现、视图模型、对象映射配置、模型验证配置等信息

4、Web:接口层、包含控制器、模块初始化配置等

必须创建ModuleInitializer类,且该类必须继承IModuleInitializer接口
必须创建ModuleController基类控制器,继承ModuleControllerAbstract抽象类,并配置Area特性用于配置区域

5、WebHost:Web主机,包含配置文件,用于安装所需的模块以及启动项目

必须创建Startup类,并且继承StartupAbstract抽象类
在Program的Main函数中,使用WebHostCreator.Run<Startup>(args);方式启动

6、WebHost.Electron:客户端主机,用于启动基于 Electron.js 的客户端程序

以上就是NetModular框架中一个模块的结构,有了约定,那么接下来就演示一下如何通过代码生成器来创建项目吧。

四、代码生成

1、创建项目

已个人博客为例,项目需要填名称车和编码

2、添加枚举

因为文章有多媒体信息,所以先添加一个多媒体的枚举MediaType

3、添加实体

添加文章Article、分类Category、标签Tag三个实体

4、配置实体属性

以文章Article为例

5、生成

在项目列表中,点击生成按钮生成代码并下载。

6、测试

打开生成的代码,进入Blog/data目录,按需创建数据库,因为模块默认依赖Nm_Admin模块,所以也要创建Nm_Admin的数据库

进入Blog/src/WebHost/config目录,打开db.json配置数据库连接

回到Blog/src/WebHost目录,代开命令行输入以下命令启动服务端


dotnet watch run --environment Development

进入Blog/src/UI/nm-module-blog目录,执行以下命令来启动前端代码


npm install npm update npm run serve

最后在浏览器中输入 http://localhost:6220 进行浏览

接口文档地址 http://localhost:6220/swagger/index.html

如果没有意外的话,应该可以了~

原文首发:ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块

.NET Core模块化的更多相关文章

  1. Orchard Core Framework:ASP.NET Core 模块化,多租户框架

    Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...

  2. ASP.NET Core模块化前后端分离快速开发框架介绍之4、模块化实现思路

    源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前 ...

  3. ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...

  4. NET Core 模块化,多租户框架

    NET Core 模块化,多租户框架 Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core ...

  5. Orchard Core 模块化

    在上一篇文章谈到如何搭好一个基础的Orchard Core项目. 今天要尝试Orchard Core的模块化. 我自己的理解:一个系统可以分成一个个模块,这一个个模块是由一个个类库去实现的. 首先,在 ...

  6. ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...

  7. ASP.NET Core模块化前后端分离快速开发框架介绍之3、数据访问模块介绍

    源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前 ...

  8. NetModular 新年第一更以及升级指南(打造简单易用的.Net Core模块化快速开发框架~)

    先给大家拜个晚年,祝大家身体健康,远离肺炎~ NetModular开源已有一年,在这一年收到了很多建议,框架也变得越来越完善.这次更新包括了从去年年尾到现在所做的更改,感觉更改的内容还是蛮多的,所以记 ...

  9. Orchard Core一分钟搭建ASP.NET Core CMS

    Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...

随机推荐

  1. Mysql学习_02_mysql数据导入导出

    二.参考资料 1.MySQL 数据导出

  2. Linux下查找进程,kill进程

    1. ps命令用来查找linux运行的进程,常用命令: ps aux | grep 进程名:  eg:ps aux | grep admin 查找admin的进程 或者 ps -ef | grep j ...

  3. listen 67

    Pay What You Want May Deter Consumers Music, film and video game makers face a new online, digital w ...

  4. Sox语音转换的相关知识

    SoX-linux 里操作音频的瑞士军刀 Sox是最为著名的Open Source声音文件 格式转换工具.已经被广泛移植到Dos.windows.OS2.Sun.Next.Unix.Linux等多个操 ...

  5. CodeForces - 1005E2:Median on Segments (General Case Edition) (函数的思想)

    You are given an integer sequence a1,a2,…,ana1,a2,…,an. Find the number of pairs of indices (l,r)(l, ...

  6. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List

    原题链接在这里:https://leetcode.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/ 题目: C ...

  7. ACM学习历程—HDU5269 ZYB loves Xor I(位运算 && dfs && 排序)(BestCoder Round #44 1002题)

    Problem Description Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he ...

  8. hdu 4609 3-idiots —— FFT

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4609 算不合法的比较方便: 枚举最大的边,每种情况算了2次,而全排列算了6次,所以还要乘3: 注意枚举最大 ...

  9. AI-Info-Micron-Insight:Intelligence Accelerated™

    ylbtech-AI-Info-Micron-Insight:Intelligence Accelerated™ Intelligence Accelerated™ Micron Insight 大会 ...

  10. redis和memcache的比较

    1.数据类型支持不同 与Memcached仅支持key-value结构不同,Redis支持的数据类型更丰富,同时支持list.set.hash等数据结构的存储: 2.内存管理不同 在Redis中,并不 ...