<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Amar</title><subtitle type="text">做一个有想法的程序员</subtitle><id>http://feed.cnblogs.com/blog/u/56039/rss</id><updated>2011-02-13T16:00:31Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/56039/rss"/><entry><id>http://www.cnblogs.com/amar-yao/archive/2011/02/13/1953960.html</id><title type="text">SharpDevelop源码理解(1) 简介</title><summary type="text">真是太久没有写博客了。一年有余了吧。 在新的一年里就用SharpDevelop这个系列开始吧。SharpDevelop这个项目简单做个介绍，它是一个.Net领域著名的开源IDE，用C#语言编写。在.Net领域它的地位相当于Java领域Eclipse。为什么这么比呢其中最主要的原因就是SharpDevelop和Eclipse一样底层有着一个灵活的插件体系框架。但是不同的是SharpDevelop的这个底层插件框架是完全自己实现的。搞Java的都知道Eclipse在3.x的时候底层插件体系结构从JPF转移到了更灵活的OSGI上面。就是传说中的那个构建宝马车的内部软件控制系统的OSGI上。虽然Sha</summary><published>2011-02-13T15:55:00Z</published><updated>2011-02-13T15:55:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2011/02/13/1953960.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2011/02/13/1953960.html"/><content type="html">&lt;p&gt;&amp;nbsp; 真是太久没有写博客了。一年有余了吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 在新的一年里就用SharpDevelop这个系列开始吧。SharpDevelop这个项目简单做个介绍，它是一个.Net领域著名的开源IDE，用C#语言编写。在.Net领域它的地位相当于Java领域Eclipse。为什么这么比呢其中最主要的原因就是SharpDevelop和Eclipse一样底层有着一个灵活的插件体系框架。但是不同的是SharpDevelop的这个底层插件框架是完全自己实现的。搞Java的都知道Eclipse在3.x的时候底层插件体系结构从JPF转移到了更灵活的OSGI上面。就是传说中的那个构建宝马车的内部软件控制系统的OSGI上。虽然SharpDevelop的插件体系远没有OSGI强大，但是对于.Net领域的程序员仍然是个很好的参考。&lt;/p&gt;&lt;p&gt;&amp;nbsp; SharpDevelop的源代码可以从这里下载:&lt;a href="http://www.sharpdevelop.net/opensource/sd/"&gt;http://www.sharpdevelop.net/opensource/sd/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 记得刚入行时跟着我们技术总监在SharpDevleop上做企业级开发平台，当时还是1.x。转眼间SharpDevelop已经发展到了4.0。其中的大部分代码已经经过重构。并且多了很多有用的插件，这些东西都是以源代码的形式公布出来，真是令人激动。&lt;/p&gt;&lt;p&gt;&amp;nbsp; SharpDevelop的最核心部分其实就是一个插件树。界面上面的菜单和工具栏每一个功能都是一个插件，直接挂载于插件树上并通过Command模式与用户交互。其他的部分都是由插件组合而成。下载到SharpDevelop3.0的源代码编译通过后运行之，点击工具-&amp;gt;Addin Socut可以看到整个插件树的全貌：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/amar-yao/SD1.jpg" width="1212" height="508" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; SharpDevelop的核心代码部分主要是以下几个项目：&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/amar-yao/SD2.jpg" width="280" height="150" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 注意这个3.0的源代码，熟悉1.x的同志应该清楚最开始SD核心代码只有图中的前三个项目。后面的项目是从2.0开始重构时分离出来的。从命名上可以猜出个大概ICSharpCode.Widgets项目定义的是SD使用的一些界面控件。ICSharpCode.Dom项目应该是和源代码解析有关的(我也是猜的)。ICSharpCode.Sda从源代码内容能看出来主要是一些零碎的例如配置、日志、设置之类的小东西。ICSharpCode.SharpDevelop项目其实也是一个插件项目它是SD系统中的核心插件，根目录下有一个.addin的标准xml文件。这个文件是SD的插件定义文件，每一个插件必须有一个这样的文件并把它拷贝到Addin目录插件才能被正确的发现并初始化。ICSharpCode.Core项目顾名思义就是SD的内核了：服务和插件树。这里提到插件先说一下一个重要的概念，SD中的一个插件并不一定只包含一个功能模块。看看ICSharpCode.SharpDevelop的插件定义文件就知道它把很多功能都集成在一起定义在一个插件定义里面。这样不至于插件多得难以管理。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 好了今天就先做个简单介绍吧。下一篇说说ICSharpCode.Core这个项目和几个重要概念。敬请期待。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/amar-yao/aggbug/1953960.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/amar-yao/archive/2011/02/13/1953960.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2010/07/15/1777905.html</id><title type="text">查询建模构建一体化开发平台(一) 概览</title><summary type="text">今天特别难受,写不下去代码。所以再来谈谈关于查询建模的内容。本系列一改上一个系列的风格，只谈架构及想法不谈具体技术实现。 希望有经验的博友前来拍砖。 上一个系列讲述了Silverlight实现查询建模的具体技术细节。架构及想法没有涉及。主要是考虑到产品还在脑子里没有付诸于实现。现在产品已经在公司立项，基本的设计及定位已经出炉。可以看做是宣传和取经。 谈到模型大家各有各的理解。模型驱动的架构(MDA...</summary><published>2010-07-15T03:57:00Z</published><updated>2010-07-15T03:57:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2010/07/15/1777905.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2010/07/15/1777905.html"/><content type="html">&lt;p&gt;&amp;nbsp; 今天特别难受,写不下去代码。所以再来谈谈关于查询建模的内容。本系列一改上一个系列的风格，只谈架构及想法不谈具体技术实现。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 希望有经验的博友前来拍砖。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 上一个系列讲述了Silverlight实现查询建模的具体技术细节。架构及想法没有涉及。主要是考虑到产品还在脑子里没有付诸于实现。现在产品已经在公司立项，基本的设计及定位已经出炉。可以看做是宣传和取经。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 谈到模型大家各有各的理解。模型驱动的架构(MDA)理论其实已经比较成熟了，感兴趣的可以参看IBM的一系列研究&lt;a href="http://www.ibm.com/developerworks/cn/rational/r-mda/,"&gt;http://www.ibm.com/developerworks/cn/rational/r-mda/,&lt;/a&gt;&lt;/p&gt;&lt;p&gt;IBM的研究主要依托其Rational产品。而我个人没有那么深厚的技术功底，咱就只能以一个程序员的狭隘角度大概说说自己的想法。在做企业级应用开发中我们最常处理的就是查询的列表、图表、统计、报表之类。这部分的工作量大概占到了开发的50%以上。而且随着用户素质的提高，自定义查询、自定义统计....等等(变态需求)层出不穷。其实想想这部分的开发成本是最容易压缩的，只要工具支持到位完全可以通过配置把这些逻辑通用出来。这样提高了开发人员的效率以此削减了开发成本。而这些业务本身所依托的就是统一的数据模型。查询分析引擎的首要问题其实就是解决数据模型统一问题。(当然了解本项目的人很多都把查询分析引擎作为单一的表现层展现中间件，这么想其实有些片面，试想没有数据模型的支撑哪来数据的展现呢？)&lt;/p&gt;&lt;p&gt;&amp;nbsp; 我们目前所做的就是用查询分析引擎建立统一的数据集模型,这些数据集模型可以方便的实现导入、导出、传递、复制、跨库。以这层模型统一现有项目的所有数据访问逻辑。包括平时程序员写的数据访问层代码、数据导入导出(ETL)逻辑、数据共享等。这样其实就是在平常业务数据的上层构建了一个以数据集组织的抽象层，这个层作为数据的整理和分类以及一些常用的数据处理(汇总、求和...)，并提供统一的接口共享及导入数据。程序员做项目过程中先根据需求建立统一的数据模型，然后写业务逻辑及页面代码。同时查询分析引擎也提供了相应的表现层配置，通过配置生成图表、列表的界面这就是主题模型。 表现层由于需求不同需要一个逐步渗透的过程，以后有可能程序员连展现层代码都不用写了直接配置生成页面。但这注定只能处理比较简单的需求。而此时数据集模型的灵活性往往制约上层模型及功能的设计及实现，同时决定了工具的易用性。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 说了这么多看看截图,总体的架构图还没有画以后补上吧。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 数据集管理页面:&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/amar-yao/queryengine1.jpg" width="1248" height="215" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 数据集配置界面(参数配置是重点体现灵活性):&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/amar-yao/queryengine2.jpg" width="1248" height="371" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;主题模型配置界面:提供简单的拖拽布局和Xaml代码&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/amar-yao/queryengine3.jpg" width="1248" height="634" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 目前产品还在初级阶段，以后细节想法即使和大家分享。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/amar-yao/aggbug/1777905.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/amar-yao/archive/2010/07/15/1777905.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/12/06/1617860.html</id><title type="text">Silverlight轻量级取数方案(带源码)</title><summary type="text">最近一直在做Flash交互相关的东西。主要思想就是在Flash声明的&lt;param&gt;中放入取数的URL,Flash控件中自己去请求这个URL。然后我们C#代码只需在这个URL指定的页面Response.Write拼好的数据XML字符串就行了。 其实这样干净利索的取数方案一样也适合在Silverlight中使用。这种方法可以避开使用笨重的WCF服务，但其能够处理的问题范围较窄所以我把它称为...</summary><published>2009-12-05T17:02:00Z</published><updated>2009-12-05T17:02:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/12/06/1617860.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/12/06/1617860.html"/><content type="text">最近一直在做Flash交互相关的东西。主要思想就是在Flash声明的&lt;param&gt;中放入取数的URL,Flash控件中自己去请求这个URL。然后我们C#代码只需在这个URL指定的页面Response.Write拼好的数据XML字符串就行了。 其实这样干净利索的取数方案一样也适合在Silverlight中使用。这种方法可以避开使用笨重的WCF服务，但其能够处理的问题范围较窄所以我把它称为...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/11/28/1612695.html</id><title type="text">SL4 &amp;amp; VS2010初体验</title><summary type="text">自从发布上一个SL系列已经有1个多月的时间了。一直感觉自己离SL越来越远了，所以今天趁着SL4 Beta的发布特来与时俱进一下。 刚安装了VS2010 Beta2。感觉.Net Framework 4.0里的东西可真不少。例如Sync Framework,Asp.net MVC 2等等。但毕竟是Beta版,估计等到正式版会拿掉不完善的东西。VS2010安装时间不长，但其中有一次重启。 我是把VS2...</summary><published>2009-11-28T09:52:00Z</published><updated>2009-11-28T09:52:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/11/28/1612695.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/11/28/1612695.html"/><content type="text">自从发布上一个SL系列已经有1个多月的时间了。一直感觉自己离SL越来越远了，所以今天趁着SL4 Beta的发布特来与时俱进一下。 刚安装了VS2010 Beta2。感觉.Net Framework 4.0里的东西可真不少。例如Sync Framework,Asp.net MVC 2等等。但毕竟是Beta版,估计等到正式版会拿掉不完善的东西。VS2010安装时间不长，但其中有一次重启。 我是把VS2...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576051.html</id><title type="text">Asp.Net MVC &amp;amp;&amp;amp; SmartDAL项目实践系列</title><summary type="text">Asp.Net MVC &amp;&amp; SmartDAL项目实践 (一) 初来乍到 Asp.Net MVC &amp;&amp; SmartDAL项目实践(二) 简单结构搭建 Asp.Net MVC &amp;&amp; SmartDAL项目实践(三) Cookie的简单利用</summary><published>2009-09-28T15:29:00Z</published><updated>2009-09-28T15:29:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576051.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576051.html"/><content type="text">Asp.Net MVC &amp;&amp; SmartDAL项目实践 (一) 初来乍到 Asp.Net MVC &amp;&amp; SmartDAL项目实践(二) 简单结构搭建 Asp.Net MVC &amp;&amp; SmartDAL项目实践(三) Cookie的简单利用</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576039.html</id><title type="text">Asp.Net MVC &amp;amp;&amp;amp; SmartDAL项目实践(三) Cookie的简单利用</title><summary type="text">最近一直在忙这个小项目,总算忙完了第一版。从今天开始好好完善一下这个系列。 今天要说的就是利用Cookie简单的实现"记住我功能"。用户登录时可以选择"记住我"以此在用户机子上记录Cookie，下次登录系统直接从Cookie中读取用户信息。见下图： 那么代码中怎么实现呢？其实很简单，自定义一个Filter,并集成自AuthorizeAttribute。 [代码] 其实最核心的就是20-29行。如...</summary><published>2009-09-28T15:10:00Z</published><updated>2009-09-28T15:10:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576039.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/28/1576039.html"/><content type="text">最近一直在忙这个小项目,总算忙完了第一版。从今天开始好好完善一下这个系列。 今天要说的就是利用Cookie简单的实现"记住我功能"。用户登录时可以选择"记住我"以此在用户机子上记录Cookie，下次登录系统直接从Cookie中读取用户信息。见下图： 那么代码中怎么实现呢？其实很简单，自定义一个Filter,并集成自AuthorizeAttribute。 [代码] 其实最核心的就是20-29行。如...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/22/1572099.html</id><title type="text">Silverlight实现查询建模(十) 与Silverlight流程设计器集成</title><summary type="text">这部分应该是目前XCenter中的最吸引人的地方。首先要感谢chegan的贡献。这里我算站在巨人的肩膀上了, 先看一下效果图： 开始阶段其实我根本没有想用什么流程设计器来实现。只是随着逐渐贴近核心业务逻辑，感觉作为编辑器和设计器，过于复杂的操作界面会使开发人员和用户都感觉到无所适从甚至抓狂。本着简化UI的目的我简单看了一下chegan的Silverlight流程设计器。这个设计器本身是个很通用的...</summary><published>2009-09-22T13:37:00Z</published><updated>2009-09-22T13:37:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/22/1572099.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/22/1572099.html"/><content type="text">这部分应该是目前XCenter中的最吸引人的地方。首先要感谢chegan的贡献。这里我算站在巨人的肩膀上了, 先看一下效果图： 开始阶段其实我根本没有想用什么流程设计器来实现。只是随着逐渐贴近核心业务逻辑，感觉作为编辑器和设计器，过于复杂的操作界面会使开发人员和用户都感觉到无所适从甚至抓狂。本着简化UI的目的我简单看了一下chegan的Silverlight流程设计器。这个设计器本身是个很通用的...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/20/1570463.html</id><title type="text">Silverlight传递DataTable终极解决方案</title><summary type="text">目前实体类是我们采用的Silverlight与WCF传递数据的首选方法。但这种方法相对比较死，只能适用于业务逻辑比较简单的应用程序。对于那些在运行时才能知道具体数据的应用并不适合。相比之下传统的Aod.Net DataSet,DataTable具有很大的灵活性。但无奈在Silverlight端不被支持。 网上已经有很多种通过特殊处理来变相实现Silverlight传递DataTable(DataS...</summary><published>2009-09-20T07:40:00Z</published><updated>2009-09-20T07:40:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/20/1570463.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/20/1570463.html"/><content type="text">目前实体类是我们采用的Silverlight与WCF传递数据的首选方法。但这种方法相对比较死，只能适用于业务逻辑比较简单的应用程序。对于那些在运行时才能知道具体数据的应用并不适合。相比之下传统的Aod.Net DataSet,DataTable具有很大的灵活性。但无奈在Silverlight端不被支持。 网上已经有很多种通过特殊处理来变相实现Silverlight传递DataTable(DataS...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/16/1568160.html</id><title type="text">Silverlight实现查询建模(九) 主页面布局</title><summary type="text">这个系列的话题似乎越来越简单了。不过没关系我们怎么简单怎么来，生活就应该是这样。 说到页面布局在asp.net中我们已经尝试过很多种了。但最经典的还是类似左树右表的结构。今天我们就来说说XCenter主页面的结构。先看下面的截图， 工具栏在前几节已经说过了。下面说左树右表结构，这个结构得益于EasySL的UI框架这里再次谢过。XCenter项目中XCenter.UI.Page就是这个主界面的实现。...</summary><published>2009-09-16T15:30:00Z</published><updated>2009-09-16T15:30:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/16/1568160.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/16/1568160.html"/><content type="text">这个系列的话题似乎越来越简单了。不过没关系我们怎么简单怎么来，生活就应该是这样。 说到页面布局在asp.net中我们已经尝试过很多种了。但最经典的还是类似左树右表的结构。今天我们就来说说XCenter主页面的结构。先看下面的截图， 工具栏在前几节已经说过了。下面说左树右表结构，这个结构得益于EasySL的UI框架这里再次谢过。XCenter项目中XCenter.UI.Page就是这个主界面的实现。...</content></entry><entry><id>http://www.cnblogs.com/amar-yao/archive/2009/09/12/1565578.html</id><title type="text">Silverlight实现查询建模(八) 传递DataTable解决方案</title><summary type="text">我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子，在进行查询建模时我们根本不知道用户从哪张表选择字段，更有甚者我们还可能不知道用户从哪个数据源选择表(这个问题我通过SmartDAL的特性加以支持)。这种情况下我们无法建立实体类定义。这也是我使用C#,Java这些静态语言感觉最不爽的地方。动态语言...</summary><published>2009-09-12T14:05:00Z</published><updated>2009-09-12T14:05:00Z</updated><author><name>Amar-Yao</name><uri>http://www.cnblogs.com/amar-yao/</uri></author><link rel="alternate" href="http://www.cnblogs.com/amar-yao/archive/2009/09/12/1565578.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/amar-yao/archive/2009/09/12/1565578.html"/><content type="text">我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子，在进行查询建模时我们根本不知道用户从哪张表选择字段，更有甚者我们还可能不知道用户从哪个数据源选择表(这个问题我通过SmartDAL的特性加以支持)。这种情况下我们无法建立实体类定义。这也是我使用C#,Java这些静态语言感觉最不爽的地方。动态语言...</content></entry></feed>
