• 代码可复用性


       虽然诈看这个题目,会让人联想到会不会说点设计模式之类的?
       但是相反,这只是工作的经验之谈。
       我们在做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,如果没有类库的话,难道我们对于一些不变得的代码快重新复制粘贴?那么工作量可想而知了,如果是类库的话,公用接口不变,变得的只是页面的工作!

        以上是个人的工作经验之谈,如果有不对的地方,或者更好的办法,请在下边留言,共同学习,共同进步
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/xbf321/p/944859.html
Copyright © 2020-2023  润新知