.NET Core模块化
.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模块化的更多相关文章
- Orchard Core Framework:ASP.NET Core 模块化,多租户框架
Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core CMS ,介绍ASP.NET Core ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之4、模块化实现思路
源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前 ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- NET Core 模块化,多租户框架
NET Core 模块化,多租户框架 Orchard Core Framework:ASP.NET Core 模块化,多租户框架 上一篇编写Orchard Core一分钟搭建ASP.NET Core ...
- Orchard Core 模块化
在上一篇文章谈到如何搭好一个基础的Orchard Core项目. 今天要尝试Orchard Core的模块化. 我自己的理解:一个系统可以分成一个个模块,这一个个模块是由一个个类库去实现的. 首先,在 ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之3、数据访问模块介绍
源码 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin 前 ...
- NetModular 新年第一更以及升级指南(打造简单易用的.Net Core模块化快速开发框架~)
先给大家拜个晚年,祝大家身体健康,远离肺炎~ NetModular开源已有一年,在这一年收到了很多建议,框架也变得越来越完善.这次更新包括了从去年年尾到现在所做的更改,感觉更改的内容还是蛮多的,所以记 ...
- Orchard Core一分钟搭建ASP.NET Core CMS
Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...
随机推荐
- ffmpeg下载直播流
ffmpeg -i "http://www.xxx.com/test.flv" -c:v copy -c:a copy -bsf:a aac_adtstoasc output.mp ...
- redis实现分布式锁——核心 setx+pipe watch监控key变化-事务
如何设计一把分布式锁 我们用 redis 来实现这把分布式的锁,redis 速度快.支持事务.可持久化的特点非常适合创建分布式锁. 分布式环境中如何消除网络延迟对锁获取的影响 锁,简单来说就是存于 r ...
- linux进程学习-进程描述符的存储
当进程被新建时,内核会给进程分配一个8K的空间作为进程的内核堆栈.同时我们知道task_struct结构体也会被创建,但有意思的是,内核不会给task_struct单独分别空间,而是直接将其扔到8k的 ...
- hdu3518 Boring Counting[后缀排序]
裸的统计不同的重复出现子串(不重叠)种数的题.多次使用后缀排序要注意小细节.y数组在重复使用时一定要清空,看那个line25 +k就明白了 ,cnt也要清空,为什么就不说了 #include<b ...
- 发个IOCP的C++例子
IOCP的c++例子 IOCP这个东西连续关注了将近3年的时间,这个代码从哪里找到的已经忘了,下面是作者的信息.感谢他提供的代码! /*++ Copyright (c) 2004 模块名: iomod ...
- poj2356Find a multiple——鸽巢定理运用
题目:http://poj.org/problem?id=2356 N个数,利用鸽巢定理可知应有N+1个前缀和(包括0),因此其%N的余数一定有重复: 同余的两个前缀和之差一定为N的倍数,据此得出答案 ...
- Scala学习——泛型[T]的6种使用(初)
package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边 ...
- 兼容ie6,ie7,ie8,firefox,chrome浏览器的代码片段
hack实现方式和原理 #hacker{ color:red; *color:white; /*for ie6,ie7*/ *+color:blue; /*for ie7*/ _color:gray; ...
- 信息安全:Token
ylbtech-信息安全:Token Token(计算机术语) 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思. 1.令牌返回顶部 1.令牌 (信息安全术语) Token, 令牌,代 ...
- .NETFramework:StringBuilder
ylbtech-.NETFramework:StringBuilder 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken ...