Quartet Lounge Team 2006
A dedicated team on the .Net open source frameworking.
posts - 10,  comments - 64,  trackbacks - 0

Sloth 简介(二)

 

首先,谢谢大家的关注,为了让大家进步了解Sloth,我们将会在尽快上传介绍文档,
并逐步整理发布
Sloth的源代码和一些辅助文档;

上一篇文章中只是简单介绍了Sloth的一些功能,在这篇文章中,我们将具体介绍Sloth
的一些操作;

相关链接:

     关于我们的 OpenSource 的想法(一)

     Sloth 简介(一)

组装业务

 

 

1.            为什么要使用组装业务

在拥有 Sloth 之前我们需要完成一个业务逻辑时一般采用的习惯模式是——将所有符合该
业务使用的相关类以
reference 的模式包含在这个业务包(以一个动态链结库或一个解决方案
中的项目存在)中,整体编译——这能迅速满足当前实现业务逻辑的需要,快速生成需要部
署的业务,在一定程度上使程序员的步进跟踪调试变得简单。

看起来不错,是吗?那么再让我们深入的想想下面的几个问题:

 

  • 程序员交付给测试人员的代码相互交织,测试工作的颗粒性如何有效保证?
  • 如果业务逻辑所引用的底层库不得不重构,需要重新提交给测试人员多少代码?
  •  如果测试人员检测出 bug,如何界定这个 bug 源是底层提交的数据性错误还是业
    务逻辑本身的错误?
  •  如果是一个大的解决方案,我们在开发阶段需要整合编译多少次?
  •  如果个别模块版本更新,我们需要整合编译多少次?我们又需要重新发布多少已
    编译模块?

 

传统模式是紧密耦合的,项目后期由于业务需求变动——很不幸,这样的变动往往无法
避免——所需要的修改本身涉及的面很可能非常广,甚至异常复杂。这造成仅仅处于开发
阶段时,整个项目的可维护性和可管理性就无法保证!项目可控性的急剧下降,不仅是开发
时间的延长,工作量更会快速增加!

是否可以设想,如果只是在表示层申明一个对业务调用的别名,而不用具体处理业务是
怎样完成的,一旦发生重构性的修改,除非是对业务的重组,表示层也不会发生变动!于是,
我们仅需要着手于业务组件的细化,通过配置文件,就可以进行业务的调整。

下面让我们看看Sloth的处理。

Sloth与业务组件的通讯依赖于一个 Xml 配置文件(ControlBus.xml)进行交互,这个文件
中记录了需求管理者和软件设计师对业务过程的配置信息。就是说,改变了
Xml 中指定业
务的配置过程顺序,同时也会改变
Sloth对该业务逻辑的执行效果。下一节,将有一个例子来
说明
Sloth的处理模式。

2.            如何使用组装业务

示例业务:客户端程序录入个人基本信息及部门名称,系统自动获得“部门名称”对应
的部门编号,最后将个人信息及部门编号保存到数据库;

首先编写服务程序,分别实现两个业务逻辑:

Ø        个人信息保存:

public class ExamplePersonnel

{

    ……………………..

        
/// <summary>

        
/// 根据录入信息产生合适的sql语句

        
/// </summary>

        
/// <param name="deptNo">部门编号</param>

        
/// <param name="name">职员姓名</param>

        
/// <param name="sex">性别</param>

        
/// <returns></returns>


        
public string SavePersonnel(int deptNo, string name, string sex)

        
{

            
///构造sql

            
string result = null;

            
try

            
{

                result
="insert into xxx (deptNo,name,sex) values ("+deptNo.ToString()+",'"+name+"',"+"'"+sex+"')";

            }


            
catch

            
{

            }


            
return result;

        }


}



Ø        根据部门名称获得部门编号

public class ExampleDept

    
{

        ……..

        ……..

        
/// <summary>

        
/// 根据指定的部门名称查找该部门的编号

        
/// </summary>

        
/// <param name="deptName">部门名称</param>

        
/// <returns></returns>


        
public int search(string deptName)

        
{

            
///根据指定的部门名称查找该部门的编号

            
int result = 0;

            
try

            
{

                DataRow[] searchRow 
= deptTable.Select("deptName" + "'" + deptName + "'");

                
if (searchRow.Length==1)

                
{

                    result 
= int.Parse(searchRow[0]["deptNo"].ToString());

                }


 

            }


            
catch

            
{

            }


            
return result;

        }


}


  以上,我们完成了业务组件的编写,当然我们需要一个通用的数据库操作组件,类似于
下面的结构(业务层与数据层同样是断耦的!)

public class DataAccess

    
{

        
public DataAccess()

        
{

        }


        
/// <summary>

        
/// 执行传入的SQL语句,操作成功返回true,否则返回false;

        
/// </summary>

        
/// <param name="execSQL"></param>

        
/// <returns></returns>


        
public bool Execute(string execSQL)

        
{

            
bool result = false;

            
try

            
{

                
//这里写保存数据的动作;

            }


            
catch

            
{

            }


            
return result;

        }


    }


 

业务组件及数据操作组件都有了,可是我们并没有完整的实现业务逻辑,
Sloth下,业务方法的组合是很简单的事:

打开Sloth的配置工具,首先将编写的业务组件(只需要dllexe等文件)
添加到Sloth中,如图
这时就能在配置工具的[注册业务组件]下看到这个业务组件了;


双击这个业务组件,就可以看到组件中包含的几个类:


     我们看到这个业务逻辑涉及到三个必要的方法,
SavePersonnel需要的是部门
编号而不是部门名称,所以我们在执行
SavePersonnel方法前,必须先得到部门编号,
也就是说,我们执行的顺序应该是先使用
search方法得到部门编号,并将部门编号
传递到
SavePersonnel中构造SQL语句,最后,构造好的SQL交由数据操作方法
Execute去执行,完成整个业务逻辑;

配置业务逻辑流程如图:

2.1 设置(SavePersonnel)方法的参数来源及下一节点

如图所示:SavePersonneldeptNo参数来源于search方法的返回参数 


         2.2
整个流程的配置图(图形界面):

     
       
业务逻辑配置完成后,可自定义虚拟业务名称,例如SavePersonInfo。虚拟
业务的配置信息保存于配置文件中(
ControlBus.xml),Sloth将根据此配置文件
来调用业务组件,您甚至可以直接修改配置文件来更改、重组业务。

接下来,我们看看客户端怎么调用这个业务:

整个虚拟业务返回值为最后一个方法Excute的返回值(Bool类型),所以,我们
的客户端代码就应为
:

 

//目前sloth使用Object[]传递参数。

                            
object[] parameters =new  object[3];

                parameters[
0]="QuartetLounge Team";

                parameters[
1]="QuartetLounge";

                parameters[
2= "Man";

                
//调用组合函数

                
bool result = targetSloth.Invoke<bool>("SavePersonInfo", parameters);//只需要调用我们自定义的虚拟业务名

                
string strCaption = null;

                
if (result)

                
{

                    strCaption 
= "保存成功";

                }


                
else

                
{

                    strCaption 
= "保存失败";

      }


   

 

              这样就可以完成虚拟业务的调用了.这时一旦发生业务变化,我只需要修改业务逻辑
配置
;如果发生了业务重构,也只需将变动的业务组件重新拷贝覆盖以前的业务组件即可。

至于事务控制,目前Sloth支持分布式事务控制(DTS,但是默认关闭,需要在
配置工具中做相应设置即可。以后将详细讲解。

 

3.            目前存在的不足

3.1 . 组装业务的入口方法必须首先拖拉到图形配置页面;

3.2.     业务组合后,目前只能以最后一个方法的返回类型作为整个虚拟业务的返回
类型
;

这些缺陷我们会在以后的版本中逐步完善,也希望大家都来参与或提出建议;

 后话

    最后,QuartetLounge Team感谢大家的关注,我们将尽快发布更详细的介绍文档及源代码。
近期还将发布演示视频。希望大家多提建议。

posted on 2006-10-24 18:04 QuartetLounge 阅读(542) 评论(9)  编辑 收藏 网摘 所属分类: Core Framework

FeedBack:
2006-10-24 19:13 | 大理段氏[未注册用户]
很关心一点: 性能怎么样?
想法非常吸引人。
关注.........

  回复  引用    
#2楼[楼主]
2006-10-24 19:59 | QuartetLounge      
@大理段氏
谢谢你的关注!
我们在2个项目的开发中都使用了Sloth,没有感觉到性能上出现什么问题!我们会尽快发布代码,让大家都来试试!

  回复  引用  查看    
2006-10-24 21:30 | neuhawk      
好象跟我做的差不不多,不过,我用castle做IOC,也没有图形操作界面.
但是作了个UI层的摆放界面.

  回复  引用  查看    
#4楼[楼主]
2006-10-24 21:54 | QuartetLounge      
@neuhawk
谢谢你的关注;
Sloth不光是对本地服务,由于Sloth包含了远程服务通讯模块,所以在Sloth部署的业务组件,可以立刻部署到远程服务器(Agent)。而且Sloth适用于Web和WinForm的开发;我们会在下篇介绍中介绍Sloth的远程服务;估计等下篇文章出来Sloth也就该发布开源版本了;
再次谢谢你的关注;

  回复  引用  查看    
2006-10-24 22:34 | withjun[未注册用户]
1、
2.2的图形看起来挺像Visio的
呵呵
2、
配置工具是不是通过图形的拖拉来生成虚拟业务的方法调用?还是通过实现了各组件(类)的调用顺序的安排来设置具体的调用?
呵呵……代码是不是自动生成的?
3、
总感觉好像ControlBus.xml应该写点出来看看
4、
说真的,还真有点看不明白:SavePersonInfo 这个方法是从哪里来的
5、
现在的SavePersonInfo的调用返回值是bool ,如果另有一个同名的SavePersonInfo的重载后返回int(保存后的ID号)按照这样的调用不知道会怎么样实现呢?
6、
虽然代码也很详细了,但总还是感觉好像欠缺了些,呵呵……
如果LZ能多说说本系统的调用逻辑就更完美了
7、
最后嘛,当然是期待着开源了
哈哈……

关注ing ……

  回复  引用    
#6楼[楼主]
2006-10-24 22:44 | QuartetLounge      
@withjun
1.配置工具结合了visio
2. 通过图形拖拉实现虚拟业务配置,但是入口函数(也就是第一个需要执行的方法)需要首先放倒图形绘制面板中;
3.ControlBus.xml 文件格式,随后补发上来;谢谢你的提醒;
4.是配置虚拟业务保存时提示自定义的虚拟业务名称
5.虚拟业务目前不支持重载
6.调用逻辑,这个会在设计文档中体现
7 我们还在做后期的调整,调整完成后,随即发布




  回复  引用  查看    
2006-10-24 23:08 | neuhawk      
十分关注,也希望能够一起完善,每个公司都有1-2个大同小异的框架,做重复劳动.

  回复  引用  查看    
2006-10-25 07:35 | sunwaywei      
继续关注中,期待源码早日发布!
  回复  引用  查看    
2006-10-28 12:45 | hl13571
支持,以往我们都把这部分功能集成到其他的框架里了,希望楼主把相关的文档整理好,与程序一起发布!
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 538654




相关文章:

相关链接:
基于 .Net Framework 2.0 的 Runtime 业务组件管理框架完成! QQ讨论群: 27505400 演示程序及Sloth源代码发布 20061026 | QuartetLounge

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

与我联系

搜索

 

常用链接

留言簿

随笔分类(10)

随笔档案(10)

文章分类(3)

文章档案(3)

收藏夹(2)

Code_DownLoad

Time

  •    32
       16
       8
       4
       2
       1

我们的OpenSource发布

最新随笔

积分与排名

  • 积分 - 13789
  • 排名 - 3753

最新评论

阅读排行榜

评论排行榜