技术开发 频道

一次失败的系统架构

【IT168 技术文档】前阵子,需要做一个多语言版本三层的网站,所以我当时想设计一个系统架构,构建可重复使用的模块,并且多个网站可以基于这个基本的架构。

     当时设计:

    多语言:利用xml做资源文件,缓存到list(NameValueCollection)中,再封装常用的控件如Lable,Button等。加入key属性,然后将重写Render.


  <myui:Label  Key="item" runat="server" />

    数据库部分则根据需要多语言的地方,分出来单独保存,


比如表Product {ID,Price,Picture...};ProductLocal{ID,LanID,ProName,ProDesc}


   多种数据库:这个则是利用常用的工厂模式,反射创建后缓存起来使用。所以建了IDAL,DAL两个项目

   业务部分:当时很傻很天真,竟然也照葫芦画瓢,用Provider模式,同样反射创建后缓存起来,所以也建了IBLL,BLL两个项目。


   这样整个系统间只依赖于接口。

   显示层:为了提高复用性,创建了一个个UserControl,然后动态地加载到Page中。


   

   开发中:
   当时自己写了些代码生成器,生成了大部分的代码,比如IDAL,IBLL,DAL,BLL,Model等,但是每当需要增加或者修改一个方法时(需要变化或者设计时没考虑周全),需要同时修改四五地方,开发极其繁琐,并且客户所说的多语言只是简繁体而已。简繁体转换网上有一堆的代码,比较简单的方法就是可利用Microsoft.VisualBasic.Strings.StrConv对Response进行处理即可。唉,感觉好像用把笨重的青龙偃月刀去杀一只毛毛虫。

    自我总结:
    第一,缓存,到处使用,一个小操作就要读取到至少两次缓存(BLL,DAL),所以经常查看到有三四十个缓存。如果业务增加的话,还会有更多。


    第二,UserControl,因为用这个,所以每次页面内操作时,它都要重新加载一次,并且Page中的viewstate还不能关闭,真是晕死。

    第三,复用性,除了架构本身外,根本就没什么可复用的地方。

    结论:
    可能是做多了企业内部的系统,对性能速度都不怎么考虑的,并且企业内部业务比较复杂,业务模式也繁多,数据库也是很多种,sqlderver,oracle,mysql,所以当时想设计一套可以通吃的架构。可以根据不同的客户,不同的权限动态加载不同的模块。但是对于做网站系统来说,根本就不适应。就好象以前有个同事说的,拿着三十层楼的设计去盖个平房。

 

    目前想进行改进瘦身,大家有什么好的看法和意见都可以说说。
 

0
相关文章