[mBean]的萌芽

最近公司要求把我们公司的任务可以外包,问我有没有好的方案。

如果要其他程序员的人来做我们内部的框架会导致了,内部的框架需要公布很多单元和逻辑,思路。其次要把我们的思路和规则强加给其他的程序员。加大了其他人员的上手难度。

带着这种问题把框架又进行了新一轮的优化。每每改进框架后都想丢弃掉之前的框架。心里安慰自己应该是思想上得到了升华。确实从最初的框架到mBean得到了很大的提升,从之前的带[shareCentre.bpl]到现在的[mBean]编写插件规则越来越领活,前一版本的框架要求都实现IPlugin,IPlugin里面定义了一些方法。[mBean]框架中插件只要求实现[IInterface]就可以成为插件。逻辑插件不要求语言,不要求带包。只要实现了接口都可以调用。现在想这应该是我终极版的的框架了……。以后只会在框架上面开发更多实用的接口了。

[mBean]的优点

不用带特定的bpl,就可以是插件,远离提示包需要进行编译的痛苦。

可以导出接口的dll都可以是制作插件。

不用带特定的bpl进行对象的共享。

不光是窗体才是插件,panel也可以是插件,TFrame也可以是插件。一个简单逻辑也可以是个插件。

干预代码最少,beanFactory.registerBean("xxx",Txxx);就可以注册插件。

可以将插件注册车单实例插件。怎么获取都只会创建一份beanFactory.registerBean('xxxx',TXXx).isSingleton := true;

获取方便,app.getBean("xxx"),就可以创建一个插件不用管插件在哪个DLL中。

绿色小巧,不用安装任何dpk,和ocx。

支持各种版本D(D7-XE5)。

[红色区域是不带包的DLL中的插件窗体]

[mBean]的来源

为什么JAVA比Delphi使用的人多,想想,JAVA模式比较固定,比如WEB有成熟的SSH框架和解决方案,让初学者容易上手,代码比较规范,相反Delphi开源东西太少,门派太多,门道太深,太多。

[mBean]借鉴Spring模式Bean模式,来管理插件。

[mBean]插件不限定编写模式,不限定继承关系,不强制带包。以一种包容心态来接收插件。

[mBean]的插件编写

在DLL中像beanFactory注册插件,插件对象实现IInterface就行了,编译出来的dll放到plug-ins目录下面就可以被beanManager.dll进行管理和调用。

调用时 appPluginContext.getBean('frameScript') 就可以返回一个接口,进行使用。

[mBean]的扩展协议

每个公司都有自己的主窗体模式,

有的主窗体要求子窗体嵌入tabSheet上面,

有的要求子窗体是mdi模式

每个软件开发公司都是 自己的方案和设计。

可以制度相应的协议和接口,来管理主窗体和子窗体直接的关系。

比如:

要求主窗体实现如下接口:

type
IMainForm = interface(IInterface)
['{69DDA539-DF48-441A-9149-229BF17C8E78}']
procedure closeQuery(const pvForm: IInterface; vCanClose: Boolean); stdcall; function Remove(const pvInstanceID: Integer): boolean; stdcall; procedure openModuleAsMDI(pvModuleFuncIndex:Integer); stdcall; procedure openModule(pvModuleFuncIndex:Integer); stdcall; end;

要求子窗体实现如下接口:

type
/// <summary>
/// 窗体插件
/// </summary>
IUIForm = interface(IInterface)
['{7E250C3C-331E-4732-AD05-F08CA1CA486A}']
procedure showAsMDI; stdcall; function showAsModal: Integer; stdcall; //关闭
procedure UIFormClose; stdcall; //释放窗体
procedure UIFormFree; stdcall; //获取窗体对象
function getObject:TObject; stdcall; //获取实例ID
function getInstanceID: Integer; stdcall;
end;

这些协议可以自己去定义,并去实现和遵守,这样就是[mBean]协议的扩展。

D2007, XE5进行过编译

[mBean]下载

http://url.cn/KdXMfu

[mBean]-Delphi框架,回归简单,自然。的更多相关文章

  1. PHP ORM框架与简单代码实现(转)

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

  2. 基于ThinkPHP框架的简单的后台管理系统

    版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:    

  3. 初识服务发现及Consul框架的简单使用

    初识服务发现及Consul框架的简单使用   1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...

  4. truffle框架的简单使用

    truffle 给大家介绍一下这个框架怎么使用,其实把这个框架就是你们看我之前有一个教程是教你们怎么用remix-ide来连接私有链,编译,配置合约,然后进行调用的,truffle其实就是把这个步骤放 ...

  5. python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用

    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...

  6. 框架Thinkphp5 简单的实现行为 钩子 Hook

    这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...

  7. Net系列框架-Dapper+简单三层架构

    Net系列框架-Dapper+简单三层架构 工作将近6年多了,工作中也陆陆续续学习和搭建了不少的框架,后续将按由浅入深的方式,整理出一些框架源码,所有框架源码本人都亲自调试通过,如果有问题,欢迎联系我 ...

  8. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  9. delphi 三层架构简单例子(经测试成功)

    delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...

随机推荐

  1. Nginx自定义404页面

    指定一个错误页面: error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } 指定一个url地址: ...

  2. docker build 指定dockerfile

    1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在的本地路径或一个URL(Git仓库地 ...

  3. ubuntu下安装迅雷thunder

    迅雷是windows xp下必装的下载工具,作为一款跨协议的下载软件,迅雷的下载速度极其强悍. 那么在ubuntu下能否安装迅雷呢? 到ubuntu中文论坛逛了一圈,发现有现成的wine-thunde ...

  4. git difftool 详解

    一.如何比较两个版本之间的差异 1.显示版本得到版本的commit id 2.执行difftool命令 按Y进行比较,我用的是DiffMerge这个软件对代码进行比较的 二.比较当前所修改的内容 gi ...

  5. Sql Server 在数据库中所有表所有栏位 找出匹配某个值的脚本(转)

    转自: http://blog.csdn.net/chenghaibing2008/article/details/11891419 (下面代码稍有修改,将要查找的内容直接作为参数传人,并且使用=而不 ...

  6. JavaScript HTML DOM 入门详解

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过 ...

  7. 构建高性能数据库缓存之Redis(一)

    一.Redis概述 1.1 什么是redis Redis是一个开源的用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key-Value数据库,根据DB-Engines.com站点月度排行的 ...

  8. “医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标 想做一个面对中小企业的专业上游软件供应商 台湾联发科技颠覆掉的是一个封闭的手机产业系统 解决方案,即AgileHIS.NET数字化医院基础方案

    “医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标   我们做中国医疗信息化行业之中的联发科 ---我们在医疗行业中的定位及目标 从我个人来讲,我从2001年到现在这10年之间基本上一直在 ...

  9. 【Android】Android屏幕状态操作

    目录结构: contents structure [+] 如何监听屏幕锁屏 如何实现手机屏幕在锁屏后继续运行 最近笔者在做一个功能,就是实现Android程序在锁屏后可以继续运行,笔者在网上查了一些资 ...

  10. 替换SQL字段中的换行符,回车符

    替换SQL字段中的换行符,回车符: 在富文本内容中通常会出现回车.换行内容.在sql数据库中这些回车.换行符,输出html后,表现为空格. 这里是在数据导出.导入中发现的,通常把回车.换行符找出来,用 ...