哲学原理使用ResultFilter实现asp.net mvc 页面静态化

by admin on 2018年11月15日

独自这个如出一辙中和为您明白ASP.NET
MVC原理

      // Properties
      public abstract string ApplicationName { get; set; }
}
在RoleProvider抽象类吃,没有实际的兑现,均为架空方法,此时的泛类其实就同接口无异(注:事实上,在WebLogic中,在针对角色管理的API中,就拿RoleProvider定义为接口)。为了好理解这里的筹划思想,我们本着RoleProvider类进行简化,仅关注此类的CreateRole()抽象方法。
实现RoleProvider抽象类的品类比较多,例如AuthorizationStoreRoleProvider、SqlRoleProvider、WindowsTokenRoleProvider等等。因此,最后之落实类图应该如下:
 哲学原理 1
子类均重写了父类RoleProvider的泛方法,例如SqlRoleProvider:
public class SqlRoleProvider:RoleProvider
{
 public override void CreateRole(string roleName)
 {
  //实现略;
 }
}
当ASP.NET中会因此到RoleProvider,通常是于web.config配置文件对该展开安排,例如在RoleManager节中配备RoleProvider:
<roleManager defaultProvider=”SqlProvider” enabled=”true”>
    <providers>
       <add  name=”SqlProvider”
        type=”System.Web.Security.SqlRoleProvider”
        connectionStringName=”SqlServices”
        applicationName=”PatternsSample” />
    </providers>
</roleManager>
于配置文件被,.Net内部的处理常,要求providers的品类必须是RoleProvider类型,然后经过安装type的值,使该与实际的RoleProvider进行绑定。这里的处措施显然使用了Dependency
Injection(依赖注入)技术,利用反射技术将SqlRoleProvider对象sqlProvider注入,这样就算避免了针对性SqlRoleProvider具体对象的缔造,解除了调用者与它们里面的巧合。当然在配备文件被,RoleProvider还需与Membership配合使用,但立刻不是此处所假设关心的最主要,因此不再详细讲解。
及RoleProvider相同的计划性方,在.Net
Framework中,MemberShipProvider同样利用了Strategy模式,如下图所出示之筹划布局:
 哲学原理 2
常用之凡有血有肉类SqlMembershipProvider,它也SQL
Server提供了Membership的治本。如果要是吧Membership提供对Oracle数据库的支撑,我们得打定义一个接近继承MembershipProvider:
public class OracleMembershipProvider:MembershipProvider
{
 //实现略;
}
每当.Net
Framework中,还有一个杰出的Strategy模式的使,就是接口IConfigurationSectionHandler:
public interface IConfigurationSectionHandler
{     
      object Create(object parent, object configContext, XmlNode
section);
}
该接口中蕴藏的法门只有发生一个,就是Create()方法,我们得以领略啊创建配置节的一个算法,而实现该接口的类似包括有DictionarySectionHandler、IgnoreSectionHandler、NameValueSectionHandler等等,分别对应各种配置节的开创项目。此外,我们尚得好定义一个近似,来落实该接口,例如:
public class CustomHandler : IConfigurationSectionHandler
{
    public object Create(object parent, object configContext, XmlNode
section)
    {
       //实现略;
    }
}
于类图中,我们可以看出,它那个吻合Strategy模式的表征:
 哲学原理 3
虽然当.Net2.0面临,IConfigurationSectionHandler类型的目标就被ObsoleteAttribute设置也废除,而被ConfigurationSection的实现所代表,但这种计划思想依然是值得借鉴之。

为增强网站性能、和网站的负载能力,页面静态化是平等栽有效的艺术,这里对asp.net
mvc
构架下的网站,小尾鱼的池的文章
动ResultFilter实现asp.net mvc3
页面静态化 提供平等种于好的静态化方式.

“面向接口编程”是面向对象编程思想中极根本的一个尺度。根据“封装变化”的规律,我们经常用易变动的片段开展抽象,定义也接口。对于调用者而言,只需要了解接口的表定义即可,具体的实现则不用理会。在设计模式中,Strategy模式就是这么的一个“面向接口编程”的顶尖体现,它进行抽象的同样局部是针对特定的“算法”,或者说是“策略”。
设若我们只要支付一个税务系统,那么关于税务的计量就会见按照纳税人的不等而分为个人所得税和企业所得税,而立简单种税收项目依法应交的税收在计算方法达成是截然不同不同之星星点点种政策。此时,我们就是得利用策略模式,将税收政策抽象为接口ITaxStrategy:
public interface ITaxStrategy
{
     double Calculate(double income);
}
于针对税收计算策略形成了纸上谈兵后,就起设计上去除了模块间存在的耦合,消除了变化或者会见导致的未来网的科普修改,而所谓“面向接口编程”正是根据这样的理。
概念接口之后,各种税收政策均实现该接口:
public class PeronalTaxStrategy:ITaxStrategy
{
public double Calculate(double income)
    {
     //实现略;
    }
}
public class EnterpriseTaxStrategy:ITaxStrategy
{
public double Calculate(double income)
    {
     //实现略;
    }
}
如若这出一个集体的切近,提供税收的相干操作,其中虽概括计算所得税的法门:
public class TaxOp
{
private ITaxStrategy m_strategy;
    public TaxOp(ITaxStrategy strategy)
    {
     this.m_strategy = strategy;
    }
    public double GetTax(double income)
{
     return strategy.Calculate(income);
    }
}
当此看似中,接收了一个ITaxStrategy类型的对象,由于该对象是一个接口类型,因此类TaxOp是和具体税收政策无关的,它们中因接口的引入而成为了一个弱依赖的干,如类图所示:
 哲学原理 4
若客户端要调用有关税收的操作时,就得因纳税人之项目具体实例化税收政策对象:
public class App
{
    public static void Main(string[] args)
{
     TaxOp op = new TaxOp(new PersonalTaxStrategy());
     Console.WriteLine(“The Personal Tax is :{0}”, op.GetTax(1000));
}
}

Stragety模式之以极为常见,在.Net
Framework中本来不乏用之事例。例如当.Net中,为集类型Array和ArrayList提供的排序功能,其促成着尽管用了Strategy模式。它是对准比较算法进行了打包,定义了IComparer接口。实现IComparer接口的类似,可以是逐一,也堪是逆序的较简单个目标的大大小小。
除此以外,在System.Configuration.Provider命名空间受到,关于Provider的连续体系下就引入了无数Strategy模式的动。在斯命名空间下,主要是概念了一个华而不实类ProviderBase,它的概念较为简单,仅仅包括一个初始化的虚方法和几只虚属性,如下代码:
public abstract class ProviderBase
{
      // Methods
      protected ProviderBase();
      public virtual void Initialize(string name, NameValueCollection
config);

      // Properties
      public virtual string Description { get; }
      public virtual string Name { get; }

同样、模式概述

二、.Net Framework中的Strategy模式

.Net中之设计模式——Strategy模式

      // Fields
      private string _Description;
      private bool _Initialized;
      private string _name;
}
ProviderBase的派生类比较多,包括有System.Configuration.ProtectedConfigurationProvider、System.Configuration.SettingProvider、System.Web.Security.RoleProvider、System.Web.Security.MembershipProvider等,不过这些派生子类都是抽象类,它们以于生个别的累体系,且同时所有了Strategy模式的风味。以RoleProvider为例,首先,我们看看RoleProvider在.Net
Framework中的概念:
public abstract class RoleProvider : ProviderBase
{
      // Methods
      protected RoleProvider();
      public abstract void AddUsersToRoles(string[] usernames,
string[] roleNames);
      public abstract void CreateRole(string roleName);
      public abstract bool DeleteRole(string roleName, bool
throwOnPopulatedRole);
      public abstract string[] FindUsersInRole(string roleName, string
usernameToMatch);
      public abstract string[] GetAllRoles();
      public abstract string[] GetRolesForUser(string username);
      public abstract string[] GetUsersInRole(string roleName);
      public abstract bool IsUserInRole(string username, string
roleName);
      public abstract void RemoveUsersFromRoles(string[] usernames,
string[] roleNames);
      public abstract bool RoleExists(string roleName);

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图