当前位置:编程学习 > 网站相关 >>

web动态部署(热部署)

今天跟大家探讨一下关于web动态部署,也就是热部署的问题。说这个之前,先说一个敏捷开发的原则。
 
【最小发布、增量开发】
我们在做项目时,设定的期限都特别长。总是想第一个版本就想把所有想到的问题都做完,以至于项目一再延期。所以我们应该改变我们的开发策略。采用敏捷开发的方式。
 
这里我想强调的有2点,1.最小发布。2.增量开发。
 
对于最小发布,就是要在第一版中把核心功能实现,即立即发布第一个版本。在实际的开发中,公司为了抢占市场,都会尽可能早的发布一个V1.0的版本。能有效的占领市场,同时对于开发人员来讲,可以减少对项目的排斥情绪。因为项目拖得越久,开发人员就会越疲惫,就会消极怠工,bug数会直线上升。这显然对与开发是极其不利的。
 
而增量开发,则是没增加一个功能模块,就要发布一个版本。保证在规定的时间内,至少可以让用户使用到新的功能。而且,采用增量开发的技术,也从可以降低模块之间的耦合性。人不可能一口吃成胖子,项目也一样,需要分阶段,分目标的去开发。中国还实行“五年计划”,更何况我们的项目呢。
 
 
【热部署】
热插拔,这个词儿可能只有在硬件中听过,在软件开发中可能没有听过。而热部署,跟热插拔一样,就算没听过,看到这个词儿也能想出个1,2,3来。
不错,热部署就是系统在运行过程中,可以对功能进行可配置,而不用停止或关闭系统。不用我说大家也能想到它的好处吧。
解耦,灵活性自然不必说,最重要的是用户可以按自己的喜好,个性化设置自己的系统,这对于用户来说是非常欢喜的。有这样的系统,没有人会去选择死板一块的系统。而且也同时印证和支持了最小发布和增量开发的方针。增量开发,每开发一个功能,就采用热部署,对系统进行在线升级。
 
说了这么多废话,还是给了代码看看吧,毕竟实践是检验真理的唯一标准。
 
热部署,主要用到了xml文件来实现动态效果。菜单用xml文件来存储,系统动态读取xml文件来动态生成菜单。例子菜单分为2级,一级菜单在同一个xml文件中,二级菜单存在放各自对应的文件夹中的xml文件里。
一级菜单存放在Config文件夹下的ChildSystem.config:
[html]  
<?xml version="1.0" encoding="utf-8"?>  
<!--系统中的子系统或子模块。-->  
<childsystem>  
  <system name="GoodsManager" value="商品管理" assembly="GoodsManager.dll" />  
  <system name="UserManager" value="用户管理" assembly="UserManager.dll" />  
</childsystem>  
 
商品管理二级菜单存放在GoodsManager文件夹下的App.config:
[html] 
<?xml version="1.0" encoding="utf-8"?>  
<Pages>  
  <page name="socket" value="测试界面" url="~/GoodsManager/Socket.aspx" />  
  <page name="config" value="配置页面"  url="~/GoodsManager/Configer.aspx" />  
  <main>  
    <name>GoodsManager</name>  
    <author>longxuan</author>  
    <version>1.00</version>  
    <assmebly>GoodsManager.dll</assmebly>  
  </main>    
</Pages>  
 
用户管理二级菜单存放在UserManager文件夹下的App.config:
[html] 
<?xml version="1.0" encoding="utf-8"?>  
<Pages>  
  <page name ="internet" value="网络时间" url="~/UserManager/InternetTime.aspx" />  
  <page name="socket" value="测试界面" url="~/UserManager/Socket.aspx" />  
  <page name="config" value="配置页面"  url="~/UserManager/Configer.aspx" />  
  <main>  
    <name>returnCashStrategy</name>  
    <author>longxuan</author>  
    <version>1.00</version>  
主界面Default.aspx ,拖入一个TreeView控件,name修改为TreeViewMU,添加SelectedNodeChanged事件。后台代码:
[csharp]  
using System;  
using System.IO;  
using System.Web.UI.WebControls;  
using System.Xml;  
  
namespace PluginTest  
{  
    public partial class Default : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            if (!IsPostBack)  
            {  
                ShowChildSystem();  
            }  
        }  
  
        /// <summary>  
        /// 子系统、子模块的显示  
        /// </summary>  
        private void ShowChildSystem()  
        {  
            string xmlpath = Server.MapPath("~\\Config\\ChildSystem.config");  
            if (!File.Exists(xmlpath)) return;  
            XmlDocument xmlDoc = new XmlDocument();  
            xmlDoc.Load(xmlpath);  
            var selectSingleNode = xmlDoc.SelectSingleNode("childsystem");  
            if (selectSingleNode != null)  
            {  
                XmlNodeList nodelist = selectSingleNode.ChildNodes;  
  
                TreeViewMU.Nodes.Clear();  
  
                foreach (var VARIABLE in nodelist)  
                {  
                    TreeNode node = new TreeNode();  
                    XmlAttributeCollection xmlAttributeCollection = ((XmlNode)VARIABLE).Attributes;  
                    if (xmlAttributeCollection != null)  
                    {  
                        node.Text = xmlAttributeCollection["value"].InnerXml;  
                        node.Target = xmlAttributeCollection["assembly"].InnerXml;  
                        node.Value = xmlAttributeCollection["name"].InnerXml;  
                    }  
                    TreeViewMU.Nodes.Add(node); &nbs
补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,