上海网站定制设计装饰网站

web/2025/10/7 2:26:06/文章来源:
上海网站定制设计,装饰网站,中企动力全网门户网站,建设好网站能赚到钱吗来源#xff1a;https://www.awaimai.com/873.html 歪麦博客最近负责一个项目#xff0c;用了 Yii Framework 的 MVC 框架#xff0c;刚开始自以为结构很稳健。但是随着对业务逻辑理解的深入#xff0c;才开始意识到问题的严重。我错误地理解了 MVC 中的 Controller…来源https://www.awaimai.com/873.html   歪麦博客最近负责一个项目用了 Yii Framework 的 MVC 框架刚开始自以为结构很稳健。但是随着对业务逻辑理解的深入才开始意识到问题的严重。我错误地理解了 MVC 中的 Controller想当然地根据以往的经验把所有的业务逻辑都放在 Controller 的 action 中去实现。于是每一个 Controller 的代码都上千行越来越臃肿。最后我下定决心重构代码起源是一个对外开放 API 接口的需求。按照现在的架构代码基本无法复用我需要把很多功能再重复写一遍这实在是无法接受。面向对象编程不仅仅是课本上的名词啊真正开始实践才发现要有面向对象意识有全局观是多么难得的一件事情。1 到底什么是 MVC模型-视图-控制器(MVC)是一种设计框架(设计模式)。MVC 的目标是将业务逻辑从用户界面的考虑中分离。这样开发者就可以更容易地改变每一部分而不会影响其他。在 MVC 中Model 代表数据和业务规则View 包含了用户界面元素例如文本表单等Controller 则管理模型和视图中的通信。MVC 在各种编程语言中均有实现例如 J2EE 应用开发中View 可能由 jsp 实现Controller 是一个 servlet现在一般用 Struts 实现Model 则是由一个实体 Bean 来实现。2 我遇到了什么问题Yii Framework 是一个流行的 PHP 框架它借鉴了 Ruby on Rails 的 ActiveRecord(AR) 概念。数据库中的每一个 table 都可以用 AR 类来方便地进行增删改查操作。它把 AR 当做 Model并推荐放在一个名为 models 的目录下面。于是我在自动生成表对应的 AR 之后便望文生义想当然地认为已经拥有了 Model 层。其实AR只不过是 DAO (数据访问层)并不是 Model 层。我们的业务几乎全放在了 Controller 里对用户提交上来的表单进行各种逻辑判断进行计算实例化 AR 对数据进行存储……因为一个 Controller 中会有多个 action每个 action 都有这样的业务处理。最后我发现我的 Controller 代码已经超过了 1000 行。突然有一天leader 说我们这个系统要开放 API 给现有的旧系统调用要给第三方接口。第三方只是要给定一个参数本系统给出个结果值而已这其中的业务处理它是不关心的。坏就坏在这里Controller 已经实现了那些业务但它是接受表单提交的怎样能够也接受 SOAP 的 xml 文档呢Controller 和套套一样应该越薄越好。它的职责应该只是接受用户的输入然后立刻转发给别的类来处理。这样 Controller 只负责提供不同的接口我们才能算是将业务逻辑分离出去而分离出去的业务也很容易进行重用。分离出来的这部分业务由谁来处理呢答案应该是 Model。3 View的职责View部分比较明确就是负责显示。一切与显示界面无关的东西都不应该出现在view里面。因此View 中一般不应该出现复杂的判断语句以及复杂的运算过程。可以有简单的循环语句、格式化语句。比如博客首页的文字列表就是一种循环。对于PHP的Web应用而言HTML是View中的主要内容。View应该从不调用Model的写方法。也就是说View只从Model中读取数据但不改写Model。所以我们说View和Model是老死不相往来的。而且View中不直接访问$_GET和$_POST应该由Controller传递给View。此外View一般没有任何准备数据处理的内容如查询数据库等。这些一般是放在Controller里面并以变量的形式传给视图。也就是说视图里面要用到的数据就是一个变量。4 Model的职责对于Model而言最主要就是保存和输出信息。比如Post类必然有一个用于保存博客文章标题的title属性必然有一个删除的操作这都是Model的内容。数据、行为、方法是Model的主要内容。实际工作中Model是MVC中代码量最大。Model是逻辑最复杂的地方因为应用的业务逻辑也要在这里表示。注意将Model与Controller区分开。Model是处理业务方面的逻辑Controller只是简单的协调Model和View之间的关系。只要是与业务有关的就该放在Model里面。Model不应该访问request、session以及其他环境数据这些应该由Controller注入。好的设计应该是胖Model瘦Controller。5 Controller的职责对于Controller主要是响应用户请求决定使用什么视图需要准备什么数据用来显示。因此对于request的访问代码应该放在Controller里面比如$_GET、$_POST等。Controller应该仅限于获取用户请求数据不应该对数据有任何操作或预处理这应该放在 Model 里面。对于数据的写操作要调用Model类的方法完成。对于用户请求的响应要调用视图渲染。此外一般不要有HTML代码等其他表现层的东西这应该是属于View的内容。6 启示Yii Framework 的官方文档中有这么一段In a well-designed MVC application, controllers are often very thin, containing probably only a few dozen lines of code; while models are very fat, containing most of the code responsible for representing and manipulating the data.简言之Rich Model is Better。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

台前网站建设公司域名备案中网站可以开通

什么是建造者设计模式?和工厂设计模式有什么区别 建造者设计模式(Builder Design Pattern)和工厂设计模式(Factory Design Pattern)都是面向对象设计中的创建型模式,但它们解决的问题和应用场景有所不同。…

wordpress如何添加百度商桥wordpress 手机端优化

简介 TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。 Tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试。其源码放在launchpad上&#xff0c…

除了Joomla用什么做网站好怎么给你新网站做seo

文章目录 继承的概念及定义继承的概念继承定义 基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员复杂的菱形继承及菱形虚拟继承菱形继承菱形虚拟继承 继承的总结和反思笔试面试题 继承的概念及定义 继承的概念 继承(inheritance) 机制是面…

来凡网站建设公司石岩企业网站建设

compose模块 模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。 默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。 version: "3&quo…

河北住房和城乡建设厅网站卡百度推广seo效果怎么样

文章目录 链表1、基本介绍2、单向链表2.1 带头节点的单向链表测试类:链表实现类: 2.2 不带头节点的单向链表2.3 练习测试类:链表实现类: 3、双向链表测试类:双向链表实现类: 4、单向环形链表**测试类**&…

莆田个人外贸网站建设wordpress插件论坛

缓存击穿 缓存击穿是指在高并发场景下,缓存中的某个 key 失效,此时大量请求同时涌入数据库查询该 key 的数据,导致数据库瞬间压力过大,甚至宕机。缓存击穿的最佳解决方案是使用互斥锁,令只有一个线程可以从数据库中查…

如果网站打开非常缓慢搜索引擎营销是什么意思

一、janus介绍 Janus 官网:https://janus.conf.meetecho.com/index.html 参考文档:https://github.com/meetecho/janus-gateway Janus是一个开源的WebRTC网关,可用于构建实时通信应用程序。它提供了音频、视频和数据传输的功能,可…

论文收录网站建设网站盈利分析

jQuery 的 .toggleClass() 方法用于在选定的元素上添加或移除一个或多个类。这个方法会检查每个元素中指定的类,如果类不存在,则添加它;如果类已设置,则删除它。这被称为切换效果。此外,可以通过使用 "switch" 参数来规定只删除或只添加类。 语法 (selector).…

网站做成app客户端百度小说排行榜风云榜单

摘要:正筹划推进旗下手机安全产品出海揽客。6月22日,腾讯无线安全产品部副总经理胡振东在上海表示,腾讯手机管家已推出了安卓国际版,下决心进军国际市场。 腾讯(00700.HK)正筹划推进旗下手机安全产品出海揽客。6月22日&#xff0c…

建设银行网站 个人客户端甘肃第三建设集团公司

1688平台商品详情接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口,通过…

选课网站开发广告联盟app

本文针对用table显示数据&#xff0c;主要是table的线条颜色处理。 1.下面的这个方法&#xff0c;比较试用于单一的table不适用于table 套着table。这样的话在某些浏览器上浏览是有差别的。table套table 有可能会出现线条加粗的情况。 <style type"text/css"> …

河北省建设厅网站登陆设置设计师培训班多少钱

《幼儿园管理学》考评作业 一、填空题 &#xff08;1&#xff09;我国学前教育各级机构权限的划分制度是 、 、 。 &#xff08;2&#xff09;管理内容的五大要素是 、 、 、 、 。 &#xff08;3&#xff09;幼儿园总务工作的特点是 、 、 、 。 &#xff08;4&#xff09;园长…

c 网站开发大气家具营销型网站源码

分支语句if1.if基本语法2 if语句的嵌套3 比较运算符号4 逻辑运算符&#xff1a;5 整数随机数初应用6 tip7.断言assert1.if基本语法 if语句开发中的应用场景&#xff1a;如果条件成立做一件事情&#xff0c;如果条件不成立做另外一件事情。有了if语句&#xff0c;程序有了分支.…

微信网站前景如何建设一个双语的网站

我的需求是改变url地址的后缀&#xff0c;其他不改&#xff0c;所以直接for循环&#xff0c;变换数字就行 也就是 字符串变量字符串 想着改变后缀就能批量爬图。但是原本的想法是错误的 for num in range(2,8):url"http://www.win4000.com/wallpaper_detail_160877_"…

网站建设中管理员登录的代码怎么写wordpress如何多用户

eslint quo对我而言&#xff0c; JUnit是Java Universe中最重要的库。 但是我认为它的新版本已经过期。 通过将方法定义作为测试定义的方法&#xff0c;JUnit非常灵活&#xff0c;需要各种技巧……抱歉的功能&#xff0c;要做您实际上应该能够使用的基本&#xff08;Java 8&…

贵阳企业自助建站系统沙坪建设集团网站

在近期于伦敦Skills Matter举行的DDD eXchange 2018会议上&#xff0c;Martin Schimak认为在最近几年间&#xff0c;领域事件引发了越来越多的讨论&#xff0c;但是我们对命令也应如此&#xff0c;在这次会议上他讨论了微服务领域的事件、命令以及长周期的服务&#xff0c;以及…

vs2008 手机网站开发哈尔滨网建公司有哪些

Easyspy是一款网络入侵检测和流量实时监控软件。作为一个入侵检测系统&#xff0c;用来快速发现并定位诸如ARP攻击、DOS/DDOS、分片IP报文攻击等恶意攻击行为&#xff0c;帮助发现潜在的安全隐患。Easyspy又是一款Sniffer软件&#xff0c;用来进行故障诊断&#xff0c;快速排查…

做算法题的网站百度一下你就知道网页

本地安装的OracleXEUniv—oracle特别版&#xff0c;免费用户可以自由使用&#xff0c;但有连接数量和存储限制。最近遇到一个问题&#xff0c;当我的SSM项目连接本地数据库oracleXE后&#xff0c;我的navicat再连接时就会报错ORA-12516&#xff0c;就是oracle的会话数超出了限制…

泛微e8做网站门户dede 电商网站

我在上一篇文章中&#xff0c;提到了目前的认证方式存在一些问题&#xff0c;需要替换为一种更简单的认证方式。 但是最后发现&#xff0c;认证这个实在是没有办法简单化&#xff0c;认证本身又是另外一个不小的话题了&#xff0c;因此关于这一点先留个坑。 本文先讨论一下另外…