代码改变世界

Silverlight实现查询建模(二) 项目层次划分

2009-09-03 20:21  Amar-Yao  阅读(2171)  评论(3编辑  收藏  举报

   对于项目的层次划分。大家各有各的见解和想法这里不想多说了。Silverlight是纯客户端技术,通过WCF与后台通信。这样自然而然的给我们划分出了层次:SL项目和其托管环境的Web项目为Client层,WCF和后端的实现代码为Server层。
 
但实际项目中要根据项目的规模、组织形式等因素更进一步考虑。使项目的数目和功能的划分达到一个平衡点。既要考虑业务逻辑的开发难度又要考虑项目(组件)之间的耦合程度,绝不是一件简单的事情.....  
   
    
  
上图是我这个项目XCenter平台的结构划分。目前三个解决方案文件件对应三个系统模块。Framework为系统框架,里面存放的都是比较通用的工具及组件。QE是查询报表的模块,主要就是查询建模工具所在的模块。Test为相应的测试用例。以后随着系统模块的增加会不断的增加解决方案文件夹和相应的项目。(ETL工具模块、工作流引擎模块等)。我把这种分层结构叫做横向分层。
  
那么有横就一定有纵了?没错。我们以QE这个解决方案文件夹为例。看项目名的后缀我们知道有PrivatePublicPublic.SLClient四种后缀。
   Private -- 
代表这个项目的代码只跑在Server端,也就是我们说的WCF实现端,这里主要是WCF的实现类。
   Client --
代表Xaml也就是页面所在层,这个层是Silverlight UI逻辑的所在层。
   Public
Public.SL -- 是本模块的通用层Public.SL层中都是Public层里链接过来的类,这个层要与Client层一同打包进XAP被动态下载。Public层并不与Client一同下载而是一些Server端代码的通用工具。这里这么分似乎有些牵强,下面说道Framework层时将详细阐述,读者可以把这里的Public,Public.SL理解为为了和Framework层统一对应。
  
相比之下Framework模块结构复杂很多,这里和QE模块相同的就不说了。XCenter.UIXCenter.Web两层是主要的UIXCenter.WebSilverlight项目XCenter.UI的托管网站。其中的PublicClient为后缀的项目均将打包进XAP并下载到客户端运行。Private.XXX都是FrameworkServer端组件。与Private层一样只运行在Server端。
 
说了这么多我还没有说明为什么这样组织。下面是解释。
 
企业级应用和一般的网站应用面对的用户不同,所以对于企业级应用过长的下载时间是要绝对避免的。因为我们的用户都是上帝,而这些上帝都不好伺候.... 哪怕仅此一次稍长一点的下载时间都可能被指责。所以我们要尽量减小XAP包的大小,但项目大了代码多了怎么办。那只能将模块分别放到不同的XAP里动态下载。
 
我这样分层就是为了方便XAP包的动态下载。Framework层是这个项目的核心也是启动层,FrameworkClientPublic.SL都自动打包进XAP,这个XAPIE管理并在用户访问应用时自动下载到IE缓存,所以这个XAP包越小越好,并且要避免扩大。
 
QE和别的业务模块在项目编译时用脚本打包成另一个XAP包放在ClientBin下,在应用程序启动时动态下载并加载进AppDomian。这些细节在后续的文章中将会加以说明。