原文首发:
源码地址
GitHub: https://github.com/iamoldli/NetModular
演示地址
地址: http://118.24.75.170:6220/
账户: admin
密码: admin
前端框架演示地址 (临时)
地址:
账户: 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://www.cnblogs.com/oldli/p/10895001.html