我只是掌握了MVC框架,我常常想知道模型中应该有多少代码.我倾向于有一个数据访问类,其方法如下:
public function CheckUsername($connection, $username)
{
try
{
$data = array();
$data['Username'] = $username;
//// SQL
$sql = "SELECT Username FROM" . $this->usersTableName . " WHERE Username = :Username";
//// Execute statement
return $this->ExecuteObject($connection, $sql, $data);
}
catch(Exception $e)
{
throw $e;
}
}
Run Code Online (Sandbox Code Playgroud)
我的模型往往是映射到数据库表的实体类.
模型对象是否应具有所有数据库映射属性以及上面的代码,或者可以将实际上数据库工作的代码分开吗?
我最终会有四层吗?
我正在练习MVC风格的编程.我在一个文件中有一个Mastermind游戏,工作正常(可能除了"Check"按钮在开始时不可见).
http://paste.pocoo.org/show/226726/
但是当我把它重写为模型,视图,控制器文件时 - 当我点击空Pin(应该更新,并重新绘制新颜色)时 - 注意到了.谁能在这里看到任何问题?我尝试在不同的地方放置repaint(),但它根本不起作用:/
主要:
public class Main {
public static void main(String[] args){
Model model = new Model();
View view = new View("Mastermind", 400, 590, model);
Controller controller = new Controller(model, view);
view.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
import java.util.Random;
public class Model{
static final int
LINE = 5,
SCORE = 10, OPTIONS = 20;
Pin pins[][] = new Pin[21][LINE];
int combination[] = new int[LINE];
int curPin = 0;
int turn = 1;
Random generator = new Random(); …Run Code Online (Sandbox Code Playgroud) 现在坐在这里几个小时试图解决这个问题,所以对这个大问题有点同情.:)
目标:我只想将完成的代码分成MVC(模型视图控制器)部分.我已完成游戏逻辑并基于文本 - 代码工作正常.
问题:嗯,我想将这个代码实现到MVC中,但是在哪里解释它应该使用基于文本的MODEL?因为VIEW仅用于布局(图形化)正确吗?我真的很难搞清楚从哪里开始.任何指针都会很棒!
这是我的游戏逻辑代码:
import mind.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
public class Drive {
String[] mellan;
boolean gameEnd, checkempty, checkempty2, enemy, enemy2;
String gr,rd,tom;
int digits;
public Drive() {
// Gamepieces in textform
gr="G"; rd="R"; tom=" ";
mellan = new String[7];
String[] begin = {gr,gr,gr,tom,rd,rd,rd};
String[] end = {rd,rd,rd,tom,gr,gr,gr};
//input
Scanner in = new Scanner(System.in);
mellan=begin;
gameEnd=false;
while (gameEnd == false) {
for(int i=0; i<mellan.length; i++) {
System.out.print(mellan[i]);
}
System.out.print(" Choose 0-6: …Run Code Online (Sandbox Code Playgroud) 我在设计我正在尝试开发的应用程序的体系结构时遇到了一些麻烦.我正在研究JAVA,我开始研究这个应用程序,因为我想加深我对JAVA,架构和模式的整体了解.我想按照指南来制作一个可重用,低耦合的应用程序,就像它应该的那样.该应用程序只有一个JFrame,但在其中有几个JPanel,每个JPanel代表一个应用程序的模块.
问题是:在JAVA Swing中,如何实现适当的MVC模式?我在如何理解它应该如何完成的方式上挣扎.
我是否应该拥有一个主控制器类,它包含对所有其他控制器的引用?(我有一张图片来证明这一点,在这里:https://docs.google.com/file/d/0B7tBdn5slIFeY2FoSmxESTREQ1k/edit?usp =sharing)
在这种情况下,是否所有需要更改正在呈现的模块的事件都会重定向到主控制器?
或者我应该将JFrame与应用程序的控制器耦合,并直接与它们通信?
基本上,我想知道我是否需要一个"管理"所有其他课程.我已经阅读了几个解释和不同的意见,但我相信这有点具体.
希望我已经清楚了(并希望我的解释比我的绘图更好:)).
编辑: 应用程序用法的示例:
菜单(View)是否应该拥有自己的Controller,并且此Controller与JFrame通信?JFrame将新模块加载到它的布局中?或者JFrame应该有自己的控制器(或模型,如Gilbert Le Blanc所说)?
我知道这可能看似具体,或易于理解,但每当我想到桌面应用程序时,我都很难理解这一点.
在Passive View Model View Presenter模式中,谁负责显示视图?我找到了其他MVP版本的相关答案,但它们似乎不适用于被动视图版本.
我有一个使用Java Swing的具体示例.它非常简单,但基本上我们有一个SwingCustomersView内部构建带有表(客户列表)的JPanel和一个显示当前所选客户年龄的标签.在表格中选择客户后,演示者将从模型中检索选定的客户年龄.我认为这个例子是MVP被动视图的正确实现,但如果我错了,请纠正我.
问题是我们如何引导这些类?例如,如果我们想要SwingCustomersView在JFrame中显示.如何做到这一点?我想象的是:
void launcher() {
CustomersModel model = new CustomersModel();
SwingCustomersView view = new SwingCustomersView();
CustomersPresenter presenter = new CustomersPresenter(view, model);
}
Run Code Online (Sandbox Code Playgroud)
这是初始接线,但尚未显示任何内容.我们如何实际显示视图?(1)launcher(),(2)SwingCustomersView或(3)是否有责任CustomersPresenter显示视图?不幸的是,我不相信这些都是非常好的,你可以从下面的想法中看到.也许还有另一种方式?
制作SwingCustomersView扩展JFrame,并将其内部JPanel添加到自身的内容窗格中.然后我们可以这样做:
void launcher() {
CustomersModel model = new CustomersModel();
SwingCustomersView view = new SwingCustomersView();
CustomersPresenter presenter = new CustomersPresenter(view, model);
view.setVisible(true); // Displays the view
}
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,我们不会将presenter实例用于任何事情.这不奇怪吗?它只是用于布线,我们也可以删除变量而只是做new CustomersPresenter(view, model).
请SwingCustomersView拿一个Container …
我不想尝试遵循MVC模式.在互联网上,我看到最着名的例子是计算器,例如这里.我开始使用这种MVC模式的实现.但是现在我对控制器中的动作监听器有些疑虑,因为它们倾向于查看.
有很多变化与视图相关的主要原因 - 字体,颜色,边框等.此外还有仅仅修改视图的actionlisteners!因此,在控制器中实现这样的actionlistener要困难得多(与视图中的简单内部匿名类相比).此外,它需要从控制器访问许多视图元素.
我有一个想法是在控制器和一些视图中保留一些actionlisteners,但它可能导致将来混乱.所以我想听听其他人的想法.
PS这个问题与许多ActionListener的MVC模式不重复