[开源项目-MyBean轻量级配置框架] 使用MyBean快速搭建分模块的应用程序(主页面的TAB)(DLL-MDI)

Mofen818 2014-05-20 08:48:46
加精
[概述]

抱歉由于上次开源比较匆忙,没有来的及做一个DEMO,里面也有些垃圾的文件没有及时清理。DEMO其实昨天晚上已经调通。相关说明文档今天晚上才说明好,欢迎大家继续关注和交流,和大家一起分享我10多年的管理软件框架开发经验,后续会完善更多相应的有用的插件,供大家直接使用。


[DEMO图片预览]






[MDI-DEMO-BIN文件说明]

编译好的文件打包存放于根目录下面,文件名为:MDI-DEMO-BIN.zip,采用XE5编译,使用标准控件,其他版本编译myBeanConsole.exe和plugin-demo-form工程就好,记得这两个工程需要带包,beanMananger.dll可以通用。不需要编译。

myBeanConsole.exe
--主控台EXE,包含主窗体(带包编译)

myBeanConsole.config.ini
--配置文件,包含是否使用缓存目录,是否预加载DLL,等配置

demoBeans.plug-ins
-- bean的配置文件,可以多个,有主配置文件指定目录(可以通配符),参考主配置文件说明

beanManager.dll
-- 框架核心DLL文件,由plug-ins-core\beanMananger提供,标志的Windows DLL文件,不需要带包编译,所有Delphi版本可以使用。

rtl190.bpl
vcl190.bpl
--XE5 运行包文件(由于使用XE5编译的)

plug-ins\plugin_form_demo.dll
-- DEMO DLL(带包编译),注册了aboutForm插件和demoPluginForm插件









[主配置文件说明]



主配置文件文件名: EXE文件名+config.ini,或者app.config.ini

[main]
;加载时插件缓存(放入临时目录)
;true时copy到临时缓存目录进行加载, false插件目录进行加载
;默认为true值
plug-ins-cache=1

;插件临时目录,支持相对路径(EXE目录的相对路径),绝对路径(c:\temp\
;默认为plug-ins-cache
plug-ins-cache-path=temp-files

;加载DLL在启动程序的时候
;默认为true
loadOnStartup=0

;加载bean配置文件目录(相对路径(EXE目录的相对路径),绝对路径(c:\config\*.*)
;没有配置时,直接加载DLL,从DLL中获取PluginID
;<none>时不加载任何DLL插件
beanConfigFiles=*.plug-ins,plug-ins\*.plug-ins,beanConfig\*.plug-ins



;加载文件时记录日志;
;默认为false, 为true时可以从日志文件(log\loadDLL_trace.txt)便于查看到哪个文件加载失败
traceLoadLib=1







[bean配置文件说明]

配置文件可以单个也可以多个,存放路径由主配置文件指定

beanConfigFiles=*.plug-ins,plug-ins\*.plug-ins,beanConfig\*.plug-ins

上面配置指定了根目录的*.plug-ins文件和plug-ins目录下的*.plug-ins文件…

这样便于多人协作编写模块,文件采用JSON格式。



格式与说明

{
list:
[
{
"id":"frame-core",
"pluginID":"frame-core", //如果与id一致可以进行忽略(同一个插件可以配置成多种bean)
"lib":"plug-ins\\plugin-demo-form.dll", //文件名<插件存放的DLL文件>
"singleton":true, //是否单件模式(比如远程数据访问插件,可以单件模式)
}
]
}



[plugin-demo-form源码分析]

工程文件(提供了插件的注册,也可以写到窗体文件的initialize部分)

library plugin_form_demo;

uses
SysUtils,
Classes,
uBeanFactory,
ufrmAbout in '..\..\Forms\ufrmAbout.pas' {frmAbout},
ufrmPluginForm in '..\..\Forms\ufrmPluginForm.pas' {frmPluginForm},
uBasePluginForm in '..\..\Service\uBasePluginForm.pas';

{$R *.res}

begin
beanFactory.RegisterBean('aboutForm', TfrmAbout);
beanFactory.RegisterBean('demoPluginForm', TfrmPluginForm);
end.

ufrmPluginForm.pas,很简单新建一个vclForm,然后把TForm改成了TBasePluginForm(实现了IpluginForm的窗体类)
type
TfrmPluginForm = class(TBasePluginForm)
mmo1: TMemo;
pnlOperator: TPanel;
btnCreateAsModal: TButton;
procedure btnCreateAsModalClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;




[MyBean交流]

考虑了下,还是新建个群,方便讨论

群:205486036

源代码地址

https://git.oschina.net/ymofen/delphi-framework-MyBean


原文地址:
http://www.cnblogs.com/DKSoft/p/3738029.html
...全文
3074 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
austin9972 2014-05-27
  • 打赏
  • 举报
回复
lyhoo163 2014-05-27
  • 打赏
  • 举报
回复
支持开源。。
sfasdg123 2014-05-26
  • 打赏
  • 举报
回复
支持一下楼主
iamduo 2014-05-26
  • 打赏
  • 举报
回复
带包编译 是不是以为着,对 Delphi 版本是有依赖的? 发布的时候,还需要带上一堆该版本的 bpl ?
一路随云 2014-05-24
  • 打赏
  • 举报
回复
菜鸟一枚暂时看不懂其作用。但是这么高大上的项目 还是要顶一下 。希望未来能用上此项目!
aniugee 2014-05-23
  • 打赏
  • 举报
回复
支持一下楼主
Mofen818 2014-05-22
  • 打赏
  • 举报
回复
今天把目录重新规划了一下 =========================================================== source 源码路径 source\DUtils Delphi可用的工具单元 source\frame-core <框架核心级别>MyBean框架核心单元<接口,工具类> source\plug-ins-core <框架核心级别>核心插件 source\frame-common <开发用户级别>MyBean插件用到的接口工具类 source\plug-ins-DEMO <开发用户级别>MyBean演示插件目录 BIN\ 插件的输出路径 *请注意 <框架核心级别>——留用于框架开发人员修改,为了方便框架升级,请不要进行修改 <开发用户级别>——用于开发插件使用,可以自己进行扩展
Reese_Mr 2014-05-20
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
Mofen818 2014-05-20
  • 打赏
  • 举报
回复
引用 1 楼 Avan_Lau 的回复:
支持开源、分享。推荐一个。 源码没有细看,但是看了特性介绍。建议多点丰富的插件化功能支持:比如支持读取dll提供的任何功能,读取一个插件并将这些功能命令罗列出来,作为服务以供主程序使用。
感谢版主推荐。 可以采取两种方式, 一种是直接加载DLL,读取DLL中的插件,但是这有个不好的地方是要在开始的时候加载所有的DLL, 一种是读取配置文件, 通过配置方式,可以进行预加载。而且配置方式比较灵活,透明,借鉴的spring 方式。
金卯刀 2014-05-20
  • 打赏
  • 举报
回复
支持开源、分享。推荐一个。 源码没有细看,但是看了特性介绍。建议多点丰富的插件化功能支持:比如支持读取dll提供的任何功能,读取一个插件并将这些功能命令罗列出来,作为服务以供主程序使用。
laoer_2002 2014-05-20
  • 打赏
  • 举报
回复

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧