源码地址

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、模块化实现思路

我想要的模块化

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/

最新文章

  1. css:子元素div 上下左右居中方法总结
  2. 基于存储过程的MVC开源分页控件--LYB.NET.SPPager
  3. 【codevs1743】 反转卡片
  4. Android数据存储-文件操作
  5. 启动页面设置,icon图标设置
  6. 【转】《深入理解计算机系统》C程序中常见的内存操作有关的典型编程错误
  7. 在windows 、linux下读取目录下所有文件名
  8. $().change事件
  9. 改动file header (測)
  10. Lua中的require(转)
  11. python 调用 bash (python 调用linux命令)
  12. Android OpenGL ES(八)----纹理编程框架
  13. ansible playbook实践(三)-yaml文件写法
  14. 小程序--scroll-view的横向滑动无效
  15. [Linux]CentOS与终端破墙
  16. 隐马尔可夫模型HMM(二)概率计算问题
  17. aptana studio 使用技巧整理
  18. Python 入门基础9 --函数基础2 实参与形参
  19. Servlet笔记7--HttpServletRequest介绍
  20. Servlet学习(一)

热门文章

  1. spark_load csv to hive via hivecontext
  2. 四则运算 calc()
  3. IE浏览器与非IE浏览器JS日期兼容性问题处理
  4. 从零开始的全栈工程师——js篇2.13(案例存放:三重数组渲染)
  5. Shape详解
  6. linux设置history历史记录
  7. [opencv3.2cmake error ] sys/videoio.h no such file or directories
  8. python语法之一
  9. 访问mongo数据库报错
  10. warning: remote HEAD refers to nonexistent ref, unable to checkout.解决