Questions tagged «mvc»

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

3
如何正确地将UI与Pyqt / Qt应用上的逻辑分离?
过去,我已经阅读了很多有关该主题的文章,并观看了Bob叔叔的有趣的演讲。但是,我始终很难正确地构建桌面应用程序,并区分在UI端和逻辑端应该承担哪些责任。 良好做法的简短摘要就是这样的。您应该设计与UI分离的逻辑,以便无论哪种后端/ UI框架,都可以(理论上)使用库。基本上,这意味着UI应该尽可能地虚设,繁重的处理应该在逻辑端进行。否则,我可以在控制台应用程序,Web应用程序或桌面应用程序上真正使用我的漂亮库。 此外,鲍伯叔叔建议对使用哪种技术会给您带来很多好处(良好的界面)的不同讨论,这种递延概念使您可以将经过良好测试的实体高度去耦,这听起来不错,但仍然很棘手。 因此,我知道这个问题是一个相当广泛的问题,已经在整个互联网上讨论了很多次,还以大量好书进行了讨论。因此,为了从中获得好处,我将发布一个非常小的虚拟示例,尝试在pyqt上使用MCV: import sys import os import random from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtCore random.seed(1) class Model(QtCore.QObject): item_added = QtCore.pyqtSignal(int) item_removed = QtCore.pyqtSignal(int) def __init__(self): super().__init__() self.items = {} def add_item(self): guid = random.randint(0, 10000) new_item = { "pos": [random.randint(50, 100), …
20 design  python  mvc  gui  coupling 


7
经验丰富的Ruby on Rails开发人员是否使用脚手架?
在Ruby on Rails教程中,我读到一些文章,建议有经验的开发人员不要使用脚手架,因为他们倾向于只编写代码自行连接MVC。 在另一个地方,我读到使用脚手架是个好主意,因为它可以帮助您遵守约定,以便其他查看您的代码并与您的代码进行交互的人都可以理解您在做什么。 我是Ruby on Rails的新手,但不是MVC或Web应用程序的新手-我通常应该努力遵循脚手架约定并让它指导我吗?

2
如何在Winform应用程序中将视图与逻辑分开?
我知道有像MVC这样的模式可以将视图与逻辑分开,但是,我不知道它们在Winform应用程序中有多常见。 对于C#Winform应用程序,我可以从开始Form并逐步向其中添加UI组件,然后针对组件的事件(click,textchanged...),我调用函数,或直接在其中编写逻辑! 我知道这是一个坏习惯,但是我不知道在Visual Studio中启动此类项目的最佳方法是什么(模板,框架,起点),MVC是唯一的解决方案吗?我应该为任何项目这样做吗? 我希望获得一些入门指南或轻量级框架。
18 c#  mvc  winforms 

2
如何构建基于Websockets的实时大量Web应用程序?
在开发实时单页应用程序的过程中,我逐渐采用了websocket,以向用户提供最新数据。在这个阶段,我很伤心地看到,我被摧毁了太多我的应用程序的结构,和我没能找到一个解决这种现象。 在详细介绍之前,请先介绍一下上下文: 该webapp是实时SPA; 后端在Ruby on Rails中。实时事件由Ruby推送到Redis密钥,然后微节点服务器将其拉回并推送到Socket.Io; 前端位于AngularJS中,并直接连接到Node中的socket.io服务器。 在服务器端,在实时之前,我对资源进行了明确的基于控制器/模型的分离,每个过程都附加有处理。当我开始通过Websocket向用户推送内容时,这种经典的MVC设计就被完全粉碎,或者至少被绕开了。现在,我有一个管道,所有应用程序都将向下流动或多或少的结构化数据。而且我感到压力很大。 在前端,主要关注的是业务逻辑的重复。当用户加载页面时,我必须通过经典的AJAX调用加载模型。但是我还必须处理实时数据泛滥,而且我发现自己复制了很多客户端业务逻辑,以保持客户端模型的一致性。 经过一些研究,我找不到任何好的文章,文章,书籍或任何能给人们提供建议的关于如何可以并且应该如何设计现代Web应用程序体系结构的建议,并且要牢记一些特定的主题: 如何构造从服务器发送给用户的数据? 我应该只发送诸如“此资源已更新,您应该通过AJAX调用重新加载它”之类的事件,还是推送更新的数据并替换通过初始AJAX调用加载的先前数据? 如何为发送的数据定义一个一致且可扩展的框架?这是模型更新消息还是“ blahblahblah出现错误”消息 如何不从后端的任何地方发送有关所有内容的数据? 如何减少服务器和客户端上的业务逻辑重复?

6
避免在Controllers中使用SQL的策略…或者我的模型中应该有多少种方法?
因此,我遇到的情况经常是我的模型开始出现以下情况之一: 用无数种方法成长为怪物 要么 允许您将SQL片段传递给它们,以便它们足够灵活,不需要一百万种不同的方法 例如,假设我们有一个“小部件”模型。我们从一些基本方法开始: get($ id) 插入($ record) 更新($ id,$ record) 删除($ id) getList()//获取小部件列表 一切都很好,但是然后我们需要一些报告: listCreatedBetween($ start_date,$ end_date) listPurchasedBetween($ start_date,$ end_date) listOfPending() 然后,报告开始变得复杂: listPendingCreatedBetween($ start_date,$ end_date) listForCustomer($ customer_id) listPendingCreatedBetweenForCustomer($ customer_id,$ start_date,$ end_date) 您可以看到增长的地方...最终,我们有如此多的特定查询要求,我要么需要实现大量的方法,要么可以将某种“查询”对象传递给单个-> query(query $ query)方法... ...或者只是硬着头皮,开始做这样的事情: list = MyModel-> query(“开始日期> X AND结束日期<Y AND待定= 1 AND customer_id = Z”) …

7
在支持模块/插件时如何组织MVC框架?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 关于MVC框架,我已经看到了两个主要的代码库结构。问题在于它们似乎都伴随有组织缺陷。 标准MVC /controller /model /view 问题:没有分离相关组件(论坛,博客,用户等)。 模块化MVC /blog /controller /model /view /user /controller /model /view /forum /controller /model /view 选择基于模块的系统会给您带来麻烦。 长名(Forum_Model_Forum = forum / model / forum.php)(如Zend) 使用文件系统搜索is_file()来查找具有论坛模型的文件夹?(像小花一样) 尝试分离不同的模块时,它们的其他任何MVC结构是否运行良好?我缺少这些结构带来的好处吗?

5
MVC,WCF,EF,LINQ-是我吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 ...还是事情变得越来越复杂? 在我看来,这些天您需要了解很多知识,才能“正确”开发MS Web应用程序。在糟糕的过去,我们并没有更好的了解,我们有了数据库表,ASP.NET,ADO.NET,并且您使用相对简单的概念构建了一个Web应用程序。 如今,似乎有很多框架可以“帮助”您“正确”地完成工作,但是我不认为这会使事情变得更容易和更好。我有这种感觉,我会成为少数,但是还有其他人认为事情有点发疯了吗?

5
MVC:控制器是否违反了单一责任原则?
单一责任原则指出“班级应该有一个改变的理由”。 在MVC模式中,Controller的工作是在视图和模型之间进行中介。它为View提供了一个界面,以报告用户在GUI上进行的操作(例如,允许View调用controller.specificButtonPressed()),并且能够在Model上调用适当的方法,以操纵其数据或调用其操作(例如model.doSomething()) 。 这意味着: 控制器需要了解GUI,以便为“视图”提供合适的界面来报告用户操作。 它还需要了解模型中的逻辑,以便能够在模型上调用适当的方法。 这意味着有两个更改的原因:GUI的更改和商务逻辑的更改。 如果GUI发生更改,例如添加了新按钮,则控制器可能需要添加新方法,以允许视图报告用户对该按钮的按下情况。 而且,如果模型中的业务逻辑发生了变化,则控制器可能必须进行更改才能在模型上调用正确的方法。 因此,控制器有两个可能的变化原因。它会破坏SRP吗?

3
Massive View Controller-IOS-解决方案
我确定每个新的iOS开发人员都会遇到以下问题:View Controller会很快因各种目的而挤满代码,很容易获得500多行代码。 这是两个基本和通用屏幕的外观: 1)表单屏幕: 2)表格视图控制器屏幕 到目前为止,我已经阅读了两种不同的解决方案: 第一个解决方案:https : //bendyworks.com/single-responsibility-principle-ios/。这是基于通知的,它将View Controller与(意图)View Model完全分开,从而减少了View Controller中的代码。我认为它具有破坏代码的缺点,类似于Go-To结构。看起来像这样: 第二种解决方案使拥挤的View Controller保持相同(按钮操作在VC中执行,依此类推)。但使用TPKeyboardAvoiding,BlocksKit之类的库或其他大多数基于类别的解决方案。使用第二种解决方案,可以大大减少代码,但是视图控制器仍然承担着很多责任。 您如何看待这些解决方案?哪个更好?有更好的吗?
16 mvc  ios  objective-c 

7
在MVC架构中,模型和视图与控制器的耦合程度如何?
我有一个使用MVC的应用程序,但是我在如何设计控制器方面有些挣扎。例如,视图仅一次查看模型数据的某些子集。但是,我不确定应该如何安排。例如,视图或模型直接在Controller上调用函数是否正常?通过某种界面?还是它们被完全封装而从不了解Controller或彼此? 就像编辑一样;这是一个不在任何Web框架中编写的自定义应用程序,因此我不在这里查找特定于框架的详细信息,并且可以自由选择。
16 mvc 

4
Django表单违反了MVC吗?
我刚开始使用来自Spring MVC多年的Django,并且表单实现有点疯狂。如果您不熟悉,Django表单会以定义您的字段的表单模型类开始。Spring同样从表单支持对象开始。但是,在Spring提供用于将表单元素绑定到JSP中的后备对象的taglib的地方,Django却具有直接绑定到模型的表单小部件。有默认的小部件,您可以在其中向您的字段添加样式属性以应用CSS或将完全自定义的小部件定义为新类。所有这些都在您的python代码中。对我来说这似乎很疯狂。首先,您将有关视图的信息直接放入模型中,其次将模型绑定到特定视图。我想念什么吗? 编辑:一些示例代码按要求。 Django: # Class defines the data associated with this form class CommentForm(forms.Form): # name is CharField and the argument tells Django to use a <input type="text"> # and add the CSS class "special" as an attribute. The kind of thing that should # go in a template …
16 mvc  django 

7
行业中使用的MVC模式是否很多?什么都是炒作?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我是一名学生,但希望很快能进入软件行业。关于MVC软件模式,似乎有很多炒作。我注意到PHP框架通常是MVC,那么非Web语言又如何呢?对于我的硕士论文(C ++),我选择了MVC模式,因为它很好地将逻辑和用户界面分开了。 在工业上使用很多吗?如果是这样,主要原因是什么?还有哪些其他竞争性的流行设计?
16 mvc 

4
每页一个控制器还是一个控制器中有多个页面?
我只是想要一些有关MVC做事方式的建议。我正在使用codeigniter,我想知道网站的每页有一个控制器还是所有页面有一个控制器更好? 假设我有一个简单的网站,您可以在其中访问主页,登录,创建帐户并与管理员联系。 拥有以下控制器会更好:frontend(index),登录名,帐户,联系人,或者拥有一个名为frontend的控制器,或者具有诸如login,createAccount,contact之类的动作的任何东西? 您何时知道在某种情况下使用一个控制器是否更好?
16 mvc 

4
测试:确定性还是不确定性?
最好有一个 确定性测试套件,导致后续的相同测试 非确定性测试套件,可能涵盖更多案例 ? 示例: 您编写了一个测试套件来测试MVC应用程序中的控制器功能。在测试期间,控制器需要来自数据库的应用程序数据作为输入。有两种方法可以执行此操作: 您可以硬编码选择测试数据库中的哪行作为输入(例如,第10行和第412行) 您使用随机数生成器从数据库中伪随机地选择数据(随机数生成器选择了两行) 首先是确定性的:对于相同版本的代码,每次运行测试都应产生相同的结果。第二个是不确定的:测试套件的每次运行都有可能产生不同的结果。但是,随机选择的数据可能会更好地表示数据边缘情况。它可以模拟用户更好地为我们的控制器提供不可预测的数据吗? 选择一个而不是另一个的原因是什么?
16 testing  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.