Questions tagged «mvc»

MVC(模型-视图-控制器)是一种软件体系结构模式,可强制将关注点分离。

2
创建REST API错误响应模型和错误代码系统的最佳方法是什么?
我的REST实现将使用以下结构在JSON中返回错误: { "http_response":400, "dev_message":"There is a problem", "message_for_user":"Bad request", "some_internal_error_code":12345 } 我建议创建一个特殊的响应模型,在该模型中,我可以传递所需的属性值(dev_message,message_for_user,some_internal_error_code)并返回它们。在代码中将类似于以下内容: $responseModel = new MyResponseModel(400,"Something is bad", etc...); 此模型应如何显示?是否应该在仅传递文本信息的地方实现例如successResponse()这样的方法,并且那里的代码默认为200?我坚持这一点。这是我的问题的第一部分:我是否需要实现此模型,这是一种很好的做法吗?因为现在,我只是直接从代码返回数组。 第二部分是关于错误代码系统。错误代码将在文档中进行描述。但是我遇到的问题是代码。管理错误代码的最佳方法是什么?我应该在模型中编写它们吗?还是最好创建单独的服务来处理此问题? 更新1 我已经实现了响应的模型类。这类似于格雷格的答案,逻辑相同,但是另外,我在模型中对错误进行了硬编码,这是它的样子: class ErrorResponse { const SOME_ENTITY_NOT_FOUND = 100; protected $errorMessages = [100 => ["error_message" => "That entity doesn't exist!"]]; ...some code... } 我为什么要这样做?那又是为了什么呢? 代码看起来很酷: return new ErrorResponse(ErrorResponse::SOME_ENTITY_NOT_FOUND ); …
15 php  mvc  rest  api 


4
在MVC上,几个视图可以具有相同的控制器,还是一个视图必须具有一个唯一的控制器?
在围绕MVC设计项目的体系结构时遇到一些问题。(这是一个C ++ / Marmalade SDK项目,我没有使用任何特定的MVC框架,而是创建了一个。) 在几篇文章中(例如在史蒂夫·伯贝克(Steve Burbek)的原始文章中),我一直在阅读“ MVC triad”的概念,这使我感到困惑,因为我从字面上理解了这个概念。当我第一次阅读它时,看起来应用程序是围绕“ MVC triad”单元构建的(我应该为每个UI单元构建一个单元),但是我发现这相当不灵活,我认为这并不是打算使用MVC的方式。然后,进一步研究该问题,我发现了控制器和视图紧密耦合的几个示例,即一对一关系-TextEditView具有TextEditController。 但是,当我回到项目时,发现使用一个控制器(按“逻辑单元”,如AddElementController)和该特定控制器的多个视图可能会很有用。 我显然在考虑类似AddElementController之类的东西,它应该具有某种选项卡式UI。我是否应该具有一个具有AddElementTabView的AddElementController以及用于选项卡的几个AddImageView,AddSoundView等?还是每个选项卡视图都应该有一个不同的“子控制器”? 总而言之,关于MVC模式(不是X框架对此模式的特殊理解/实现),为一个控制器拥有多个视图是否正确,还是每个视图都应具有其特定的控制器? 另外,在控制器上保留一些状态信息是否正确还是应该是无状态的(意味着状态应该放在某些非域状态模型上)? 在此先感谢所有。

3
MVC:模型和服务之间有什么区别?
为什么在某些框架中将逻辑层称为“模型”,而在某些框架中将其称为“服务”。它们是彼此不同还是只是命名约定不同? 更新1 我问的原因是因为在传统的MVC框架Zend Framework中,每个人都使用模型的概念。现在我正在学习AngularJS,似乎Model一词消失了,由service一词代替了。 我注意到的是,服务更像是可以反复使用的单例(例如:REST客户端),而模型则与MVC模式中来自控制器的数据操作更为相关。
15 mvc  model  service 

4
正确的Model-View -_____设计
我一直在阅读有关Model View Controller,Model View Presenter,Model View ViewModel等的内容,通常,基本概念似乎很容易理解:将漂亮的视觉效果和科学胆量保持彼此独立和无知,例如可能。设计巧克力中没有添加逻辑花生酱;酷,我喜欢。 问题是我对于第三部分还是有点模糊,不是模型或视图。每个人似乎都有自己的主意,如何称呼它,应该做什么,什么是正确的,什么是明显的错误……而且我很想弄清楚什么时候Presenter成为ViewModel,什么时候应该让View成为现实。不要这样做,因为那是主持人的工作,并且- 我在乱逛 而不是请别人解释它们之间的区别-因为已经一次又一次地做到了(我知道;我读了不计其数的文章)-我很好奇听到我自己拼凑的模型很少有程序员。 就是说,您会将此设计归类为什么?也许更重要的是,您是否对此有明显的印象?当然,如果这确实是可靠的设计,我很想听到我做的很好,但是我宁愿得到可靠的建议而不是赞美。 注意:我将使用“桥梁”作为Model-View-?的神秘第三部分。避免对其“应该”有任何潜意识的建议。 模型 是对数据的授权。 从网桥接收有关请求的更改的信息。 包含并执行关于数据如何与其他数据相关的所有逻辑。 数据更改时通知网桥(对于网桥表示感兴趣的数据)。文字编辑:允许外部订户(对其一无所知)监视其状态或计算结果。 对视图的知识为零。 视图 与为用户提供查看和操纵数据的方式有关。 从网桥接收有关数据更新的信息。 包含并执行有关如何向用户呈现数据和控件的所有逻辑。 当用户执行了(可能)影响模型的操作时,通知Bridge。 通知Bridge感兴趣的信息。 对模型的知识为零。 桥 是模型和视图之间的协调者和翻译者。 对在模型和视图之间传递的信息进行适当的格式更改。 保留有关“谁需要知道什么”的信息。 具有模型和视图的知识。 补充说明 在更复杂的程序中,通常会有多个模型。在这种情况下,网桥通常承担在多个模型之间进行协调/转换的工作,因此成为应将原型/ API /设计模型构建到哪个模型的权限。(例如,如果构建纸牌游戏程序,并且您要构建备用的甲板改组模型,则应使用Bridge来确定与Bridge正确通信所需的功能。) 在只有一个视图和模型的小型简单程序中,网桥通常会“假定”任一侧都有哪些功能。但是,随着程序变得越来越复杂,建议视图和模型向Bridge报告其功能,这样可以避免效率低下和错误的假设。 我认为这几乎涵盖了它。无论如何,我欢迎您对我倾向于使用的设计有任何疑问,并且我也鼓励您提出任何建议。 和往常一样,感谢您的宝贵时间。

8
MVC是否仅适用于Web
每当我与开发人员谈论Model View Controller(MVC)时,它们几乎是瞬间的,他们说您向URL发出请求,服务器将建立一个实体(MODEL),并为您提供该模型的可视化表示。 那么这是否意味着MVC 仅适用于Web,或者我是否正在和只是使用MVC编写Web应用程序的开发人员见面? 桌面样式应用程序上有MVC的用法吗? 我是范式的新手,我想知道MVC的任何超集

13
MVC中的M在哪里?
我试图将我的应用程序重构为MVC,但是我坚持使用M部分。 在数据库支持的应用程序中,该模型是在应用程序代码中实现的,对吗? 但是,数据库中有什么-模型也不是吗? (我没有将数据库用作简单的对象存储-数据库中的数据是企业资产)。

5
单元测试是MVC模式的主要目标吗?
最近在一次采访中,一个问题是“我们为什么要使用MVC?” 我刚刚回答说,它与许多现实世界中的系统非常接近!解释了它在可维护性,可伸缩性等方面所具有的好处。但是他们并没有说服他们,最后告诉我说MVC主要是因为它“使易于单元测试”而被使用。 虽然我知道他们的观点是正确的,但我仍然怀疑这是否是主要原因,因为(i)即使我决定不编写单元测试用例,MVC还是一个可能的选择(ii)许多有单元测试用例的GUI系统都没有按照MVC。 因此,问题是“单元测试是MVC模式的主要目标吗?” 编辑:我认为他们可能会提到测试驱动开发/编写NUnit测试用例的简便性。这是因为我们可以为模型编写测试用例(前提是视图恰好反映了模型的状态变化)-如果我错了,请纠正我。
14 mvc 

3
在MVC中,应从Controller或Model调用DAO
我已经看到了很多反对直接从Controller类调用DAO以及从Model类调用DAO的争论。事实上,我个人觉得如果我们遵循MVC模式,则控制器不应与DAO耦合,而应与Model类耦合应该从内部调用DAO,而控制器应该调用模型类。为什么,我们可以将模型类与Web应用程序分离开来,并公开各种功能,例如REST服务使用我们的模型类。 如果我们在控制器中编写DAO调用,REST服务将无法重用功能,对吗?我总结了以下两种方法。 方法1 public class CustomerController extends HttpServlet { proctected void doPost(....) { Customer customer = new Customer("xxxxx","23",1); new CustomerDAO().save(customer); } } 方法#2 public class CustomerController extends HttpServlet { proctected void doPost(....) { Customer customer = new Customer("xxxxx","23",1); customer.save(customer); } } public class Customer { ........... private void save(Customer customer){ …

3
Model-View-Controller:用户是否与View或Controller交互?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 5年前关闭。 我最近了解了MVC设计模式。我正在从《 Head First设计模式》一书中学习。 根据这本书(如果我理解正确的话): 该模型是大多数应用程序逻辑和数据。 View基本上是一个GUI,它向用户直观地表示模型。 控制器负责“调解”,并充当视图和模型之间的“中间人”。视图向控制器报告用户已执行操作,控制器将其转换为模型上的方法调用。 但是,网上很多地方都与我从那本书中了解的内容相矛盾。他们声称,一般而言,用户是与控制器(而不是视图)交互的。 哪一个是正确的或更常见的?用户是直接与Controller交互还是与View直接交互?两种方法都可以接受吗?哪个更常见?

1
数据库中的领域模型可以成为可持续的解决方案吗?
我刚开始担任新职位,是一家基于Microsoft技术的中小型公司的数据库开发人员。我很早就注意到关于最佳实践,设计模式,测试和项目管理的实践与我在学校所教的有多少不同。 最让我烦恼的是我们的主要数据库开发人员(以下称“约翰”)如何将模型架构保留在数据库中!为此,我们有3个“魔术”表;一种用于数据库方案,一种用于表,一种用于列。 将记录插入“ 表 ”表中(通过数据库触发器)会生成实际的对应表。在“ 行 ”表中插入一行会用该行更新引用的表。反过来,他的自制C#程序会读取这些代码以生成C#模型,前端开发人员将其用于控制​​器和外部。 除此之外,大多数开发都是根据ASP.NET MVC框架完成的。 我发现这种方法存在一些缺陷: 我们需要他维护ORM,而他很少有时间这样做(工作安全性很好!) “表”和“行”表的触发器存在缺陷。它们不支持表更新,也不支持检查约束或更多“高级”功能。虽然我们可以肯定地改进它们,但我不确定这是否可行。 将程序逻辑保存在数据库中感觉很奇怪且很严格(尽管可以通过C#扩展他的模型)。 他的C#模型生成器必须由3个人之一(我是其中之一)手动运行,并且还不成熟,无法包含在自动化构建过程中。 一些人建议逐步使用像Entity Framework这样的经过测试的真实产品,但他不予理,,并声称将业务逻辑保留在代码层中仅适用于小型应用程序和启动项目。 这篇文章导致了一些看起来像是经过深思熟虑的讨论,但这并不是我的意图。我只想对我们的体系结构方法进行一些说明。 将域模型保留在数据库中是否可以成为成长中的公司的可持续解决方案?

4
我应该在JSON响应中包含HTML标记吗?
在电子商务网站中,将商品添加到购物车时,我想显示一个弹出窗口,其中包含您可以选择的选项。假设您要订购iPod Shuffle,现在必须选择要雕刻的颜色和文字。 我希望窗口是模态的,所以我正在使用由Ajax调用填充的灯箱。现在我有两个选择: 选项1:仅发送数据,并使用JavaScript生成HTML标记 这样做的好处是,它将Ajax请求减少到了最低限度,并且没有将数据与标记混合在一起。 这样做的不好之处在于,现在我需要使用JavaScript进行渲染,而不是在服务器端使用模板引擎来进行渲染。通过使用客户端模板解决方案,我也许可以稍微清理一下方法。 选项2:发送HTML标记 这样做的好处是,我可以拥有与其余渲染任务(Django)相同的服务器端模板引擎,进行灯箱的渲染。JavaScript仅用于将HTML片段插入页面。因此,它显然将渲染留给了渲染引擎。我感觉合理。 但是由于某种原因,我不愿意在Ajax调用中混合数据和标记。我不确定是什么使我对此感到不安。我的意思是,每个网页的投放方式都一样-数据加标记-对吗?
13 mvc  django  templates  json 

4
解释模型视图控制器
我在开发动态网站方面的经验主要限于Java Servlet。我已经使用Tomcat开发了各种Java servlet,并且我毫不犹豫地说我对这项技术以及前端的客户端HTML / CSS / Javascript相当精通。 当我想到“动态网站”时,我认为:用户请求带有查询字符串的URL,服务器接收查询,然后继续动态输出HTML以响应查询。这通常涉及与数据库的通信,以便获取请求的数据以进行显示。这基本上doGet是Java方法背后的思想HttpServlet。 但是,这些天来,我越来越多地听到有关诸如Django和Ruby on Rails之类的较新框架的信息,它们都利用了“模型视图控制器”架构。我已经阅读了许多 解释MVC的文章,但是我很难真正理解其好处。我知道一般的想法是将业务逻辑与UI逻辑分开,但是我看不出这与普通的Web编程有什么真正的不同。从本质上讲,Web编程迫使您将业务逻辑(后端服务器端编程)与UI编程(客户端HTML或Javascript)分开,因为两者存在于完全不同的编程领域。 问题: MVC在Java servlet之类的东西上提供了什么?更重要的是, MVC到底是什么?与使用Java servlet(甚至是Java servlet)甚至更传统的方法来开发动态网站时,MVC有何不同?像CGI这样的旧版本?如果可能,在解释MVC时,请提供一个示例,说明如何将MVC应用于Web开发过程以及它如何带来好处。

5
控制器应了解视图和模型吗?或相反亦然?
我在概念上试图了解我是否应该这样做: item = Model() screen = View() brain = Controller(item, screen) 或这个.. brain = Controller() item = Model(brain) screen = View(brain) 或这个.. class Controller(): def __init__(self): item = Model(self) screen = View(self) 还是完全其他的东西?
13 mvc 

4
在MVC中使用服务层
如果控制器太胖,并且模型实例化开始加起来,则可以使用服务层。 如果仅将逻辑包装在服务类中,则将获得一堆带有一个/两个方法的服务。感觉像是代码气味。有什么最佳实践吗? 服务可以实例化模型吗? 如果服务实例化模型,则不能对服务进行单元测试。它们只能接受集成测试吗?
13 mvc  services 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.