现在有些公司里面招聘的人员,要求越来越来高了,MVC也是web开发人员必备的一项技能,今天在这里与大家探讨下MVC的一个小方向。
与普通的三层架构不同,三层架构采用了全新的体系,也颠覆了以前开发web的方式,抽象工厂模式是我们项目开发中非常常见的一种模式,属于创建型模式。那么什么是模式呢?世上本没有所谓的模式,用的人多了也就有了。我们经常看到的各种框架,其实就是各种设计模式的一个集合。
每一个模式都是针对一定问题的解决方案。抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。我这里主要给大家看工作中通常会见到的方式,虽然很low,但是很多项目就是这么弄的,只是有一些项目用反射来代替具体实例化某个类对象了。
在典型的三层架构中,我们经常会看到这样的项目结构,为了演示新建了两个实体类,Msg和Users
先看下数据访问层的抽象工厂和工厂
AbsFactoryDAL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DALFactory
{
///
/// 数据 抽象工厂类
///
public abstract class AbsFactoryDAL
{
///
/// 根据配置文件 获取 实体数据工厂 对象
///
///
public static AbsFactoryDAL GetFatory()
{
string strType = System.Configuration.ConfigurationManager.AppSettings["dalType"].ToString();
AbsFactoryDAL dalFactory = null;
switch (strType)
{
case "dal":
dalFactory = new DALFactory();
break;
case "dalA":
dalFactory = null;
break;
}
return dalFactory;
}
public abstract IDAL.IUsers GetUser();
public abstract IDAL.IMsg GetMsg();
}
}
DALFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DALFactory
{
///
/// 数据工厂,只负责生成 数据层 DAL 项目里的 数据操作类
///
public class DALFactory:AbsFactoryDAL
{
public override IDAL.IUsers GetUser()
{
return new DAL.Users();
}
public override IDAL.IMsg GetMsg()
{
return new DAL.Msg();
}
}
}
接下来是业务逻辑层的抽象工厂和具体工厂
AbsFactoryBLL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLLFactory
{
///
/// 业务抽象工厂类
///
public abstract class AbsFactoryBLL
{
///
/// 根据配置文件 获取 实体业务工厂 对象
///
///
public static AbsFactoryBLL GetFatory()
{
string strType = System.Configuration.ConfigurationManager.AppSettings["bllType"].ToString();
AbsFactoryBLL bllFactory = null;
switch (strType)
{
case "bll":
bllFactory = new BLLFactory();
break;
case "blla":
bllFactory = new BLLFactoryA();
break;
}
return bllFactory;
}
public abstract IBLL.IUsers GetUser();
public abstract IBLL.IMsg GetMsg();
}
}
BLLFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLLFactory
{
///
/// 业务工厂,只负责生成 业务层 BLL 项目里的 业务类
///
public class BLLFactory:AbsFactoryBLL
{
public override IBLL.IUsers GetUser()
{
return new BLL.Users();
}
public override IBLL.IMsg GetMsg()
{
return new BLL.Msg();
}
}
}
BLLFactoryA.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLLFactory
{
///
/// 负责 生产 BLLA 项目里的业务类对象
///
public class BLLFactoryA:AbsFactoryBLL
{
public override IBLL.IUsers GetUser()
{
return new BLLA.Users();
}
public override IBLL.IMsg GetMsg()
{
return new BLLA.Msg();
}
}
}
web.config
今天在这里跟大家简单的介绍了MVC,相信大家已经有了自己的理解,如果有哪里地方写的不对,请大家及时给出指正。