Tag: design patterns

为什么我们需要单页面应用程序?

单页应用程序 (SPA)已经到了我们面前。 还有很多新的东西,比如路由,客户端的页面生命周期,MVC模式,MVVM模式,MV *模式,以及一些Javascript模式,像AMD模式 , Singleton , Facade ,.. 许多SPA框架和图书馆也被开发出来。 我们可以在互联网上find它的一些。 他们是AngularJs , Reactjs , BackboneJs , DurandalJs ,以及很多第三方组件,使得Javascript编码更加简单,就像RequireJs , Amplifyjs , BreezeJs … 但我只是想为什么我们需要SPA? 因为它被看作是在开发Web应用程序中引入一些新的复杂的东西。 尽pipeSPA,我们可以使用传统的Web应用程序,每个请求每个加载页面。 我只是看到一个好处,就像我们可以很容易地在移动设备上运行它,并适应新的Web应用程序发展趋势。 有人能解释得更清楚吗? 还有一件事,如果我们使用大量的第三方组件来组成一个SPA。 那么它是否为这个Web应用程序保持一致? 我认为它应该使我们的Web应用程序内维护一个巨大的组件复杂。 你怎么想的? 所有的build议都欢迎。

什么是使用JQuery Ajax和ASP.Net Mvc的正确模式?

我对Mvc框架以及JavaScript和JQuery都很陌生。 我想了解构buildAjax调用的正确方法。 假设我有一个类似于你在StackOverflow上看到的“Vote Up”button。 当用户点击它时,我需要更新数据库中的投票计数并将新值返回给用户界面。 目前我通过在“PostsController”上使用一个名为“VoteUp”的操作来实现这一点,该操作以“int postID”作为参数。 public PostsController : Controller { public ActionResult VoteUp(int postId) { //Increment Post Vote Count return Json(voteCount); //Return just the new vote count as a JSon result. } } 然后通过调用url“ http://mydomain.com/posts/voteUp?postId=5 ”通过ajax调用这个方法。 然后我用新的值返回一个JSon ActionResult来更新UI。 这是实施这个的正确方法吗? 同样,我对javascript和jquery都是全新的。 我习惯于在asp.net webforms中单击事件处理程序。 任何指导将不胜感激。

MVVM违反干吗?

看来,我做的ViewModels 像其他类似的可疑 ,他们似乎需要大量的代码重复,例如在我有一个当前的项目: SmartForm :表示要填写的数据表单的模型 ,具有以下属性: IDCODE 标题 描述 SmartFormFields的集合 等等 SmartFormControlView 视图 SmartFormControlViewModel ViewModel IDCODE 标题 描述 SmartFormFields的集合 等等 所以我的ViewModel基本上和我的Model一样 ,只是用了所有的OnPropertyChangedfunction来绑定View。 看来,我重构和扩展了这一点,我对我的模型做的每一个小的改变,我必须做一个 镜像改变的ViewModel 。 这似乎违反了模式的基本规则不要重复自己 。 我是不是正确地实现了MVVM模式,还是MVVM的一个固有特性,那就是Model和ViewModel之间总会有一对一的重复?

为什么通用ICollection在.NET 4.5中实现IReadOnlyCollection?

在.NET 4.5 / C#5中, IReadOnlyCollection<T>用Count属性声明: public interface IReadOnlyCollection<out T> : IEnumerable<T>, IEnumerable { int Count { get; } } 我想知道,对于ICollection<T>实现IReadOnlyCollection<T>接口是否有意义: public interface ICollection<T> : IEnumerable<T>, IEnumerable, *IReadOnlyCollection<T>* 这意味着实现ICollection<T>将自动实现IReadOnlyCollection<T> 。 这听起来对我来说很合理。 ICollection<T>抽象可以看作是IReadOnlyCollection<T>抽象的扩展。 请注意, List<T> ,例如,同时实现ICollection<T>和IReadOnlyCollection<T> 。 然而它并没有被devise成这样。 我在这里错过了什么? 为什么会select当前的实施呢? UPDATE 我正在寻找一个使用面向对象devise推理来解释原因的答案: 实现IReadOnlyCollection<T> 和 ICollection<T>具体类如List<T> ICollection<T> 是比以下更好的devise: ICollection<T> IReadOnlyCollection<T>直接实现IReadOnlyCollection<T> 还请注意,这基本上是一样的问题: 为什么IList<T>实现IReadOnlyList<T> ? 为什么不IDictionary<T>实现IReadOnlyDictionary<T> ?

需要用户反馈的ASP.NET MVC长时间运行过程

我一直在试图在我的项目中创build一个控制器来实现可能是相当复杂的报告。 因此,他们可能需要相当长的时间,进度条肯定会帮助用户知道事情正在进行。 该报告将通过AJAX请求启动,周期性的JSON请求将获得状态并更新进度条。 我一直在尝试AsyncController,因为这似乎是一个很好的方式来运行长进程而不捆绑资源,但它似乎没有给我任何方式来检查进度(似乎阻止进一步的JSON请求和我还没有发现为什么)。 之后,我尝试着在控制器上的静态variables中存储进度,并从中读取状态 – 但说实话,这似乎有点哈克! 所有的build议感激地接受!

MVC / MVP / MVVM到底是什么?

我最近在一个.Net WPF项目上工作,build立了一个零售销售点系统,我首次使用了MVP模式。 我花了一点时间把我的头围绕着方法的变化,但是一旦我做到了,我就认为这个概念震撼了! 我的问题是:MVC,MVP和MVVM有什么区别? 如果有一个明确的区别,是否有指导方针,以什么时候应该使用一种模式而不是另一种模式? 如果任何人都可以提供这方面的指导,或指出解释差异的文章,我会非常感激。

减less构造函数的参数个数

我正在阅读“清洁代码”,并无法弄清楚如何保持我的一些函数(通常是构造函数)的最大3个参数。 通常我的对象需要大量的信息才能工作 – 我应该做一个小的构造函数,然后使用mutator函数来给他们所有的信息? 这似乎并不比使用一个大的构造函数更好。 举个例子,我有一个“MovablePatch”类。 它可以让用户在窗口中拖动一个正方形。 它需要几个参数,包括Radius,Color,Renderer,InitialPosition和Visibility。 目前我从我的GUI收集所有这些,然后打电话给: MovablePatch(int radius, Renderer* renderer, Color color, Position initial, bool visibility) 这些只是我在这堂课中需要的一些东西。 任何人都可以build议我怎么可能打包这个信息传递给构造函数? 我没有看到任何明显的“分成小class”出现在这里。

我应该在Silverlight项目中使用Model-View-ViewModel(MVVM)模式吗?

Silverlight控件的一个挑战是,当属性绑定到代码时,它们在Blend中不再是真正可编辑的。 例如,如果您有一个从数据馈送填充的ListView,则在Blend中编辑控件时,没有可见的元素。 我听说WPF开发社区所发起的MVVM模式也可以帮助保持Silverlight控件“可混合”。 我还在围着它,但是这里有一些解释: http://www.nikhilk.net/Silverlight-ViewModel-Pattern.aspx http://mark-dot-net.blogspot.com/2008/11/model-view-view-model-mvvm-in.html http://www.ryankeeter.com/silverlight/silverlight-mvvm-pt-1-hello-world-style/ http://jonas.follesoe.no/YouCardRevisitedImplementingTheViewModelPattern.aspx 一个潜在的缺点是,该模式需要额外的类,但不一定更多的代码(如上面的第二个链接所示)。 思考?

一个对象是否应该把自己写到一个文件中,或者另一个对象是否应该用它来执行I / O?

注意:对于长问题抱歉! 我试图理解面向对象背后的一些关键领域,我不能以某种方式来决定我的特定问题。 假设我有一个充满可爱数据的对象。 classbob。 Bob myBob = new Bob("This string is data"); 假设我想将myBob的内容保存到一个xml文件(bob.xml) 我应该有一个对象作用于鲍勃写出的内容,或者我应该有myBob做这个? 案例1:对目标行事 Writer myWriter = new Writer(myBob, "C:\\bob.xml"); 情况2:保存方法 myBob.Save("C:\\bob.xml"); 有些人正在select一个选项,因为这意味着如果写入文件的代码改变了,不需要在每个Save方法中更新; 促进代码重用我想。 我的问题是获取所有数据的对象可能有私人数据没有访问者。 scheme2的情况是该方法仅对对象所持有的数据起作用,这就是应该的方式。 没有其他物体的干扰。 或者是我的问题的“案件依赖”问题之一的答案? 如果是这样,你怎么知道一种方法比另一种方法更受欢迎?

门面和适配器模式有什么区别?

我一直在阅读这两个定义,他们看起来完全一样。 任何人都可以指出他们的区别是什么? 谢谢