K2 blackpearl中SmartObject
有人认为SmartObject可以被认为是SOA的一种实现,但之后观点又有所改变:
- SmartObject不完全等同于SOA,虽然它实现了很多SOA的理念-自我管理、安全、日志、可被发现、可维护、异常处理、扩展性、可行性、事务支持、互操作性(计算机之间的沟通能力)、可测试等。
- 可以这么认为SmartObject达到了SOA实现成熟度的第2级(总共有5级)。
- 企业可能会投资实现更高成熟度的SOA,而不仅仅是SmartObject。
SmartObject面世前后的差异
在K2.net 2003中,当我们要同外系统交互数据,我们必须在event生成并修改代码。在Blackpearl中,实现这个功能,我们不需要生成代码了,我们实现的方式是“声明”-告诉工具我们要通过SmartObject与外部系统交互。只需要简单的以拖拉的方式就可以通过SmartObject与外部系统交互,不需要代码。
K2 blackpearl关于SmartObject的解决方案
- Blackpearl引用了SmartObject解决了很多系统整合的问题;
- SmartObject提供的功能包括:
- 开发人员能在流程定义中用熟悉的ADO.net的方式SmartObject,同时也可以在报表中使用;
SmartObject在K2 blackpearl扮演着流程数据提供者这个非常关键角色,整个K2 blackpearl平台中SmartObject无处不在
SmartObject Service:
1.提供与LOB系统交互的能力,并通过通用的接口对外暴露其数据
2.对外提供可执行的方法,通常是CRUD(Create, Read,Update,Delete)
3.类型必须在K2中注册,并且需要在K2 Workspace中创建实例
SmartObject:
1.一个类的定义:其成员(或称为数据)映射到SmartObject Service提供的方法
2.SmartObject能以可视化的方法在K2流程定义中使用,与外部系统交互
3.SmartObject提供了API,能被企业架构中的其它层面方便地使用
最后,SmartObject是数据访问层(Data Access Layer)的一种实现,SmartObject允许你定义和使用自定义的数据提供程式并通过SmartObject的统一界面向外提供功能。
K2 blackpearl产品中提供的SmartObject Service
K2已经提供了如下开箱即用(out of box,OOB)的SmartObject Service,包括:
?SmartBox
?SharePoint
?Windows活动目录(AD)-在定义流程时我经常使用到它
?K2 blackpearl-能更容易地使用K2内部数据,如流程SmartObject等
随着越来越多的人对K2 blackpearl的贡献,会有更多的SmartObject Service提供给我们。
结论
- SmartObject使你能更快地提供和实现K2的解决方案。比如,通过它我可以立即使用到AD、SQL Server等不同外部系统中的数据,实施时间大大缩短。从前我们实施项目的时间可以是以星期为单位的(因为需要大量时间构建数据存取层,这意味着大量的代码时间),现在我们的实施时间以天为单位就可以了。我可以用拖拉的方式在line rule、succeeding rule、preceding rule、email、destination rule、任何可配置的event向导中使用SmartObject,我甚至不需要代码就可以在流程中与外部系统整合。当然我也可以通过C#代码去使用SmartObject,SmartObject API非常清晰简明易懂,基本与使用.net标准的System.Data命名空间类似。
- SmartObject的另一伟大之外在于,它使得业务人员在定义流程的时候也可以通过它与各种外部系统交互,而业务人员无需也不需要知道后面的细节(数据来自于哪个外部系统、交互数据的方式…)。
- 目前在定义业务规则中使用SmartObject需要留意一个问题:SmartObject的方法可能返回非期望的值(无效的值),原因可能是业务人员在提供SmartObject方法的参数中包括了错误的值。
- 在项目的初期或POC中,把数据存贮在SmartBox中是OK的,但长远来说,我们可能不希望把数据存贮在SmartBox中。原因可能是:我们希望对数据的schema有更多的控制权(SmartBox是自动生成的,无法手工控制);我们(或客户)可能不希望所有流程中的数据都存贮在同一个SQL Server数据库中。
- 不要认为有了SmartObject就可以代替数据仓库(Data Warehouse)。没错,SmartObject提供了CRUD的操作,并且操作对象可以来源于不同的系统(SQL Server, Oracle,AD…)。但出于性能的考虑,如果我们在SmartObject中直接对两个数据量非常大的数据源进行了连接(join)匹配操作,我们失去指定join时所使用的Index的机会,这对性能可能会有极大的影响。所以在特定的场景下针对特定的需求(尤其是性能上的需求),让
SmartObject从数据仓库中取得数据是更好的做法。

浙公网安备 33010602011771号