【原创作品——转载请说明出处】
一:引言
刚过完年,小日子过得比较悠闲,去年做过的一些架构也没时间好好的整理一番,借此机会,写篇文章巩固下感觉
顺便让后来人能够看到此架构的优势
二:之前的简单三层设计
刚出校门那会,也只会这个,当初进了一个公司,里头就我一C#程序员,老板让我开发一套小门户吧,没有设计经验
,当初的结构设计是这样的
MODEL DAO BLL WebUI,尤其是门户这块有商家等用户,但是用户类型还蛮多的,直接在webui中新增了一个文件
夹,所有用户后台的东西也直接丢进去,图片文件夹也在此列,等等等,现在回头看看这个设计,确实不堪回首,嘿嘿
三:现在的结构设计
出来到现在为止也有两年多的时间了,耳读目染了很多程序,很多关于系统优化的文章,之前也看到了一篇神马10层
的架构文章,嘿嘿- -
现在设计总的来说还是简单三层,哦不,是简单两层?
首先谈谈底层的设计吧,采用ado.net封装了一个数据库访问类库DBHelper,通过app.config或者web.config中的
providerName对数据库进行无缝切换。【这种设计相信很多都已经有了,呵呵】
然后还是模型层Model、DAL数据访问层,所有类继承至dbhelper中base类
在然后就是webui了,这里头为啥省略了bll层呢,个人观点,大家有没发觉,bll层中,其实写到的代码非常之少? 而且
还要加点工作量在里面,何不直接写到DAL里头封装起来了,这个层,感觉还真没多大的必要了
【PS:介于各位大大的评论,做一下修改,这种做法是在根据个人框架的一个情况下做出的结果吧,贴上一小段代码,
各位大大揣摩揣摩,可能跟大家用ORM,ADO等有较大的区别】
1.所有model继承至BASEMODEL类,实例化的时候初始化所有字段属性
/// <summary>
/// 新增字段
/// </summary>
/// <param name="f">字段对象</param>
public virtual void AddField(Field f)
{}
2.采用泛型 BaseProvider<T>作为数据访问层继承类
看下代码,新增一条数据
/// <summary>
/// 增加一条数据
/// </summary>
public override long Add( T model)
{
if (model == null)
{
throw new ArgumentNullException("model");
}
string strSql = string.Format("insert into {0}({1}) values ({2});select @@IDENTITY",
model.TableName, model.GetFields("", ",", true),
model.GetFields(ParameterPrefix, ",", true));
object obj = CurrentHelper.GetSingle(strSql.ToString(), GetAddParameters(model));
if (obj == null)
{
return 0;
}
else
{
return Convert.ToInt64(obj);
}
}
所有增删改查,在此base类中已经做完了,当然了,框架还有其他核心
鉴于以上说明,本人的DAO层,貌似只有可伶的几行代码- - 所以,也就是我这里不打算用BLL层的说明
【PS:补充end】
新建tool工具类库,保存常用方法,常用组件。例如:字符串的处理,fck编辑器,flash批量上传控件等等。。。
好了,基础的搭建完了,来谈谈电商的机构吧
四:电商结构
1.web.product www.域名.com product.域名.com
首先一点,电商中最主要的是产品展示以及下单支付,所以呢,这下就马上能够看到分开了,而产品展示中,又是访问
量特别大的,则主站web.product形成
2.web.payment order.域名.com payment.域名.com
其次就是要支付流程了,但是支付的流量还是会少于主站,但是也是一个很重要的环节,则有了web.payment
3.web.member login.域名.com member.域名.com
会员中心,这块相信大家都不会陌生吧?这里可以放用户登录,会员中心等信息,用来保存跨域名访问的用户认证信息
有需要用到用户登录信息的时候,就跑这边来拿?相信大家也没意见吧?
4.web.cdn cdn.域名.com cdn1,cdn2。。。。cndN
cdn域名主要用做与保存图片、样式、js等固定,相对而言不会经常变动而又通用性较强的文件,cdn服务器,大家没意见吧?
5. web.article article.域名.com【静态页】
文章资讯一个站,大家没意见吧?
6.web.interface
这个是网站接口放置地方,例如:各类支付接口,本地进销存接口,与各大电商(淘宝、拍拍、ebay)的接口等
7.web.administrator
这个是管理员后台管理的入口,大家都不陌生
8、9、10、11web.XXXXX等
这类下面其实还可以新建很多很多,上面所说的只是一个简单的电商架构,例如您还想新增一个社区web.community?
或者新增论坛web.bbs? 等等等
五:优点
首先:可能大家一开始看到这个的时候,会觉得,这不是大大的加大了工作量?老板会说,开发个P商城要这么久之类的?
对于我们写程序的人来说,写出来的程序不可能说刚1.0的版本上上去,马上就着手大的改版,这种设计完了,就真的只是
维护就可以了。
其次就是在部署的时候,如果您公司非常有实力,突然一夜之间IP,pv爆棚,那怎么办? 其实这种设计的话,完全不用担心了
域名指向做下,服务器多买几台分布式出台就容易的多了,你懂得!
再次:看到这种设计结构,如果您已经完成了一套版本的话,那么如果在将来,您想设计一个大型如腾讯,网易,新浪的门户,
您还会说访问量太大,自己搞不定么?
刚新建的,命名空间之类的都没啥考虑,反正大家都能看得懂来着,呵呵,就没拿原有程序出来装B了。
结语:希望大家给出批评指正,第一次发首页- -期待大神评论。