JHRS开发框架之各子系统如何整合

JHRS开发框架之各子系统如何整合,这系列文章是介绍Prism应用的文章,转载自博客园,在最底部给出了原文链接,因在搭建WPF框架时参考了这些文章,并且使用的是.net 5了,遂将标题做了更改,但总的来说参考的这系列文章还是非常有帮助的。

上一篇说了客户端入口项目,这儿呢,就简单说下各模块是如何整合的,这个框架引入Prism的目的就是为了让WPF项目可以进行模块化应用程序开发,大型的系统客户端项目可以分而治之,由各个小组或者小团队配合一起开发,最终将所有模块集成起来就可以了,基本上彼此互不干扰;像HIS系统这种医疗行业的系统是由很多子系统组成,如门诊医生工作站,住院护士站,移动护理等等组成。

Prism各子系统如何整合

在这个WPF开发框架中应用了Prism将各子系统模块化,点击链接你可以了解更多的关于使用Prism库进行WPF的模块化应用程序开发的内容。

根据Prism模块化开发指南的文章,各个子系统要整合在一起的话,第1步:要在各自的类库里面定义一个中央类(central class,指模块初始化类),这个类实现 IModule 接口,第2步:然后再到入口程序处加载各子系统即可。

JHRS开发框架之各子系统如何整合
JHRS开发框架之各子系统如何整合

在加载子系统时,JHRS框架使用代码注册方式,即在系统启动时扫描整个程序集加载到内存里面,之后就可以被使用了。

接下入就通过代码来演示是如何让各个子系统整合在一起的。

创建WPF库(模块)并定义模块类

实际开发中,各个模块(或子系统)是单独创建一个项目类库来保存相关功能页面或窗体,在JHRS框架中的modules解决方案文件夹中,有三个WPF的库(JHRS.OutpatientSystem、JHRS.RegisterManagement、JHRS.SystemManage),分别表示3个子系统,创建新的模块后,第一件事情要做的就是编写一个中央类(central class,指模块初始化类)来实现 IModule 接口。

using Prism.Ioc;
using Prism.Modularity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JHRS.RegisterManagement
{
    [Module(ModuleName = "RegisterManagementModule", OnDemand = true)]
    public class RegisterManagementModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
        }
    }
}

注册模块

Prism向入口程序注册模块的方式有3种,或者说加载子模块的方式有:

  • 1、通过代码注册来加载
  • 2、使用XAML加载
  • 3、使用配置文件加载

如果手动通过代码注册的话,只需要一个一个模块注册即可,示例代码如下:

        protected override void ConfigureModuleCatalog()
        {
            Type moduleCType = typeof(ModuleC);
            ModuleCatalog.AddModule(new ModuleInfo()
            {
                ModuleName = moduleCType.Name,
                ModuleType = moduleCType.AssemblyQualifiedName,
            });
        }

而在实际项目中,可以通过反射的扫描目录程序集自动注册,这样就避免了随着子模块越来越多的情况下手动注册会编写大量的重复代码的问题,在框架中是这样注册的:

        /// <summary>
        /// 注册系统模块
        /// </summary>
        /// <param name="moduleCatalog"></param>
        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            var modules = AppDomainAllAssemblyFinder.FindAll<IModule>();
            foreach (var item in modules)
            {
                moduleCatalog.AddModule(new ModuleInfo
                {
                    ModuleName = item.Name,
                    ModuleType = item.AssemblyQualifiedName,
                    InitializationMode = InitializationMode.OnDemand
                });
            }
        }

上面的AppDomainAllAssemblyFinder类的源码可以参见github上面。基本上完成了上面的步骤就可以把各子系统注册到入口程序里面去加载显示出来了,应用Prism来将WPF的各个子系统模块化是不是很简单呢?

写在最后

站在巨人的肩膀上,我们看得更远,但在这之前,最好了解一下这个巨人,不然遇到问题反而花费更多的时间来解决(踩坑);下一篇将介绍业务处理的功能了,这个框架是基于WPF的,开发也是遵循MVVM,因此所有的业务代码都是放在了ViewModel来处理。

如果你的ViewModel是一个光秃秃的类,这种设计方式并不是最佳的,因为业务做到后期会发现,咦,怎么那么多类似的代码了呢?这个时候出现类似问题就是在前期没有考虑怎样设计合理的ViewModel基类,那么相关的内容放到下一篇了。

本系列相关阅读

  1. WPF企业级开发框架搭建指南(启示录)
  2. JHRS开发框架之基础类库
  3. JHRS开发框架之第三方框架选型
  4. JHRS开发框架之WPF调用Web API封装
  5. JHRS开发框架之客户端入口项目
  6. JHRS开发框架之各子系统如何整合
  7. JHRS开发框架之怎样设计合理的ViewModel基类
  8. JHRS开发框架之公用组件用户控件的封装
  9. JHRS开发框架之建议遵循的一些建目录文件原则
  10. JHRS开发框架之WPF数据验证
  11. JHRS开发框架之ViewModel相互传参和弹框回传参的解决办法
  12. JHRS开发框架之踩坑记(终章)
User Review
0 (0 votes)
本站最新优惠

Namesilo优惠:新用户省 $1 域名注册-优惠码:45D%UYTcxYuCloZ 国外最便宜域名!点击了解更多

特别优惠:免费赠送 $100 Vultr主机-限时优惠!英文站必备海外服务器!点击了解更多

VPS优惠:搬瓦工优惠码:BWH3OGRI2BMW 最高省5.83%打开外面世界的一款主机点击了解更多

本文来自投稿作者:IT菜鸟,不代表江湖人士立场,如若转载,请注明出处:https://jhrs.com/2020/38044.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 × 1 =