R2

每一天都是美好的……

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  16 随笔 :: 0 文章 :: 134 评论 :: 0 引用

2011年11月10日 #

现在的系统越来越庞大复杂,对系统进行拆分,让各个独立模块各干各的事,已经是现有大型系统普遍采用的解决方案,美其名曰SOA,说的狭窄一点,就是原来是本地调用的,现在变成了远程调用,于是乎,各种远程调用的方案冒出来了,Remoting、WCF、REST等等,这些名词的堆积起来,让开发者有点不知所然,要花很多时间去理解和消化这些概念,而对于真正的业务编码却花不了这么多时间;为何不让这些细节隐藏起来,让远程调用如同本地调用一样方便简单呢?让中间的细节,比如通讯方式是TCP还是HTTP,序列化是SOAP还是JSON,性能效率、负载均衡等等问题,都交给架构师、框架设计师去处理吧,我们只需要关心自己的业务实现就可以,这个愿望很简单吧。

我们设想有这么个服务,我们把它看成是.NET里的接口, 如下代码所示:

1 namespace ClassLibrary1
2 {
3     public interface IClassService
4     {
5         string HelloWorld();
6     }
7 }  

这个接口定义在ClassLibrary1.dll中,我们期望这么去调用:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using ClassLibrary1;
 5 using HTB.DevFx.Esb;
 6 
 7 namespace ConsoleApplication2
 8 {
 9     class Program
10     {
11         static void Main(string[] args) {
12             var svr = ServiceLocator.GetService<IClassService>();
13             Console.WriteLine(svr.HelloWorld());
14             Console.ReadLine();
15         }
16     }
17 }

以上代码定义在ConsoleApplication2.exe中。是不是很简单,我们是调用者,没必要关心谁是接口的实现者,交给IoC好了。至于这返回的svr是远程对象还是本地对象,我们更无需关心了。只管调用好了。

 

当然了,在具体运行时,总该有一个实现者来实现接口吧,但以上代码找不到谁实现了这个接口。我们把实现这个接口的代码定义在CosoleApplication1.exe中,如下:

 1 using System;
 2 using ClassLibrary1;
 3 using HTB.DevFx.Remoting;
 4 
 5 namespace ConsoleApplication1
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args) {
10             RemotingHelper.RemotingServiceInitialize();
11             Console.WriteLine("Ready....");
12             Console.ReadLine();
13         }
14     }
15 
16     internal class ClassServiceInternal : IClassService
17     {
18         public string HelloWorld() {
19             return DateTime.Now.ToString();
20         }
21     }
22 }

 看,我们有一个实现,而且是internal的,这里稍微解释下Main函数里做的事情,就是让ClassServiceInternal以服务的形式发布出去,更具体的留待后文解释。

好了,我们现在有实现者了,那怎么让调用者调用我们的实现者呢,总不能让ConsoleApplication2.exe引用ConsoleApplication1.exe吧,再说了,实现类是internal的,引用了也不能直接调用。既然IClassService都已经按服务的方式发布出去了,我们只需要远程调用就可以啦,让IoC帮我们吧,我们期望我们的IoC配置也需要尽量简单,所以在ConsoleApplication2.exe.config中,我们配置如下:

 1 <?xml version="1.0"?>
 2 <configuration>
 3     <configSections>
 4         <section name="htb.devfx" type="HTB.DevFx.Config.ConfigSectionHandler, HTB.DevFx.BaseFx" />
 5     </configSections>
 6 
 7     <htb.devfx>
 8         <objects configSet="{tag:'object'}">
 9             <object name="ClassServiceClient" type="ClassLibrary1.IClassService, ClassLibrary1" mapTo="http://localhost:8296/classService.rem" builder="@RemotingObjectBuilder" />
10         </objects>
11     </htb.devfx>
12 </configuration>

如上配置,我们期望我们的接口IClassService映射到远程服务接口http://localhost:8296/classService.rem上,这个远程地址是ConsoleApplication1.exe发布出去的。很直观很简单。当然,我们可以把它映射成本地实现,比如本地的Mock实现,这样有利于单元测试和同步开发。

以上均得益于基于配置的IoC框架DevFx,DevFx让我们调用服务如此简单(是不是有广告的嫌疑?) 

具体原理留待后文讲解。

以上代码下载:测试代码 

有关DevFx的更多细节:http://devfx.codeplex.com/ 

 

posted @ 2011-11-10 11:38 R2 阅读(1737) 评论(6) 编辑

2008年7月7日 #

今天想在项目中使用JQuery,在页面内嵌入
<script type="text/javascript" src="jquery-1.2.6.js" />
却发现无论如何,JQuery都不工作,调用jQuery.noConflict();也无效果
后来使用这样的嵌入方式,JQuery才正常。无语。。。
<script type="text/javascript" src="jquery-1.2.6.js"></script>


posted @ 2008-07-07 18:10 R2 阅读(1961) 评论(4) 编辑

2008年5月18日 #

摘要: 在UpdatePanel中上载文件使用AjaxUploadHelper时发生500错误的粗浅解决方法。阅读全文
posted @ 2008-05-18 18:04 R2 阅读(3128) 评论(16) 编辑

2007年11月30日 #

DevFx.NET开发框架,是自己工作几年来沉淀下来的作品,在国内几家大网游公司内部系统使用,效果良好,希望对大家有用,不用的话看看代码也不错啊,自认为在设计上有不俗的表现。本着知识共享的精神,特在此宣传一下:P

DevFx.NET开发框架:具有配置、日志、异常、缓存、权限控制等各业务通用的多层统一开发框架,为业务管理系统的开发提高了速度和效率

重点在权限控制,很灵活,以后有空会写些专门的文章来介绍。

地址:
http://www.codeplex.com/devfx/
http://devfx.net
posted @ 2007-11-30 15:24 R2 阅读(8527) 评论(81) 编辑

2004年12月19日 #

   今天已经下载了,在装,好像安装失败,在看看先……,是标准版的!.netfx版本为2.0.41202
posted @ 2004-12-19 18:18 R2 阅读(1581) 评论(12) 编辑

2004年9月17日 #

摘要: 收益不少,也不多,可能自己的水平不够吧!阅读全文
posted @ 2004-09-17 13:36 R2 阅读(589) 评论(0) 编辑

2004年7月27日 #

摘要: Pattern Tips 之五作者:温昱感谢:《设计模式》一书的作者Gamma,Helm,Johnson和Vilssides,译者李英军等----------------------------------说明----------------------------Builder,Visitor,Observer,Mediator。它们都是Behavioral Patterns(在此认为Creat...阅读全文
posted @ 2004-07-27 09:51 R2 阅读(452) 评论(0) 编辑

摘要: Pattern Tips 之四作者:温昱感谢:《设计模式》一书的作者Gamma,Helm,Johnson和Vilssides,译者李英军等----------------------------------说明----------------------------Composite,Decorator。它们都是Structural Patterns,它们的关系如下图所示:------------...阅读全文
posted @ 2004-07-27 09:51 R2 阅读(376) 评论(0) 编辑

摘要: Pattern Tips 之三作者:温昱感谢:《设计模式》一书的作者Gamma,Helm,Johnson和Vilssides,译者李英军等----------------------------------说明----------------------------Abstract Factory,Factory Method,Prototype。它们都是Creationall Patterns,...阅读全文
posted @ 2004-07-27 09:49 R2 阅读(476) 评论(0) 编辑

摘要: Pattern Tips 之二作者:温昱感谢:《设计模式》一书的作者Gamma,Helm,Johnson和Vilssides,译者李英军等----------------------------------说明----------------------------Template Method,Strategy,State。它们都是Behavioral Patterns,它们的关系如下图所示:-...阅读全文
posted @ 2004-07-27 09:49 R2 阅读(430) 评论(0) 编辑