zoukankan      html  css  js  c++  java
  • MVC基础知识 – 1.抽象工厂模式

    1.调用规则

    2.简单工厂

        问题:在List.aspx里怎么new一个业务层?

        2.1.再在 02SBLL 解决方案里建一个类库 BLL_Tow,也有一个 Users.cs

        2.2.建立一个工厂

        2.3.因为BLL和BLL_Tow里的Users.cs都实现了IBLL.IUser

        2.4.因为只是硬编码写死的,运行时改变不了,所以应该把参数写到配置文件 web.config 里面

    3.抽象工厂

     

    1.调用规则

    image

    image

    List.aspx

    public partial class List : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    //1.读取数据,通过业务层(业务接口层)
    IBLL.IUsers iblluser = null;
    //2.调用业务接口 读取数据
    List<Model.Users> list = iblluser.GetList();
    //3.根据数据生成HTML代码
    Response.Write(list.Count());
    }
    }

    无标题

    2.简单工厂

     问题:在List.aspx里怎么new一个业务层?

    //1.读取数据,通过业务层(业务接口层)
    IBLL.IUsers iblluser = null;

       2.1.再在 02SBLL 解决方案里建一个类库BLL_Tow也有一个Users.cs

    image

      2.2.建立一个工厂

    image

    根据问题,void的类型问题

    image

      2.3.因为BLLBLL_Tow里的Users.cs都实现了IBLL.IUser

    public class Users : IBLL.IUsers

    所以

    public class BLLAbsFactory
    {
    //void 该是什么类型呢?
    //如果是BLL.Users, return new BLL_Tow.Users();就会报错
    //反之,前面也会报错
    //因为 BLL 和 BLL_Two 里 public class Users : IBLL.IUsers所以返回 IBLL.IUsers
    public IBLL.IUsers GetBLLUser(string strType)
    {
    if (strType=="BLL")
    {
    return new BLL.Users();
    }
    else
    {
    return new BLL_Tow.Users();
    }
    }
    }

    List.aspx就能实现抽象工厂模式

    image

     

    2.4.因为只是硬编码写死的,运行时改变不了,所以应该把参数写到配置文件 web.config 里面

    image

    BLLFactory/BLLAbsFactory.cs

    image

    List.aspx

    image

     

    3.抽象工厂

    抽象工厂3层模式

    image

    BLLFactory.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace BLLFactory
    {
    /// <summary>
    /// 业务抽象工厂
    /// </summary>
    public abstract class BLLFactory
    {
    /// <summary>
    /// 根据配置文件 获取 实体业务工厂 对象
    /// </summary>
    /// <returns></returns>
    public static BLLFactory GetFactory()
    {
    string strType = System.Configuration.ConfigurationManager.AppSettings["bllType"].ToString();
    BLLFactory fac = null;
    if (strType == "bll")
    {
    fac = new BLLFactory_A();
    }
    else if (strType == "bllTwo")
    {
    fac = new BLLFactory_Tow();
    }
    return fac;
    }
    public abstract IBLL.IUsers GetUsers();
    public abstract IBLL.IMsg GetMsg();
    }
    }

    BLLFactory_A.cs

    namespace BLLFactory
    {
    /// <summary>
    /// 负责生产业务 BLL 里的项目对象
    /// </summary>
    public class BLLFactory_A : BLLFactory
    {
    public override IBLL.IUsers GetUsers()
    {
    return new BLL.Users();
    }

    public override IBLL.IMsg GetMsg()
    {
    return new BLL.Msg();
    }
    }
    }

    BLLFactory_Tow.cs

    namespace BLLFactory
    {
    /// <summary>
    /// 负责生产业务 BLL_Tow 里的项目对象
    /// </summary>
    /// <remarks></remarks>
    public class BLLFactory_Tow : BLLFactory
    {
    public override IBLL.IUsers GetUsers()
    {
    return new BLL_Tow.Users();
    }

    public override IBLL.IMsg GetMsg()
    {
    return new BLL_Tow.Msg();
    }
    }
    }

    新建一个web表示层

    ListTow.aspx.cs

    namespace Web
    {
    public partial class ListTow : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    //通过抽象工厂的静态方法,读取配置文件,并获取一个实体工厂对象
    BLLFactory.BLLFactory absBllFactory = BLLFactory.BLLFactory.GetFactory();


    //1.读取数据,通过业务层(业务接口层) --使用 抽象工厂 的方法获取一个 实体产品
    IBLL.IUsers iblluser = absBllFactory.GetUsers();
    //2.调用业务接口 读取数据 ---通过抽象产品 调用业务方法
    List<Model.Users> list = iblluser.GetList();
    //3.根据数据生成HTML代码
    Response.Write(list.Count());

    IBLL.IMsg ibllMsg = absBllFactory.GetMsg(); //--使用 抽象工厂 的方法获取一个 实体产品
    List<Model.Msg> listMsg = ibllMsg.GetMsgList();
    }
    }
    }
  • 相关阅读:
    iframe,modaldialog父子窗口相互通信的问题
    bootstrap基础知识
    基于原生js的图片延迟加载
    通过原生js的ajax或jquery的ajax获取服务器的时间
    转 fiddler教程
    正则表达式
    es6 对象
    ES6
    axios
    javascript闭包和闭包的几种写法和用法
  • 原文地址:https://www.cnblogs.com/tangge/p/3366257.html
Copyright © 2011-2022 走看看