Questions tagged «mvc»

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

4
在GUI编程中,调用方为什么要确保线程安全?
我已经在许多地方看到,规范知识1是调用者的责任,以确保您在更新UI组件时位于UI线程上(特别是在Java Swing中,您位于Event Dispatch Thread上) 。 为什么会这样呢?事件分发线程是MVC / MVP / MVVM中视图的关注点;在视图之外的任何地方处理它,都会在视图的实现和该视图的实现的线程模型之间建立紧密的耦合。 具体来说,假设我有一个使用Swing的MVC架构的应用程序。如果调用者负责更新事件调度线程上的组​​件,则如果我尝试将Swing View实现换成JavaFX实现,则必须更改所有Presenter / Controller代码以改为使用JavaFX Application线程。 因此,我想我有两个问题: 为什么调用者有责任确保UI组件线程安全?我上面的推理中的缺陷在哪里? 我该如何设计我的应用程序以松散耦合这些线程安全问题,但仍然是适当的线程安全? 让我添加一些MCVE Java代码来说明“调用者负责”的含义(这里还没有其他好的做法,但我试图将其尽量减少): 来电者负责: public class Presenter { private final View; void updateViewWithNewData(final Data data) { EventQueue.invokeLater(new Runnable() { public void run() { view.setData(data); } }); } } public class View { void …

11
MVC中的“ C”真的必要吗?
我了解模型和视图在“模型-视图-控制器”模式中的作用,但是我很难理解为什么需要控制器。 假设我们正在使用MVC方法创建国际象棋程序;游戏状态应该是模型,GUI应该是视图。在这种情况下,控制器究竟是什么? 它是否只是一个单独的类,具有在您单击图块时将要调用的所有功能?为什么不只在视图本身中对模型执行所有逻辑?

6
如何避免iOS上笨拙的UITableViewController?
在iOS上实施MVC模式时遇到问题。我已经搜索了Internet,但似乎找不到解决此问题的任何好方法。 许多UITableViewController实现似乎很大。我见过的大多数示例都允许UITableViewController工具<UITableViewDelegate>和<UITableViewDataSource>。这些实现UITableViewController是变大的一个重要原因。一种解决方案是创建实现<UITableViewDelegate>和的单独类<UITableViewDataSource>。当然,这些类必须参考UITableViewController。使用此解决方案是否有任何弊端?通常,我认为您应该使用委托模式将功能委托给其他“ Helper”类或类似类。是否有解决此问题的完善方法? 我不希望模型包含太多功能,也不希望包含视图。我认为逻辑应该真正属于控制器类,因为这是MVC模式的基石之一。但是最大的问题是: 您应该如何将MVC实现的控制器划分为较小的可管理部分?(在这种情况下,适用于iOS中的MVC) 尽管我正在特别寻找iOS的解决方案,但可能会有解决此问题的一般模式。请举例说明解决此问题的好方法。请提供一个论点,为什么您的解决方案很棒。

7
为什么每个人都将控制器放在一个文件夹中而将视图放在另一个文件夹中?
我正准备把弯腰的问题从asp转移到mvc框架(asp.net mvc或nancy)中。无论我走到哪里,都可以看到用于控制器/模块的文件夹和用于视图的文件夹。这是只是按类型整理事物的帕夫洛夫式反射,还是有一些更深层次的智慧在起作用?我有一个概念验证项目,将可能要一起打开的文件存储在一起,这很舒适。由于这些文件也可能互相调用,因此可以使用较短,较不易碎的相对链接进行调用。这种模式受到mvc的挑战,因为文件夹路径不再自动对应于url路径,并且在asp.net mvc中,项目模板和路由强制执行views \ controllers \ schism。 此microsoft页面介绍了区域的概念。可以理解为,由于这种人为的分离,大型应用程序变得笨拙。 人们会反对“关注点分离”,但是关注点分离已经通过拥有单独的源文件来实现。在我看来,将这些紧密耦合的源文件发送到文件夹结构的相对两端并没有任何具体收获? 还有其他人要与这个斗争吗?有小费吗?
36 mvc  asp.net-mvc 

2
MVCS-模型视图控制器存储
我最近决定开始学习iOS开发,为此,我一直在阅读iOS编程:The Big Nerd Ranch Guide。在这本书中,作者描述了一种设计模式MVCS-Model-View-Controller-Store,其基本思想是,由于许多应用程序使用多个外部数据源,因此将请求逻辑保留在控制器中可能会变得非常混乱。建议将所有请求逻辑从控制器中移出并移到单独的对象中。 简而言之,引用这本书 Model-View-Controller-Store将请求逻辑放入一个单独的对象中,我们将此对象称为存储(图28.4)。使用存储对象可以最大程度地减少冗余代码,并简化获取和保存数据的代码。最重要的是,它把处理外部资源的逻辑转移到了一个清晰且目标明确的类中。这使代码更易于理解,也易于维护和调试,并与团队中的其他程序员共享。 和 关于异步存储的一个很酷的事情是,即使很多对象在处理一个请求上做了很多工作,但请求的流及其响应却在控制器中的一个位置。这给我们带来了易于阅读且易于修改的代码的优势。 我想了解更多关于这种模式的信息,并想看看其他人可能要说些什么,但是在网上搜索时,我唯一能找到的参考是同一本书(这种模式也许以其他名字叫吗?)。 在我看来,作者的逻辑似乎很有意义,而且似乎是常规MVC模式的逻辑扩展,但这也许是因为我实际上对MVC模式没有太多的经验(除了涉足iOS开发之外,我还拥有带有骨干 .js的已使用MVV (也就是说,如果您将其视为MVC)。 我希望也许有更多经验的人可以阐明我所缺少的MVCS模式是否存在任何明显的缺陷/问题。

10
视图和模型是否应该沟通?
根据MVC体系结构的Wikipedia页面,视图可以由模型自由通知,也可以自由查询模型的当前状态。但是,根据Paul Hegarty在Stanford的第1讲第18页上的iOS 5课程的介绍,所有交互都必须通过控制器进行,而Model和View则永远都不应该相互了解。对于我来说,尚不清楚Hegarty的声明是否一定要简化课程,但我很想说他打算这样做。 您如何解释这两种相反的观点?
33 design  mvc 

9
向非程序员介绍MVC [关闭]
我需要向非程序员解释MVC。即,在进度报告的范围内,致其他部门的经理。我要做的一件事是将我们的代码库重构为MVC分离。 他们可能会问什么是MVC分离?他们可能会问为什么需要它? 在阅读了这样一个相当技术性的答案之后: 真正的MVC是什么?,我并不完全满意,因为我将与非程序员交谈。他们可能会点头,但他们可能不明白这是什么以及为什么需要它。 实际上,除了“为了提高对软件进行更改的灵活性而将关注点,职责,功能,类,块,任务,事物分开)之外,我还没有完全掌握MVC的含义。我认为使用DI和OO工具和技术将数据库从视图中分离出来,并将视图从业务逻辑中分离出来,我认为这是MVC分离。 因此,下一次您向具有销售和会计背景的非程序员讲解MVC时,您会告诉他们什么?
31 mvc 

7
业务逻辑是否可能不会潜入视图?
在过去的三年中,我已经为多个Web应用程序项目进行了开发,无论是个人的还是工作的,我似乎都无法弄清楚是否有可能至少某些业务逻辑没有出现在应用程序的视图层中。 在大多数情况下,会出现类似“如果用户选择了选项x,那么应用程序必须使他能够提供y的信息,否则,他/她应该提供信息z”之类的问题。或执行一些AJAX操作,该操作应将一些更改应用于模型,但除非用户明确要求,否则不要提交更改。这些是我遇到的一些最简单的问题,我无法弄清楚如何避免视图中的复杂逻辑。 我读过的大多数有关MVC的书通常都展示一些非常琐碎的示例,例如CRUD操作,它们仅更新服务器上的数据并显示它们,但在大多数功能丰富的应用程序中,情况并非如此。 是否可以实现完全没有业务逻辑的视图?

5
用户权限检查应该在哪里进行,并且MVC由谁进行?
用户权限检查应该在模型或控制器中进行吗?谁应该处理权限检查,User对象或某些UserManagement助手? 应该在哪里发生? 检入控制器: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... 在Controller中进行检查有助于简化模型的操作,因此我们可以将所有逻辑保留在Controller中。 签入模型: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... 通过将检查放到模型中,我们使模型复杂化,而且还确保我们不会意外允许用户执行他们不应该在Controller中进行的操作。 又是谁? 一旦我们确定了该地点,谁应该进行检查?用户? Class User { bool hasPermissions(int permissionMask) { ... } ... 但是,了解自己的能力并不是用户的真正责任,所以也许是一些帮助者? Class UserManagement { bool hasPermissions(User …
26 mvc  permissions 

4
在MVC中,模型应处理验证吗?
我正在尝试重新构造为使用MVC模式开发的Web应用程序,但是我不确定是否应在模型中处理验证。例如,我正在建立一个这样的模型: class AM_Products extends AM_Object { public function save( $new_data = array() ) { // Save code } } 第一个问题:所以我想知道我的save方法是否应该在$ new_data上调用验证函数,或者假设数据已经被验证? 另外,如果要提供验证,我在想一些定义数据类型的模型代码看起来像这样: class AM_Products extends AM_Object { protected function init() // Called by __construct in AM_Object { // This would match up to the database column `age` register_property( 'age', 'Age', …
25 architecture  mvc 

6
我应该在MVC的哪里放置API请求?
我正在使用MVC模式构建Web应用程序。遵循这种架构,我们可以看到模型中使用了与数据库交互的所有方法。 但是,如果我必须打电话给其他人在网络上公开的服务会怎样?例如,我想访问Facebook API以获取页面的所有关注者,那么,将这些方法放在哪里? 显然,视图不是一个好主意,因为该模块专用于表示,不应使用控制器来检索数据,而模型通常仅用于与数据库的交互。 那么,您能给我一些提示吗?而且,请问我是否对MVC架构犯了一些错误?
25 mvc  api 


2
Web开发的替代模式?(非MVC)[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 最近,我一直在阅读有关MVC及其与网络不兼容的博客文章。我了解了RMR体系结构之类的替代模式。 我很好奇,除了MVC,人们还在网上使用其他哪些模式?另外,如果有实现该模式的框架,请发布其链接。


5
在MVC系统中,数据库持久性代码应该放在哪里?
我已经看到了多种用于将信息持久存储到数据库的配置。通常,在我的世界角落,三种类型的设计似乎很常见: 控制器管理持久性 模型管理持久性 第三方库管理持久性,通常需要在模型上进行某种注释。 我想知道从概念上讲哪种配置(如果有的话)最容易使用/与MVC架构最兼容? (如果不是我列出的人,请给出简短的概述/概述作为答案的一部分)
21 mvc 

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.