mol*_*024 9 php model-view-controller design-patterns single-responsibility-principle symfony
我越是使用Symfony2并且与它的形式斗争越多,我得出的结论是它们是一个巨大的可怕的野兽,甚至不应该存在.
我在这里发现了这篇文章 ,我发现我同意作者.即使文章是Symfony的1.x的,我认为它仍然适用于在Symfony2中的表单组件.看起来表单组件似乎试图在一个地方解决属于模板,控制器和模型的问题.这不是严重违反MVC和/或SRP(单一责任原则)吗?
这可能是一个不同的问题,但我觉得它有点相关 - 我也注意到symfony的许多可用包试图解决视图外的视图问题,例如:
KnpMenuBundle - 您在服务器端使用oo接口生成菜单(为什么不在它们所属的视图层中?)
IvoryCKEditorBundle - 将textarea转换为ckeditor是在视图文件中的一个jquery行中完成的,那么为什么这个bundle存在呢?我甚至不想计算那里的行数.
因此,那种好像有在Symfony的核心遍地都是这些违规还是我只是没有得到它?
Ber*_*sek 21
表单处理的问题在于它违反了MVC的定义.这是一个被称为"横切"的问题,并且过去已经通过科学进行了研究.例如,使用WebJinn进行Domain Driven Web Development的文章是关于该主题的有趣读物.
举个例子,考虑一下表单与MVC不同层的关系:
模型:
控制器:
视图:
因此,不可能编写不触及所有这些层的表单抽象机制.相反,解决方案是根据MVC将表单库本身构建到实现SRP的不同层和子组件中.如果您查看Symfony2 Form组件,它会很好.;)
那为什么它是一个"巨大的可怕的野兽"?第一个问题是抽象问题.想象一下简单的下拉菜单.如果我们想重用下拉代码,我们需要以某种方式对其进行抽象.现在查看上面的列表,即使这个简单的输入也会触及MVC应用程序的所有三个层.你如何抽象出一些有意结构化为三个不同部分的东西?
第二个问题是特征多样性.表单库从未解决开发人员在日常生活中遇到的所有问题.因此,所有这些层和抽象机制都需要是可扩展的,以便您可以使它们的行为与您希望的完全相同.
虽然可扩展,但Form组件已经解决了数百个您甚至不必考虑的微小问题.如何输入日期,如何使用不同的UI(下拉菜单,复选框,单选按钮等)选择一个或多个选项列表,如何再次保护表单安全漏洞以及更多我可以撰写论文的主题关于.
您看到表单库变得非常复杂.我们编写这种"大型可怕的野兽"的最佳选择是让初学者尽可能简化API,为更高级的用户尽可能灵活,并撰写有关利用其全部功能的大量文档.最后一点肯定还缺乏(请帮忙!),但我们一直在努力完成上述所有工作.
另一方面,遗憾的是,将复杂问题简化为简单问题是不可能的.
那些更简单的其他表单库怎么样?在我看来,这些甚至没有试图解决Symfony2 Form组件已经为您解决的大多数问题.:)
2014年1月24日更新:对于任何想要了解更多(更多)的人,这是我发表的关于这个主题的论文.
归档时间: |
|
查看次数: |
1219 次 |
最近记录: |