知识大全 浅谈ASP.NET MVC中的FluentHtml与连续接口

Posted

篇首语:古人学问无遗力,少壮工夫老始成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅谈ASP.NET MVC中的FluentHtml与连续接口相关的知识,希望对你有一定的参考价值。

浅谈ASP.NET MVC中的FluentHtml与连续接口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们力求页面层代码简洁并具有较好的可读性 在ASP NET MVC的平台上 我们以新的起点来实现这一目标 MvcContrib FluentHtml和Spark ViewEngine给我们做出了榜样 本文将以MvcContrib FluentHtml为例探究它的实现机制:Fluent Interface

  在MvcContrib FluentHtml的应用中 我们随处可以见到下面的代码:

  

    < %= this TextBox(x => x Person Name) Title( Enter the person s name ) Label( Name: ) %> ……    < %= this Select(x => x Person Gender) Options(Model Genders) Size( ) Label( Gender: )   Title( Select the person s gender ) %> 

  浏览器中生成的代码为:

  

    < LABEL id=Person_Name_Label for=Person_Name>Name:< /LABEL> < INPUT id=Person_Name title= Enter the person s name  value=Jeremy maxLength=  name=Person Name>    < SELECT id=Person_Gender title= Select the person s gender  size=  name=Person Gender>< OPTION selected value=M>Male< /OPTION>< OPTION value=F>Female< /OPTION>< /SELECT> 

  上面对动态生成TextBox和Select的代码很有意思 我们使用普通的方式在页面上生成同样的客户端代码 CS代码大致是这样的: 

  

    Label label = new Label();   label Text =  Name ;   TextBox textbox= new TextBox();   textbox ToolTip = Enter the person s name ;   textbox ID =  No ;   textbox ID =  Person Name ; 

  而FluentHtml创建页面元素的方式让我们很容易联想到StringBuilder的使用: 

  

    StringBuilder stringbuilder = new StringBuilder();   stringbuilder Append( Hello ) Append(   ) Append( World! ); 

  Fulent Interface 这种实现编程方式就是 Fluent Interface 这并不是什么新概念 年Eric Evans 和Martin Fowler就为这种实现方式命名 源文档 <; 可以通过维基百科中对Fluent Interface的描述获得一个基本的了解:In sofare engineering a fluent interface (as first coined by Eric Evans and Martin Fowler) is a way of implementing an object oriented API in a way that aims to provide for more readable code

  我们分解上面的话:

  它是面向对象API的一种实现方式 目的是增加代码的可读性 既然我们最熟悉的是StringBuilder 我们就从这个线索追下去:打开Reflector 很容易找到StringBuilder的Append方法:

  

    public StringBuilder Append(string value)    if (value != null)     string stringValue = this m_StringValue;   IntPtr currentThread = Thread InternalGetCurrentThread();   if (this m_currentThread != currentThread)      stringstringValue = string GetStringForStringBuilder(stringValue  stringValue Capacity);      int length = stringValue Length;   int requiredLength = length + value Length;   if (this NeedsAllocation(stringValue  requiredLength))      string newString = this GetNewString(stringValue  requiredLength);   newString AppendInPlace(value  length);   this ReplaceString(currentThread  newString);      else      stringValue AppendInPlace(value  length);   this ReplaceString(currentThread  stringValue);       return this;   

  阅读这段有两个特别要注意的点: 方法的返回值是StringBuilder类型 最后一句:return this;为了深刻理解 我们写一个简单的StringBuilder:

  

    public interface IContentBuilder     void WriteContent();   IContentBuilder Append(string partialContent);    public class TestContentBuilder : IContentBuilder     string temp;   #region IContentBuilder Members    void IContentBuilder WriteContent()      Console Write(temp);       IContentBuilder IContentBuilder Append(string partialContent)      temp += partialContent;   return this;       #endregion    … …  //调用代码  IContentBuilder t = new TestContentBuilder();   t Append( test ) Append( Hello ) WriteContent(); 

  跑一下代码 和StringBuilder效果是一样的 从上面的应用也可以看出:Fluent Interface经常用来完成对象的构造和属性赋值

cha138/Article/program/net/201311/13374

相关参考

知识大全 浅谈ASP.NET MVC Membership权限机制

浅谈ASP.NETMVCMembership权限机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 浅谈ASP.NET开发下的MVC设计模式的实现

浅谈ASP.NET开发下的MVC设计模式的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 浅谈ASP.NET MVC中TempData的实现机制

浅谈ASP.NETMVC中TempData的实现机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET MVC框架中的URL路径选择场景

ASP.NETMVC框架中的URL路径选择场景  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  A

知识大全 浅谈ASP.NET 4.0 SEO增强中的UrlRouting

浅谈ASP.NET4.0SEO增强中的UrlRouting  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET MVC 2.0之MVC框架简介

ASP.NETMVC2.0之MVC框架简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Web

知识大全 ASP.NET MVC

Web开发模式的颠覆者:ASP.NETMVC  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  年月

知识大全 ASP.NET 的MVC结构之AJAX

ASP.NET的MVC结构之AJAX  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET

知识大全 自己动手实现Asp.net的MVC框架

自己动手实现Asp.net的MVC框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  了解JAV

知识大全 ASP.NET上的另一个MVC实现

ASP.NET上的另一个MVC实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在ASPNET