Stella 知识库--认识论坛的结构

-- 系列文章与Stella Forum v2.0搭配使用效果更好 --

将解决方案在vs打开后,您会看到一长串的项目,这些项目的具体解释可以看论坛的架构图。肯定有人第一眼就晕了,呵呵,不要紧,慢慢来。
您的第一反应应该是打开web这个项目,然后查看具体的页面,比如default.aspx,该页面的重要代码如下
<stella2:Container runat="server" id="index">
<Item>
<stella2:InfoSum runat="server" ID="i1"/>
<stella2:ForumIndex runat="server" ID="Forumindex1"/>
<stella2:Links runat="server" ID="l1"/>
</Item>
</stella2:Container>
整个论坛的结构基本上都是这样子的,页面的内容都放在Container控件中,该页面在里面放了三个控件,InfoSum用来显示统计数据, ForumIndex显示各个板块的信息, Links则是友情连接。
没错,所有的页面都是由控件组成。具体的操作都在控件里面。
然后我们打开webcomponents项目,找到InfoSum控件,以这个为例子来说明一下这些控件的运行机制。
下面是该控件里的重要代码,我只取了一段
public InfoSum()
{
//明确需要加载哪个用户控件
this.skinFileName="InfoSum.ascx";
}
protected System.Web.UI.WebControls.Label topicSum;
protected override void initSkin(System.Web.UI.Control skin)
{
//从用户控件中找一个文本控件
topicSum=(Label)skin.FindControl("topicSum");
//从业务层获取数据
Model.ForumData fd=Business.Cached.GetForumData();
//给该控件的Text属性赋值
topicSum.Text=fd.TopicSum.ToString();
}
从我的注释应该可以看出这个控件的内部机制:动态加载用户控件,然后初始化这个用户控件。这样做的原因是为了达到更换皮肤的目的。
需要注意的是,所有的这些控件都继承自BaseSkin,关于这个准备另写文章说明。您现在只需要知道控件的内部机制的大体就可以。
上面还有一个很重要的地方,就是业务层的调用。一般对业务层的调用都是在控件内完成。
系统是典型的三层架构的,所以对底层的调用就是很自然的事情。
三层架构的系统是怎么运行的?这个问题一开始可能会很难理解。我的建议是您可以使用vs提供的单步调试的机制来熟悉基本的过程。比如在 Model.ForumData fd=Business.Cached.GetForumData();这里设置一个断点,然后使用单步调试一行代码一行代码的看程序流的走向。对本系统 来说大致是这样的
web->webcomponents->business->factory->spldal
我正在考虑要不要画一个流程图一起达到包里。问题的关键在于,有的时候我自己都看不懂那些线条和方框的意思。
来看Business.Cached.GetForumData()的实现加深一下理解
Business.Forum fs=new Forum();
Model.ForumData fd=fs.GetForumData();
HttpRuntime.Cache.Insert
(key,fd,null,System.DateTime.Now.AddMinutes(3),TimeSpan.Zero);
调用了Business.Forum取数据
来看
public Model.ForumData GetForumData()
{
//第一步,先返回一个Forum的实例,然后调用GetForumData()
return DALFactory.GetForum().GetForumData();
}
根据我们的设定,DALFactory.GetForum()返回的是SPLDAL.Forum,内部的实现为
public Model.ForumData GetForumData()
{
RetrieveCriteria rc=new RetrieveCriteria(typeof(ForumDataEntity));
ForumDataEntity fe=(ForumDataEntity)rc.AsEntity();
if(fe!=null)
{
Model.ForumData fd=new Stella2.Model.ForumData();
fd.ArtSum=fe.ArtSum;
fd.LastRegUser=fe.LastRegUser;
fd.TopicSum=fe.TopicSum;
fd.UserSum=fe.UserSum;
fd.ViewSum=fe.ViewSum;
return fd;
}
return null;
}
这里得到数据后,再一层层的返回,直到最后给web使用。
posted on 2005-05-22 17:42  Notus|南色的风  阅读(1051)  评论(3编辑  收藏  举报