zoukankan      html  css  js  c++  java
  • MVP设计模式

    相比较而言我喜欢MVP  V视图,p中介者,m模型,轻量设计模式,将藕合降到最低还是很不错的,今天小小的学习了下~~流个念~~

    psb

    处理流程

    第一由mvp.aspx发起请求(一般该页面会继承一个视图接口)ProductPresenter类接收请求,并传递到合适的模型上

    第2模型ProductService接收请求并开始处理

    第3~4为后台处理数据

    第5返回处理数据到ProductPresenter类

    第六ProductPresenter在返回到页面mvp.aspx

    代码--没有经过修改~~凑合看吧

    using System;
    namespace Chapter2.Web.Interface
    {
        /// <summary>
        /// 视图接口
        /// </summary>
        public interface IProductView
        {
            void DesplayProducts(System.Collections.Generic.List<Chapter2.Repository.Product> data);
        }
    }
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    /// <summary>
    /// IProductView继承试图操作
    /// </summary>
    public partial class Default4 : System.Web.UI.Page, Chapter2.Web.Interface.IProductView
    {
        private Chapter2.Web.Presenter.ProductPresenter preseter=null;
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //--初实化
            preseter = new Chapter2.Web.Presenter.ProductPresenter();
            preseter.Init(this);
        
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
               // preseter.Init(this);
                preseter.LoadProductsByCategory(1);   
            }
    
    
        }
    
    
        public void DesplayProducts(System.Collections.Generic.List<Chapter2.Repository.Product> data)
        {
            this.GridView1.DataSource = data;
            this.GridView1.DataBind();
        }
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int Category =Convert.ToInt16(DropDownList1.SelectedValue);
            preseter.LoadProductsByCategory(Category);
        }
    }
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="mvp.aspx.cs" Inherits="Default4" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            查询<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                <asp:ListItem>1</asp:ListItem>
                <asp:ListItem>2</asp:ListItem>
                <asp:ListItem>3</asp:ListItem>
                <asp:ListItem>4</asp:ListItem>
                <asp:ListItem>5</asp:ListItem>
                <asp:ListItem>6</asp:ListItem>
            </asp:DropDownList>
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
            &nbsp;
        
        </div>
        </form>
    </body>
    </html>
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    namespace Chapter2.Web.Presenter
    {
        /// <summary>
        /// ProductPresenter控制器
        /// </summary>
        public class ProductPresenter
        {
            Chapter2.Service.ProductService service= null;
            private Chapter2.Web.Interface.IProductView view = null;
    
            
            public ProductPresenter()
            {
                service = new Chapter2.Service.ProductService();
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
            public void Init(Chapter2.Web.Interface.IProductView inputView)
            {
                view = inputView;
            }
            public void LoadProductsByCategory(int categoryid)
            {
                System.Collections.Generic.List<Chapter2.Repository.Product> data = service.GetAllProductsFrom(categoryid);
                if(data!=null&&data.Count>0)
                {
                 this.view.DesplayProducts(data);
                
                }
            
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using Chapter2.Repository;
    namespace Chapter2.Service
    {
    
        /// <summary>
        /// ProductService 的摘要说明
        /// </summary>
        public sealed class ProductService
        {
            private Chapter2.Repository.IProductRepository productRepository = null;
            private Chapter2.Cache.ICacheStorage cache = null;
            public ProductService()
            {
                productRepository = Chapter2.Factory.RepositoryFactory.GetRepository();
                cache=Chapter2.Factory.CacheFactory.GetCache();
         
            }
    
    
            public List<Product> GetAllProductsFrom(int categoryId)
            {
    
                List<Product> l = new List<Product>();
                try
                {
                    string cacheKey = string.Format("products_in_category_{0}", categoryId);
                    l = cache.Get(cacheKey) as List<Product>;
                    if (l == null)
                    {
                        l = productRepository.getProductsFrom(categoryId);
                        if (l != null && l.Count > 0)
                        {
                            cache.Add(cacheKey, l);
                        }
                    
                    }
                }
                catch (System.Exception exp)
                { 
                }
                finally
                { 
                }
                return l;
            }
        }
    }
    using System;
    using System.Collections.Generic;
    namespace Chapter2.Repository
    {
    
        /// <summary>
        /// IProductRepository 的摘要说明
        /// </summary>
        public interface IProductRepository
        {
            List<Product> getProductsFrom(int categoryId);
        
        }
    }
    using System;
    using System.Collections.Generic;
    namespace Chapter2.Repository
    {
        /// <summary>
        /// liujiaRepository 的摘要说明
        /// </summary>
        public sealed class liujiaRepository : IProductRepository
        {
            public liujiaRepository()
            {
                //
                // TODO: 在此处添加构造函数逻辑
                //
            }
    
    
            public List<Product> getProductsFrom(int categoryId)
            {
    
                List<Product> l = new List<Product>();
                Product p = new Product();
                p.CategoryId=categoryId;
                l.Add(p);
                return l;
            }
        }
    }
  • 相关阅读:
    Building a ListBox with custom content in Silverlight 4.0
    asp.net通讯问题
    Using the NavigationService Object in SL4.0
    Creating a File Explorer for Isolated Storage
    图表ASP:Chart
    什么是继承?
    Java基础一笔带过
    Java多态
    自己动手写个小框架之七
    linux crontab 定时计划
  • 原文地址:https://www.cnblogs.com/angellapples/p/3283704.html
Copyright © 2011-2022 走看看