BOS设计缘由(二)

原创 2007年09月29日 21:14:00
1.3  更好的组件解决方案
 
使用组件之后,我们可以有效地解决问题列表中的13。但是,如果将想像稍作深入,我们会发现事情还能做得更好。假设例程中的Device类有多种绘图风格,那么我们也许会想让最终用户能够在运行期选择不同的风格,或者说是能够动态切换。为Device添加不同的函数(方法)也许是一条途径,但这不仅改变了Device的原有设计,并且也不是一种具备扩展性的方式。如代码所述(C#):
 
interface Device
{
       void DrawStyleA (Shape shape);
       void DrawStyleB (Shape shape);
       // how about other possible styles?
}
 
由于已经了解了接口/实现分离结构,我们很自然的会想到更好的办法:保持原有Device不变,而提供多份不同绘图风格的实现。这实际上是我们在引入组件技术后已经具有的能力。
 
唯一的问题在于,我们现在还无法动态切换组件的不同实现。好在这是一个典型的动态需求,因此并不难解决:只需要引入一个管理器便可。这个管理器的功用是接管组件创建,并对外提供组件实例。由于管理器本身也是在运行期存在的一个对象,因此它可以动态的改变自身内部对组件的创建方式。如此一来,客户代码也就可以完成对同一组件的不同实现的切换。此外,这个管理器不能僵化,它应该允许我们控制何时使用组件的何种实现。这需要它对外提供除创建组件之外的其它方法。
 
代码能够最好的说明问题。假设管理器命名为Center,则其代码大致如下:
 
class Center
{
       public void Register (component identifier, component dll name ) {…}
       public void Create (component identifier) {…}
}
 
而客户代码得以这样动态切换不同绘图风格的Device实现:
 
class Program
{
       static void Main(string[] args)
       {
              …
              Center center = new Center();
             
              // Style A方式绘图
              center.Register( component identifier for Device, dll name that contains Device ImplA);
              Device dev = center.Create( component identifier for Device );
              dev.Draw( rect );
              dev.Draw( circle );
 
              // Style B方式绘图
              center.Register( component identifier for Device, dll name that contains Device ImplB);
              dev = center.Create( component identifier for Device );
              dev.Draw( rect );
              dev.Draw( circle );
       }
}

 

 

本文为BOS(Basic Object System)相关文档。BOS是一个通用软件框架。BOS源码可在下面链接下载:
http://sourceforge.net/projects/bos-code

 

BOS项目练习(项目概述,环境,页面[easyUI,Ztree],数据库PowerDesigner)

1.    项目概述 1.1   项目背景介绍 BOS(Bussiness Operating System)-----业务操作系统  本项目物流BOS项目分为基础设置、取派、中转、路由、报表部...
  • scholar_man
  • scholar_man
  • 2016年06月20日 14:08
  • 894

BOS开发部分问题解决办法

问题12:如何修改F7 字段所关联的基础档案 在一般情况下,在BIM 视图对单据新增F7 字段时,就可以关联到想要的基础档案或其它视图。但是,当需要关联一些不存在业务单元(即*.bizunit 文...
  • u011055617
  • u011055617
  • 2017年04月12日 18:41
  • 441

框架 day47 BOS项目练习1(项目概述,环境,页面[easyUI,Ztree],数据库PowerDesigner)

框架 day47 BOS项目练习1(项目概述,环境,主页[easyUI,Ztree],数据库PowerDesigner)
  • opopopwqwqwq
  • opopopwqwqwq
  • 2016年06月06日 22:25
  • 2735

百度对象存储BOS(Baidu Object Storage)进行冷存储数据备份

最近有需求就是冷存储数据进行异地灾备,同时为了更多的节省本地的存储成本,维护成本,人力资源等等,选择使用相对更为优惠的百度对象存储来进行备份数据,BOS产品介绍:BOS介绍,为了快速的,批量的上传文件...
  • lavorange
  • lavorange
  • 2016年02月06日 13:18
  • 1415

EAS BoS 业务单据基础模板的扩展

在这里,我以我实际创建的多分录业务单据模版为实例,简单介绍一下怎么对EAS Bos的系统模版进行扩展。扩展需求,实现单据的审核、反审核操作。同时对于在工作流程的单据不能进行修改、删除等操作。   ...
  • h249059945
  • h249059945
  • 2013年08月01日 16:49
  • 2757

BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)

内容: 1、提供新的json文件,修改系统菜单(加入工作流的菜单) 2、流程定义管理(查询、部署流程、查看png流程图片) 3、流程实例管理(查询、查看运行状态) 4、将bos...
  • scholar_man
  • scholar_man
  • 2016年06月20日 15:43
  • 843

金蝶BOS中Edit编辑界面和List叙事薄界面的常用方法简介。

EditUI中的代码 public class MyBillEditUI extends AbstractMyBillEditUI   {       public MyBill...
  • tanrt
  • tanrt
  • 2016年08月11日 14:50
  • 2048

金蝶BOS二次开发入门:常用类说明、代码调用过程

================================常用类说明================================= 第一个:IPurOrder 作为创建,更新及其他操...
  • qiaqia609
  • qiaqia609
  • 2013年04月02日 23:26
  • 7041

金蝶Bos的报表跟过滤条件

报表的显示界面代码如下:/** * output package name */ package com.kingdee.eas.custom.client;import java.awt.eve...
  • qq_33524771
  • qq_33524771
  • 2017年05月08日 15:33
  • 268

《自顶向下法》学习笔记——第三章:运输层

第三章 运输层 1、概述和运输层服务 0)概述:     *逻辑通信:         a)运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能;      ...
  • Mailzyw
  • Mailzyw
  • 2017年01月23日 19:23
  • 346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BOS设计缘由(二)
举报原因:
原因补充:

(最多只允许输入30个字)