知识大全 浅谈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设计模式的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
知识大全 浅谈ASP.NET MVC中TempData的实现机制
浅谈ASP.NETMVC中TempData的实现机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NETMVC框架中的URL路径选择场景 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A
知识大全 浅谈ASP.NET 4.0 SEO增强中的UrlRouting
浅谈ASP.NET4.0SEO增强中的UrlRouting 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
ASP.NETMVC2.0之MVC框架简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Web
Web开发模式的颠覆者:ASP.NETMVC 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 年月
ASP.NET的MVC结构之AJAX 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET
自己动手实现Asp.net的MVC框架 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 了解JAV
ASP.NET上的另一个MVC实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在ASPNET