源码地址

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

演示地址

地址:https://nm.iamoldli.com

账户:admin

密码:admin

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

地址:http://nm.demo.iamoldli.com/index.html

账户:admin

密码:admin

一、目录

1、开篇

2、快速创建一个业务模块

3、数据访问模块介绍

4、模块化实现思路

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

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

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

2、代码生成器

约定优于配置是现在到处可见的一种开发原则,比如ASP.NET MVC中的HttpGetHttpPost等特性限制请求方式,比如控制器都以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抽象类

ProgramMain函数中,使用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、快速创建一个业务模块

ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块的更多相关文章

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

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

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

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

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

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

  4. .Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)

    NetModular是什么? NetModular不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现. ...

  5. ASP.NET WebApi+Vue前后端分离之允许启用跨域请求

    前言: 这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目.前端使用Vue,后端则是使用ASP.NET WebApi.在搭建完成前后端框架后,进行接口测试时发现了一个前后端分 ...

  6. .Net Core+Vue.js模块化前后端分离快速开发框架NetModular更新日志(2019-12-08)

    源码 GitHub:https://github.com/iamoldli/NetModular 码云:https://gitee.com/laoli/NetModular 欢迎star~ 文档 ht ...

  7. 基于Electron+.NET Core的前后端分离的跨平台桌面应用

    Web做界面比原生桌面界面开发速度真心要快很多,而且组件也多. 分析: 1..NET Core和Electron都是跨平台的. 2.NET Core做后端很方便,但是没有GUI,Electron做桌面 ...

  8. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路

    从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...

  9. DevOps 视角的前后端分离与实战

    本文作者:CODING - 廖红坤 前言 随着微前端.微服务等技术理念和架构的蓬勃发展,我们已经没必要去讨论为什么要前后端分离这种话题,前后端分离已成为互联网项目开发的标准模式.前后端在各自的领域发展 ...

随机推荐

  1. python_魔法方法(四):属性访问

    通常可以通过点(.)操作符的形式去访问对象的属性,也可以通过BIF适当地去访问属性,看个例子吧 >>> class A(): def __init__(self): self.x = ...

  2. python_魔法方法(三):__str__()和__repr__()

    使用python的魔法方法和time模块定制一个计时器的类 1.用time模块里的localtime()方法获取时间2.time.localtime返回struct_time格式3.表现你的类:__s ...

  3. PHP var_export

    var_export可以将一个数组转为一个字符串 不同于var_dump,var_export并不会输出数据的类型以及字符大小等,只会简单把数组的key跟value拼接成一个字符串 <?php ...

  4. JAVA四大特征:封装,继承,多态,抽象

    1,封装 将对象的属性和方法组合成一个独立的整体,隐藏实现的细节,并提供对外访问的接口. 封装的好处: (1):隐藏实现细节.好比你买了台电视机,你只需要怎么使用,并不用了解其实现原理. (2):安全 ...

  5. POJ 1556 E - The Doors

    题意:给定n堵墙,现在要你从(0,5)走去(10,5)的最短距离 思路:刚开始还想模拟,就是从(0,5)走,每次x向右一格,然后判断有没和线段相交就可以.但是它的们有可能是小数形式给出的,这样就GG了 ...

  6. 数据库用户被锁怎么办,报the passord logon

    –1.使用管理员用户登陆,查看用户状态: select username,account_status from dba_users; –2.修改用户状态: alter user base accou ...

  7. SpringMVC 返回实体对象时屏蔽某些属性

    SpringMVC 可以直接已JSON的结果返回实体对象,可是返回时是所有属性与属性值都会一并返回, 怎样才能屏蔽某些属性?方法很简单,只要在实体对象类中要屏蔽的属性值上加 @JsonIgnore 注 ...

  8. 会话跟踪之Cookie

    一:简介 Cookie主要用来存储用户信息,追踪用户会话.web客户端访问服务端直接采用的协议是Http,Http协议是一种无状态协议,无状态表现在不能够保留用户访问状态,无法记录用户信息.每一次的请 ...

  9. nginx配置文件语法高亮

    下载文件 nginx.vim https://vim.sourceforge.io/scripts/script.php?script_id=1886 安装 下载 nginx.vim 文件到 ~/.v ...

  10. NYOJ-596-谁是最好的Coder

    原题链接 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所以他 ...