ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇
源码地址
GitHub:https://github.com/iamoldli/NetModular
演示地址
地址:https://nm.iamoldli.com
账户:admin
密码:admin
前端框架演示地址(临时)
地址:http://nm.demo.iamoldli.com/index.html
账户:admin
密码:admin
目录
我想要的模块化
1、采用前后端分离。
2、将业务拆分成独立的模块,后端代码打包并发布到公司内部的NuGet包管理平台,前端代码打包发布到公司内部的NPM包管理平台。
3、项目中用到了哪个模块,直接通过包的形式安装对应的包。
4、开发人员只需要关心自己负责的模块,不需要知道依赖的业务模块代码逻辑。
项目架构图
模块化原理
实现模块化首先要解决的就是如何将多个模块集成到一个系统里面,因为我们用的是WebApi,也就是说要解决怎么把每个模块的控制器注册到系统中。好在ASP.NET Core提供了对应的功能,可以让我们很方便的实现这个效果,那就是ASP.NET Core 中的应用程序部件,它能够让我们动态的从一个程序集中发现并加载我们需要的控制器
// create an assembly part from a class's assembly
var assembly = typeof(Startup).GetTypeInfo().Assembly;
services.AddMvc()
.AddApplicationPart(assembly);
// OR
var assembly = typeof(Startup).GetTypeInfo().Assembly;
var part = new AssemblyPart(assembly);
services.AddMvc()
.ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part));
需要注意的是,在系统启动的时候,ASP.NET Core默认会自动从入口程序集开始,遍历所有的依赖程序集并添加系统中。
var entryAssembly = Assembly.Load(new AssemblyName(entryAssemblyName));
var assembliesProvider = new ApplicationAssembliesProvider();
var applicationAssemblies = assembliesProvider.ResolveAssemblies(entryAssembly);
foreach (var assembly in applicationAssemblies)
{
var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
foreach (var part in partFactory.GetApplicationParts(assembly))
{
ApplicationParts.Add(part);
}
}
因为所有模块都是通过包安装到项目中的,所有模块都是有依赖的,也就不需要我们手动添加了。
使用代码生成器快速开发
基本上每一个框架都会提供代码生成器的功能,NetModular
也不例外,与别的代码生成器不同,NetModular
的代码生成器是作为一个模块存在的它可以集成到任何项目当中。
大部分代码生成器都是根据先创建数据库,在根据数据库来生成代码,而NetModular
的代码生成器则是在线创建项目、实体、属性等,然后根据这些数据生成代码以及数据库文件。
具体的不在演示,大家有兴趣的话可以访问上面的Demo地址自己体验一下~
结尾
这边文章只是简单做个介绍,后续希望自己能够写一个系列的文章来详细的讲解基础框架的各个模块、前端框架模块以及已有的业务模块。
原文首发:https://iamoldli.github.io/2019/05/20/net-core-mo-kuai-hua-kai-fa-kuang-jia/1-kai-pian/
最新文章
- css:子元素div 上下左右居中方法总结
- 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
- 【codevs1743】 反转卡片
- Android数据存储-文件操作
- 启动页面设置,icon图标设置
- 【转】《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误
- 在windows 、linux下读取目录下所有文件名
- $().change事件
- 改动file header (測)
- Lua中的require(转)
- python 调用 bash (python 调用linux命令)
- Android OpenGL ES(八)----纹理编程框架
- ansible playbook实践(三)-yaml文件写法
- 小程序--scroll-view的横向滑动无效
- [Linux]CentOS与终端破墙
- 隐马尔可夫模型HMM(二)概率计算问题
- aptana studio 使用技巧整理
- Python 入门基础9 --函数基础2 实参与形参
- Servlet笔记7--HttpServletRequest介绍
- Servlet学习(一)
热门文章
- spark_load csv to hive via hivecontext
- 四则运算 calc()
- IE浏览器与非IE浏览器JS日期兼容性问题处理
- 从零开始的全栈工程师——js篇2.13(案例存放:三重数组渲染)
- Shape详解
- linux设置history历史记录
- [opencv3.2cmake error ] sys/videoio.h no such file or directories
- python语法之一
- 访问mongo数据库报错
- warning: remote HEAD refers to nonexistent ref, unable to checkout.解决