标签: model-view-controller

关注点分离; MVC; 为什么?

在我开始下一个重大项目之前,我正在阅读OO.为了给你一些快速的背景知识,我是一名PHP开发人员,致力于Web应用程序.

特别感兴趣的一个领域是用户界面; 具体如何构建它并将其连接到我的OO"模型".

我一直在读这个领域.我最喜欢的一个是: 为面向对象的系统构建用户界面

"所有对象都必须提供自己的UI"

考虑到我的问题,我可以看到这很好用.例如,我构建了我的"用户"对象来代表登录我网站的人.我的一种方法是"display_yourself"或类似方法.我可以在整个代码中使用它.也许从这开始就是他们的名字.之后,如果我需要调整以显示他们的名字+小头像,我可以更新这个方法,嘿-presto,我的应用程序更新.或者如果我需要将他们的名字作为他们个人资料的链接,嘿-presto我可以从一个地方轻松再次更新.

在OO系统方面; 我认为这种方法效果很好.看看其他StackOverflow线程,我在"Separation of Concerns"下找到了这个: Soc

"在计算机科学中,关注点分离(SoC)是将计算机程序分解为尽可能少地在功能上重叠的不同特征的过程.关注点是程序中的任何兴趣或焦点.通常,关注点是同义词在信息隐藏的帮助下,传统上通过模块化和封装来实现SoC的进步.

在我看来,我已经实现了这一点.我的用户对象隐藏了它的所有信息.在我显示它之前,我在代码中没有任何地方我说$ user-> get_user_name().

然而,这似乎违背了其他人似乎认为的"最佳实践".

引用同一问题中的"选定"(绿色)答案:

"关注点的分离是将每个问题的代码分开.改变接口不应该要求改变业务逻辑代码,反之亦然.模型 - 视图 - 控制器(MVC)设计模式是分离这些问题的一个很好的例子.为了更好的软件可维护性."

为什么这样可以提高软件的可维护性?当然,对于MVC,我的View必须对模型有很多了解吗?阅读JavaWorld文章,了解有关这一点的详细讨论: 为面向对象的系统构建用户界面

无论如何......最后到达实际点!

1.任何人都可以推荐任何详细讨论此内容的书籍吗?我不想要一本MVC书; 我不是在MVC上卖的.我想要一本讨论OO/UI,潜在问题,潜在解决方案等的书.(可能包括MVC)Arthur Riel的面向对象设计启发式

触及它(也是一本优秀的书!),但我想要更详细的东西.

2.任何人都可以提出一个与Allen Holub的JavaWorld文章一样充分解释的论点,该文章解释了为什么MVC是一个好主意?

非常感谢能够帮助我就此得出结论的任何人.

php oop model-view-controller user-interface

31
推荐指数
2
解决办法
7257
查看次数

Node.js MVC框架

我想使用Node.js开发一个网站.我在这里看到了很多框架:https://github.com/joyent/node/wiki/modules#web-frameworks-micro但不知道哪一个是社区最接受的(让我们说:最多流行).有没有人尝试过任何这些框架和/或在生产中使用它,你的经验是什么?谢谢.

model-view-controller node.js

31
推荐指数
4
解决办法
3万
查看次数

Java - 学习MVC

我想学习如何将MVC架构应用到我的Java项目中; 主要是我在Swing的工作.现在没有简单的解释或示例如何使用MVC编写正确的代码,除了我在这里找到的这两个:

  1. http://leepoint.net/notes-java/GUI/structure/40mvc.html
  2. http://www.oracle.com/technetwork/articles/javase/mvc-136693.html

在我看来,Java中没有定义的MVC架构.从我看到的是Java在Wwing的基础层面为您提供的内容以及您可以自行应用的内容在第一个教程中.

除了上面的两个资源,有人可以为我提供一个可以让你轻松进入Java MVC的源代码吗?可能是一个视频教程?

java model-view-controller swing design-patterns

31
推荐指数
1
解决办法
9万
查看次数

使用JavaScript生成的HTML可抓取网站的最不冗余的方法是什么?

在阅读了Google关于使Ajax生成的内容可抓取的政策以及许多开发人员的博客文章和Stackoverflow问答主题之后,我得出的结论是,没有办法建立只有JavaScript/Ajax生成的网站HTML可抓取.我目前正在工作的网站没有获得相当数量的内容索引.我们的非索引内容的所有表示层都是通过从基于Ajax的Web服务调用返回的JSON生成HTML而构建的,我们相信Google并没有因此而对内容编制索引.那是对的吗?

唯一的解决方案似乎是拥有搜索引擎(特别是谷歌)网站的"后备"版本,其中所有HTML和内容都将按照传统方式在服务器端生成.对于启用了JavaScript的客户端,似乎我们可以使用与现在基本相同的方法:使用JavaScript从异步加载的JSON生成HTML.

回顾一下,我的理解是,如上所述,当前在创建可抓取的Ajax生成的网站时应用DRY原则的最佳实践是使用可以在客户端和服务器端使用相同模板的模板引擎.对于启用了JavaScript的客户端,客户端模板引擎(例如mustache.js)会将从服务器发送的JSON数据转换为HTML,如其模板文件的副本所定义.对于禁用了JavaScript的搜索爬虫和客户端,同一模板引擎(例如mustache.java)的服务器端实现将类似地对其相同的模板文件的副本进行操作以输出HTML.

如果该解决方案是正确的,那么这与4或5年前由前端重型站点使用的方法有何不同,其中站点基本上必须维护两个模板代码副本,一个副本用于启用JavaScript的用户(几乎每个人)和没有启用JavaScript的搜索引擎和浏览器的另一个副本(例如在FreeMarkerVelocity中)(几乎没有人)?似乎应该有更好的方法.

这是否意味着需要维护两个模板模型层,一个在客户端,另一个在服务器端?将这些客户端模板与Backbone.js,Ember.jsYUI App Library等前端MVC(MV/MVVC)框架相结合是多么可取?这些解决方案如何影响维护成本?如果不将更多框架(一个新的模板引擎和一个前端MVC框架)引入开发团队的技术堆栈,尝试这样做会更好吗?有没有办法减少冗余?

如果该解决方案不正确,那么我们是否缺少某些东西,并且可以通过我们的JavaScript做得更好,以保持我们现有的异步HTML-from-JSON结构并将其编入索引,因此我们不需要引入新的东西到架构堆栈?当业务需求发生变化时,我们确实不必更新表示层的两个版本.

model-view-controller seo automation dry mustache

31
推荐指数
2
解决办法
6397
查看次数

Drupal是否符合MVC范式?

Drupal经常被称为内容管理框架,它是否符合MVC范式?如果是这样,Drupal如何实现MVC?

谢谢.

model-view-controller drupal

30
推荐指数
2
解决办法
2万
查看次数

什么是magento报价?

我无法理解什么是引用.有人可以详细解答什么是magento报价,他们存储什么数据,他们的生命周期和其他相关信息?

编辑:请注意区别:Magento vs Magneto.还有"magento"和"mvc"标签.

model-view-controller magento

30
推荐指数
1
解决办法
1万
查看次数

JQUERY ajax将值从MVC View传递给Controller

我想要的是将View中的txtComments值(使用jquery/ajax)传递给Controller.

问题是ajax/jquery不接受脚本标记为字符串.这意味着,当我在txtComments中输入任何脚本/ html标签时,ajax会进入错误功能而无法进入控制器.

这是jQuery:

        $('#btnSaveComments').click(function () {
            var comments = $('#txtComments').val();
            var selectedId = $('#hdnSelectedId').val();

            $.ajax({
                url: '<%: Url.Action("SaveComments")%>?id=' + selectedId + '&comments=' + escape(comments),
                type: "post",
                cache: false,
                success: function (savingStatus) {
                    $("#hdnOrigComments").val($('#txtComments').val());
                    $('#lblCommentsNotification').text(savingStatus);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    $('#lblCommentsNotification').text("Error encountered while saving the comments.");
                }
            });
        });
Run Code Online (Sandbox Code Playgroud)

这是控制器:

        [HttpPost]
        public ActionResult SaveComments(int id, string comments){
             var actions = new Actions(User.Identity.Name);
             var status = actions.SaveComments(id, comments);
             return Content(status);
        }
Run Code Online (Sandbox Code Playgroud)

我也试过$('#txtComments').serialize()而不是逃避(评论),但仍然是一样的.

ajax model-view-controller asp.net-mvc jquery

30
推荐指数
3
解决办法
19万
查看次数

在VS2017中找不到ADO.net实体数据模型模板

我试图在Visual Studio 2017中创建一个ASP.NET MVC Web应用程序.我需要采用EF数据库优先的方法来完成工作.

不幸的是,我在"数据"模板文件夹中找不到ADO.NET实体数据模型模板:

在此输入图像描述

我尝试过以下对我不起作用的建议.

  1. 通过NuGet安装Entity Framework 6.x.
  2. 双击最新的msi文件手动安装包
  3. 将.NET版本从4.6.x更改为3.5

注意:我的VS 2015和VS 2017都安装在我的机器上.只有VS 2017才有问题.

我创建了ASP.NET MVC项目如下:

File -> New -> Project -> Web -> ASP.NET Web Application (.NET Framework) -> MVC
Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题的解决方案?

.net model-view-controller asp.net-mvc entity-framework visual-studio-2017

30
推荐指数
8
解决办法
5万
查看次数

使用Spring,在web.xml中映射到root,找不到静态资源

我要做的是将请求映射到servlet根目录(正确的术语?).我正处于将URL映射到正确视图的位置,但无法找到作为页面一部分的所有静态内容--css,javascript,images.

所以在我的web.xml中,我的servlet标签看起来像这样

<servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我的控制器看起来像这样:

@RequestMapping("/shop")
public class TheShopController extends MyBaseController {

    public static String VIEW = "Tile.Shop";

    @Override
    @RequestMapping(method = RequestMethod.GET)
    protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
        ModelAndView mav = new ModelAndView(VIEW);
        return mav;
    }

}
Run Code Online (Sandbox Code Playgroud)

MyBaseController非常简单.它看起来像这样:

public abstract class MyBaseController extends AbstractController {

    protected Logger log = Logger.getLogger(getClass());

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) 
        throws Exception {

        ModelAndView mav = processRequest(req, resp);
        return mav;
    }

    protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}
Run Code Online (Sandbox Code Playgroud)

我在视图层中使用Tiles.我的配置如下: …

model-view-controller spring tiles

29
推荐指数
2
解决办法
6万
查看次数

为什么不调用我的ember.js路由模型?

我刚刚开始学习Ember.js(购买了PeepCode截屏视频),并且从中学到了很顺利,但在尝试编写我的第一个Ember应用程序时遇到了问题.

这是(嵌套)路由映射:

App.Router.map(function () {
    this.resource('bases', { path: '/' }, function () {
        this.resource('base', { path: ':base_id' }, function () {
            this.resource('places', function () {
                this.resource('place', { path: ':place_id' });
            });
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

这允许这样的网址:domain.com/#/yokota-ab-japan/places/4c806eabd92ea093ea2e3872

yokota-ab-japan是一个基地(在日本的空军基地) 4c806eabd92ea093ea2e3872的id是Foursquare上的场地的id

当命中places路由时,我通过调用foursquare api设置数据,遍历JSON以创建App.Place对象数组,并返回该数组.

App.PlacesRoute = Ember.Route.extend({
    model: function () {
        var placesData = Ember.A();
        $.getJSON('https://api.foursquare.com/v2/venues/search?ll=35.744771,139.349456&query=ramen&client_id=nnn&client_secret=nnn&v=20120101',
            function (data) {
                $.each(data.response.venues, function (i, venues) {
                    placesData.addObject(App.Place.create({ id: venues.id, name: venues.name, lat: venues.location.lat, lng: venues.location.lng }));
                });
            });

        return placesData;
    }
});
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好.我使用这个模板显示placesData数组:

<script type="text/x-handlebars" …
Run Code Online (Sandbox Code Playgroud)

javascript ajax model-view-controller json ember.js

29
推荐指数
2
解决办法
1万
查看次数