zoukankan      html  css  js  c++  java
  • 代码可复用性

       虽然诈看这个题目,会让人联想到会不会说点设计模式之类的?
       但是相反,这只是工作的经验之谈。
       我们在做Web程序的时候,都会出现好几个独立的分站(也就是独立的IIS),像:www.xxx.com 主站,bbs.xxx.com 是论坛,video.xxx.com 是视频,可是如果你已开始没有规划好,那么在后期改动的时候即费时间,又费经力。比如:我们为了网站风格的统一,头部(每一个页头),尾部(版权说明,联系方式。。)之类的,虽然在Vs下我们可以用UserControl定义一个头和尾,在每个页面上拖来拖去,非常的方便,但是每个分站下都有几个同样的UserControl,如果我们后期要对每个分站下的UserControl作相应的修改,然后重新发布,虽然也不是很麻烦,但是如果站点多的话,也是很麻烦,在遇到你没有参加其它模块的编写,以及目录关系不明确,那么这~~~~。
        有人会说了,我们可以把头和尾做成js,在没个页都document.write以下,可是如果在头部有相应的登陆判断怎么办?在这在网站优化上,他也不便于搜索引擎的抓取。那怎么办呢?
        我在这介绍的办法是做成相应的ServerControl而不是UserControl,假设在每个站点的Bin文件下,都有一个名字为Framwork的dll,这是我们把一些相应公用的文件做到一起的dll,那么我们如果对网站的头和尾作相应的修改的话就不用再动源程序,只是把bin文件夹下相应的dll覆盖掉即可,是不是很方便。
        再有一个特别明显的例子是,我们在浏览其它网站的时候,每个页得title会不一样,也可能keywords和Description不一样,我们怎么做这个呢?难道每个页都复制粘贴keywords,description,在Vs2003中我没有看见过HtmlMeta和Page.Title属性,在Vs2005中虽然有这几个属性,难道我们在每个页面都定义HtmlMeta,然后用Page.Header.Control.add一下?那么每个页中都会有相同的代码,那么我们怎么样重构一下我们的代码呢?如果你看过Dz论坛的页面就会发现他其实用了一个PageBase的文件,然后替换掉相应的标签,对于我们不能用Dz这样基于模板机制的地页面怎么办呢?我的解决方案还是想上面介绍的一样,我们只需要,把title,keywords,desc封装到一个类库中就行了,然后对外提供一些公共属性,本来是想解释清楚地,但是一想,代码比什么都有说服力!^ _^
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web.UI.WebControls;
    using Common;

    namespace MyWebControl
    {
        
    public class MeteHeader : Literal
        {
            
    /// <summary>
            
    /// Title,默认是Web.Config上的appSetting节点的名为Title的值
            
    /// </summary>
            private string _strTitle = Function.GetTitle();
            
    /// <summary>
            
    /// 同上
            
    /// </summary>
            private string _strKey = Function.GetKeyWords();
            
    /// <summary>
            
    /// 同上
            
    /// </summary>
            private string _strDesc = Function.GetDesc();
            
    public string strTitle
            {
                
    get { return _strTitle; }
                
    set
                {
                    
    //如果有相应的Title就。。
                    if (_strTitle != "")
                    {
                        _strTitle 
    = value + "-" + Function.GetTitle();
                    }
                }
            }
            
    public string strKey
            {
                
    get { return _strKey; }
                
    set
                {
                    
    if (_strKey != "")
                    {
                        _strKey 
    = value + "-" + Function.GetKeyWords();
                    }
                }
            }
            
    public string strDesc
            {
                
    get { return _strDesc; }
                
    set
                {
                    
    if (_strDesc != "")
                    {
                        _strDesc 
    = value + "-" + Function.GetDesc();
                    }
                }
            }
            
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
            {
                writer.Write(GetHeaderText());
            }
            
    private string GetHeaderText()
            {
                StringBuilder sb 
    = new StringBuilder();
                sb.Append(
    "<title>");
                sb.Append(_strTitle);
                sb.Append(
    "</title>");
                sb.Append(
    "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
                sb.Append(
    "<meta name=\"keywords\" content=\"");
                sb.Append(_strKey);
                sb.Append(
    "\" />");
                sb.Append("<meta name=\"description\" content=\"");
                sb.Append(_strDesc);
                sb.Append(
    "\" />");
                return sb.ToString();
            }
        }
    }

        之后就该调用了,调用就相当简单了如:<xbf:MetaTitle strTitle="",strKey="",strDesc=""></xbf:MetaTitle>如果我们没有赋值的话就默认调用Web.config下的<appSetting>中自己定义的信息了,如果我们闲这样不够“动态”,那么我们可以在后台同样调用MetaTitle1.strTitle属性,这样我们就能控制自如了,是不是很方便。
       在来到这个公司的时候,因为我有工作经验,因为我用类库,所以一些同事问我为什么写这么多的类库,把代码直接写到Web程序下不就行了,改得时候还容易,我说对于一些项目享用的要做成类库,对于独立你可以写在程序中,如果对于一个截取字符串的函数,好几个人好几个版本那么在后期维护的时候,你就能感觉到那种方法好了。最重要的是在程序升级的时候,比如我们的程序时用2003开发的,现在要升级的2005,如果没有类库的话,难道我们对于一些不变得的代码快重新复制粘贴?那么工作量可想而知了,如果是类库的话,公用接口不变,变得的只是页面的工作!

        以上是个人的工作经验之谈,如果有不对的地方,或者更好的办法,请在下边留言,共同学习,共同进步
  • 相关阅读:
    IM服务器架构实现
    TCP打洞技术
    Java的守护线程与非守护线程
    SQL中时间为空的处理小结
    tfs
    Silverlight技术总结
    PMS
    Silverlight的TabControl的selectionChanged事件中读取不到TextBox值的bug。
    hahahahahah
    APM文章
  • 原文地址:https://www.cnblogs.com/xbf321/p/944859.html
Copyright © 2011-2022 走看看