Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zend框架MVC设计

Zend框架MVC设计
EN

Stack Overflow用户
提问于 2009-03-27 11:55:09
回答 2查看 1.3K关注 0票数 3

我在zfforums上也问过这个问题,但我可能会在这里得到答复。

因此,Zend框架是一个通用的、灵活的、松散耦合的、高质量的框架。但是,我发现一些MVC部分不一致,而且过于复杂。希望你们中的一些人能够证明zf的一些设计决策是正确的,并回答一些问题:

一般性问题/评论

  1. 为什么zend不遵循与其他zend组件相同的命名约定?例如,mvc使用小写,多个目录名和类名不以目录信息作为前缀,因此它们不容易自动加载。
  2. 我想要添加模块根目录的选项。这样,我就不必通过添加控制器/模块目录来显式配置dispatcher。我就可以把它放到一个模块里,并且可以立即访问它。
  3. 为什么视点和行动助手之间有区别?目前,帮助程序的设计并不是为了在整个代码中共享,而且加载和访问帮助程序的方法也不一致。其他框架允许您在代码中的任何地方共享相同的帮助。我不认为有必要专门处理和违反干法。

Zend View问题

  1. 为什么视图使用"$this“来访问资源?我不认为需要额外的打字。其他一些框架提取()视图变量数组,并允许从视图中加载全局函数或自动加载静态帮助程序: myHelper::someMethod();
  2. 为什么视图助手每个类只允许一个函数?这导致了大量的类和相关的维护。正如前面提到的,我更喜欢带有任意数量方法的静态类。
EN

回答 2

Stack Overflow用户

发布于 2009-03-27 17:26:11

我在一个巨大的内联网站点中使用,因为它的早期阶段是0.3或0.4,我认为,我遵循了大多数关于您的问题的决定。我试着解释一下:

  1. 在大多数情况下,您不需要使用模块。您可以将所有控制器放在您的application/default目录中,将它们命名为IndexControllerHelpController,您就完成了,只需访问http://www.domain.com/http://www.domain.com/help即可。 如果项目开始增长,您可以按自己的意愿添加模块,以模块(目录名) Admin_IndexControllerForum_PostController的名称作为前缀,由http://www.domain.com/admin (您在admin模块、index控制器中;而不是在default模块/admin控制器中)访问它们。
  2. 例如,您可以在applicatoin/modules上设置模块目录,并将FrontController配置为查看模块的此目录。每当您创建一个新目录并将视图/控制器放置在其中时,就会使用addModuleDictory,调度员会自动发现它们。这里就是一个例子。
  3. 据我所见,它们的用途显然是不同的。ViewHelpers用于在视图中直接生成标记和呈现其他操作,抽象菜单创建、侧边栏等。OTOH ActionHelpers与调度过程交互,例如允许您重定向到另一个操作。

视图

  1. 在乞讨的过程中,我也觉得有点尴尬,但我习惯了。我认为主要原因不是为了污染名称空间,但这可能是错误的。顺便说一句,我不太喜欢使用extract(),但这只是我个人的喜好。
  2. 主要原因是每个文件不允许有一个以上的控制器:自动加载。使用$this->someViewHelper()时,底层引擎将在插件路径中查找名为*_SomeViewHelper_Helper的类。另一个原因是静态类很难进行单元测试。甚至有人提议将FrontController重写为实例类,而不是Singleton类。

关于你在第二段中说的过于复杂的部分,你是对的,开发人员和社区都知道这一点。它只需要这样来容纳所有的要求和变化。

最后,我认为ZF是一个非常强大的框架,给我们做我们想做的事情的自由。

我希望我能帮你解决问题。

票数 5
EN

Stack Overflow用户

发布于 2009-03-27 13:39:47

我不知道这些问题的全部答案,但它们是有趣的问题,所以我会尝试,希望有人能填补空白。

一般信息

  1. 非默认模块中的类以模块名称(例如Admin_IndexController )作为前缀,并驻留在/admin/控制器中。我认为分离和不一致命名(相对于库类)的原因是,在嵌套的文件夹结构中使用它们几乎没有什么好处。控制器是您实现的一部分,所以我个人认为这是有意义的。然而,遍历这些文件夹确实有点令人厌烦。
  2. 您可以修改dispatcher,或者编写插件来扫描目录并添加它们。
  3. 这里肯定有重叠-- URL助手就是一个很好的例子。通常,视图助手会生成标记,所以我认为有足够大的区别。

视图

  1. 我不知道确切的原因,但我想它可以让其他助手和查看功能更容易地协同工作。例如,如果您已经使用doctype助手来设置doctype,表单元素帮助程序可以酌情生成XHTML或HTML。
  2. 它肯定会导致很多类,但我不确定如何维护。我没有遇到任何问题。我可以看到静态类中的用法,但请记住,Zend_View不会阻止您使用它们。如果包含路径中有静态类(并使用Zend_Loader或类似的类),则可以使用它们代替视图助手,也可以添加到视图帮助器中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/691266

复制
相关文章
SpringBoot中JPA的基本使用
JPA(Java Persistence API)是Java的持久化API,用于对象的持久化。它是一个非常强大的ORM持久化的解决方案,免去了使用JDBCTemplate 开发的编写脚本工作。JPA通过简单约定好接口方法的规则自动生成相应的 JPQL 语句,然后映射成 POJO 对象。
砒霜拌辣椒
2023/08/23
1.4K0
SpringBoot中JPA的基本使用
Spring Boot JPA 中transaction的使用
transaction是我们在做数据库操作的时候不能回避的一个话题,通过transaction,我们可以保证数据库操作的原子性,一致性,隔离性和持久性。
程序那些事
2020/07/08
2.3K0
Spring Boot JPA中关联表的使用
本文中,我们会将会通过一个Book和Category的关联关系,来讲解如何在JPA中使用。
程序那些事
2020/07/08
2.2K0
使用JPA中@Query 注解实现update 操作
使用JPA中@Query 注解实现update 操作,代码如下: @Transactional @Modifying(clearAutomatically = true) @Query(value =
hbbliyong
2018/03/06
1.3K0
使用JPA中@Query 注解实现update 操作
spring使用jpa进行update操作主要有两种方式: 1、调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.save(Iterable<T> entities) 3)保存并立即刷新一个实体:repository.saveAndFlush(T entity) 注:若是更改,entity中必须设置了主键字段,不然不能对应上数据库中的记录,变成新增(数据库自动生成主键)或报错(数据库不自动生成主键)了 2、@Query注解,自己
hbbliyong
2018/03/06
2.3K0
JPA 中 sql 预编译 -- EntityManager 使用 预编译
实现方式 : 1. 注入em: @PersistenceContext private EntityManager entityManager; 注入方式 2: @PersistenceUnit private EntityManagerFactory emf; 2. 得到em: private EntityManager getEm() { return this.entityManager; } 对应第2种注入方式: /** * 得EntityM
微风-- 轻许--
2022/04/13
7550
【Google Play】从 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )
首先 , 创建 Intent , 设置其 Action 为 “android.intent.action.VIEW” ,
韩曙亮
2023/03/30
6.3K0
ExtJS中的全局变量的保存和使用
前阵子研究ExtJS,对于如何在Sencha Architect软件中使用全局变量伤透了脑筋。现在我一共发现了两种:
提莫队长
2019/03/01
2.4K0
ExtJS中的全局变量的保存和使用
JPA实体类中的注解
@Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应,如果是逆向生成表的话就会以简单类名作为表名   如果指定名称,例如@Table(name="tb_user"),就表示映射到数据库中的tb_userz这个表; @Id   标注于属性上,通常是在get方法上,也可以在属性的声明上。   用于表示该属性作为ID主键 @GeneratedValue
二十三年蝉
2018/03/29
4.1K0
工作流中的数据持久化详解!Activiti框架中JPA的使用分析
上面的例子展示了JPA结合Spring和参数化方法表达式的强大优势 :所有的流程就不需要自定义java代码(Spring bean除外),大幅度的加快了流程部署
攻城狮Chova
2022/01/22
1.9K0
工作流中的数据持久化详解!Activiti框架中JPA的使用分析
迈外迪CEO张程:在商业中,可供参考的数据大约只有总数的30%
迈外迪CEO张程:在商业中,可供参考的数据大约只有总数的30%
数据猿
2018/04/25
1.1K0
迈外迪CEO张程:在商业中,可供参考的数据大约只有总数的30%
javascript中的后退和刷新
<input type=button value=刷新 onclick=”window.location.reload()”> <input type=button value=前进 onclick=”window.history.go(1)”> <input type=button value=后退 onclick=”window.history.go(-1)”> <input type=button value=前进 onclick=”window.history.forward()”> <input type=button value=后退 onclick=”window.history.back()”> 后退+刷新<input type=button value=后退 onclick=”window.history.go(-1);window.location.reload()”>在C# Web程序中,如为页面按钮写返回上一页代码
全栈程序员站长
2022/09/06
9510
spring data jpa @Query注解中delete语句报错 : @Modifying注解的使用spring data jpa @Query注解中delete语句报错
spring data jpa @Query注解中delete语句报错 项目中需要删除掉表中的一些数据 @Query("delete from EngineerServices es where es
一个会写诗的程序员
2018/08/17
2.1K0
Sequence在Oracle中的使用
  Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。
庞小明
2018/08/01
5.5K0
Transformer 在RxJava中的使用
Transformer,顾名思义是转换器的意思。早在 RxJava1.x 版本就有了Observable.Transformer、Single.Transformer和Completable.Transformer,在2.x版本中变成了ObservableTransformer、SingleTransformer、CompletableTransformer、FlowableTransformer和MaybeTransformer。其中,FlowableTransformer和MaybeTransformer是新增的。由于 RxJava2 将Observable拆分成 Observable 和 Flowable,所以多了一个FlowableTransformer。同时,Maybe是 RxJava2 新增的一个类型,所以多了MaybeTransformer。
fengzhizi715
2018/08/24
8K0
Transformer 在RxJava中的使用
iptables在centos中的使用
yum install -y iptables && yum install -y iptables-services
93年的老男孩
2019/12/18
11.2K0
XML 在SQLServer中的使用
SQL Server对于XML支持的核心在于XML数据的格式,这种数据类型可以将XML的数据存储于数据库的对象中,比如variables, columns, and parameters。当你用XML数据类型配置这些对象中的一个时,你指定类型的名字就像你在SQLServer 中指定一个类型一样。 XML的数据类型确保了你的XML数据被完好的构建保存,同时也符合ISO的标准。在定义一个XML数据类型之前,我们首先要知道它的几种限制,如下: 一个实例的XML列不能包含超过2GB的数据。 一个XML的列不能是索引
用户1217611
2018/01/30
7.9K0
Dotenv在nestjs中的使用
Dotenv 是一个零依赖的模块,它能将环境变量中的变量从 .env 文件加载到 process.env 中。
挥刀北上
2021/12/20
17.2K1
Dotenv在nestjs中的使用
PageHelper在springboot中的使用
使用PageHelper.startPage 静态方法调用startPage : 特点:
知识浅谈
2021/03/03
4.1K0
点击加载更多

相似问题

在Play Framework1.x/ JPA中使用" in“构建查询有更简单的方法吗?

15

使用Play Framework1.x,如何让JPA在生产模式下创建缺少的DB表?

11

Play Framework1.x webfonts CORs问题

17

JPA在刷新之前保存瞬态实例

11

使用@AllowFeature方法的Play Framework1.x函数测试

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档