详解C# 迭代器

Posted by & filed under Uncategorized.

迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式。简单来说,迭代器模式使得你能够获取到序列中的所有元素 而不用关心是其类型是array,list,linked list或者是其他什么序列结构。这一点使得能够非常高效的构建数据处理通道(data pipeline)–即数据能够进入处理通道,进行一系列的变换,或者过滤,然后得到结果。事实上,这正是LINQ的核心模式。 在.NET中,迭代器模式被IEnumerator和IEnumerable及其对应的泛型接口所封装。如果一个类实现了IEnumerable接口,那 么就能够被迭代;调用GetEnumerator方法将返回IEnumerator接口的实现,它就是迭代器本身。迭代器类似数据库中的游标,他是数据序 Read more […]

C#面向对象设计模式纵横谈:Interpreter 解释器模式

Posted by & filed under Uncategorized.

  动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。   例说Interpreter应用 假设现在要写一个程序将汉字转化为数字 假设我们能够把它分解为每个小部分来处理,问题就容易多了 上下文Context,statement是未处理的字符串,data是已经处理后的结果 Interpret是解释器,是Expression的核心。 个,十、百、千 对于万,就比较复杂,因为万可以是几千几百几十几万,因此他要包含前面千百十个的处理方法 客户程序 tree的添加顺序一定是要遵从个十百千万。亿的情况和万差不多,如果需要,则直接扩展一个亿的Expression即可,而不用去改变原来的类,这就是Interpreter模式的优美之处。   结构(Structure) 对应刚才的例子,Context是表达文法要处理的上下文。AbstractExpression对应 Read more […]

命令(Command)模式

Posted by & filed under Uncategorized.

一、 命令(Command)模式 命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式 把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。 每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使 得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。 二、 Read more […]

职责链模式

Posted by & filed under Uncategorized.

职责链模式允许多个类尝试着去处理一个请求,在这种情况下,这些类中的任何一个都不了解其他类的功能。该模式在这些类中提供一个松散耦合,唯有的共同联系是他们直接传递的请求。请求一直沿着链传递,知道有一个类能处理位置。 典型的例子就是应用软件的帮助系统,如果某个按钮有帮助信息,就会显示信息,否则则把帮助请求传递给下一模块,最终的情况是,消息被发送个一个广泛 的帮助类,显示一个通用的帮助信息。这个数据结构非常像数据结构里的单链表,请求信息一直沿着链表传递,直到有能处理信息的类为止。 在职责链模式中,链的组织方式是从最具体的情形到最一般的情形;并不保证所有的请求都会产生反映。 职责链是一个很好的模式例子,有助于隔离程序中的每个对象所能完成的工作内容,降低了对象之间的耦合度。 第一个例子,一个命令解析程序,根据用户输入的命令,或者显示图像,或者显示颜色,或者显示文件, Read more […]

原型模式

Posted by & filed under Uncategorized.

原型模式 一、定义        原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原则创建新的对象。 二、结构图         原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。 三、原型模式的代码如下: [csharp] //原型类     abstract class Prototype     {         private string id;         public Prototype(string id)         {             this.id = id;         }         public string ID         {             get { return id; }         }         public abstract Prototype Clone();//抽象类关键就是有这样一个Clone方法     }     //具体原型类   Read more […]

MVC中多参数传递问题

Posted by & filed under Uncategorized.

平时我们的链接是这样设置的: <%=Html.ActionLink(“修改”, “EditEnt”, new { Id = ItemData.ID})%> 如果多个参数传递呢? <%=Html.ActionLink(“修改”, “EditEnt”, new { TypeID=123,Id = ItemData.ID})%> 中间使用逗号进行分割,想传递多少个参数都没问题了。 Read more […]

MVC传递多个参数的两种方法

Posted by & filed under Uncategorized.

在今天的MVC测试中,我想在路由中传递多个参数,比如 Blog/Archtive/2010-04-18/4.html,参数是两个,一个是时间:2010-04-18,一个是序号:4。     经过一天的验证测试,最后终于找到了解决方案,并且还验证出了两种方案(赞一个^_^ ),由于初学MVC,测试中遇到了不少的问题,尤其是第一种方案的测试,开始的思路就是想采用多参数的URL,但不知道怎么回事,验证了一上午也没有通过,没办法只得去寻求其他解决方案,当我用第二种方案验证通过后,重新回到第一种方案的测试,竟然验证通过了,真不知道上午测试时哪个地方没有设置好,害的我还以为最初的想法行不通那!不说了,赶快将结果共享给大家,希望对大家有所帮助。 第一种方法: 1)添加路由表为:    routes.MapRoute(                 Read more […]

MVC后台创建Json(List)前台接受并循环读取实例

Posted by & filed under Uncategorized.

————————–后台——————-  .代码如下: [HttpPost]  public JsonResult CheckStock(IEnumerable<pvIdsCount> pvIds)  {  var resultList = new List<pvIdsCount>();  if (pvIds != null)  {  foreach (var pvIdsCount in pvIds)  {  var pvId = pvIdsCount.pvId;  var count = pvIdsCount.count;  var stock = _productService.GetProductVariantById(pvId).StockQuantity;  if (stock – count < 0)  {  var pvIdC=new pvIdsCount();  pvIdC.pvId = pvId;  pvIdC.count = stock;  resultList.Add(pvIdC);  }  }  if (resultList.Count > 0)  {  return Json(new { resultList }); //Json() —MVC的JSON 方法会自动把List<T> IEnumerable<T>转换为 Json Array<T>  }  else  {  return Json(“success”);  }  }  return Read more […]

Post Json list 转化为 List 格式

Posted by & filed under Uncategorized.

JS代码 function UpdateEvaluationIndexPublicDetail() { var jsonData = {}; for (var i = 0; i < $(“#counts”).val() ; i++) { jsonData[“evaluationDetails[” + i + “].EvaluationIndexDetailId”] = $(“#EvaluationIndexDetailId” + i).val(), jsonData[“evaluationDetails[” + i + “].ID”] = $(“#ID” + i).val(), jsonData[“evaluationDetails[” + i + “].EvaluationIndexPublicId”] = $(“#EvaluationIndexPublicId” + i).val(), jsonData[“evaluationDetails[” + i + “].Deduction”] = $(“#Deduction” + i).val(), jsonData[“evaluationDetails[” + i + “].AwardedMarks”] = $(“#AwardedMarks” + i).val(), jsonData[“evaluationDetails[” + i + “].Total”] = $(“#Total” + i).val(), jsonData[“evaluationDetails[” + i + “].Description”] = $(“#Description” + i).val() } $.messager.confirm(‘友情提示’, ‘您确定保存公示吗?’, Read more […]

ASP.NET MVC 5 – 给数据模型添加校验器

Posted by & filed under Uncategorized.

在本节中将会给Movie模型添加验证逻辑。并且确保这些验证规则在用户创建或编辑电影时被执行。 拒绝重复 DRY ASP.NET MVC 的核心设计信条之一是DRY: “不要重复自己(DRY –Don’t Repeat Yourself)”。ASP.NET MVC鼓励您指定功能或者行为,只做一次,然后将它应用到应用程序的各个地方。这可以减少您需要编写的代码量,并减少代码出错率,易于代码维护。 给ASP.NET MVC 和 Entity Framework Code First 提供验证支持是 DRY 信条的一次伟大实践。您可以在一个地方 (模型类) 中以声明的方式指定验证规则,这个规则会在应用程序中的任何地方执行。 让我们看看您如何在本电影应用程序中,使用此验证支持。 给电影模型添加验证规则 您将首先向Movie类添加一些验证逻辑。 打开Movie.cs Read more […]