【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,所以当时想设计一套可以通吃的架构。可以根据不同的客户,不同的权限动态加载不同的模块。但是对于做网站系统来说,根本就不适应。就好象以前有个同事说的,拿着三十层楼的设计去盖个平房。
目前想进行改进瘦身,大家有什么好的看法和意见都可以说说。