基于web的信息系统设计模式


PHP/JavaScript Design patterns for web based infosystems

我已经编码多年了,并且发现自己处于挫败点。我在一个新的基于web的服务,也有一个用户界面,它将从地面开发起来。它将使用一些开源组件,但主要是一个新事物。

但这是我的问题。构建这样一个系统意味着构建所有这些组件:

    PHP后端
  • <
  • HTML视图/gh>
  • CSS样式
  • JavaScript前端
  • AJAX异步连接

我希望它们都遵循相同的"模式",即系统中的模块由一个文件夹或一组文件组成,该文件夹或一组文件包含该模块中的所有组件。

但是我有一段艰难的时间得到架构,所以我喜欢它。以下是目前为止的内容:

  • 整个主系统或多或少是用过程式PHP编写的。这解决了请求URL,处理缓存,日志和调试以及加载其他组件。
  • PHP,在构建页面时,根据当前模块加载模块特定的javascript文件、CSS文件、HTML文件和其他组件。这意味着每个模块都尽可能轻量级,同时能够根据当前模块的需求进行扩展。
  • 系统还包含可在系统范围内使用的对象的OOP组件(如"用户"或其他类型的类)。
  • 系统是用MVC原则构建的,但没有OOP。

但是我真的感觉很脏——用程序的方式构建主系统。我一开始确实是用OOP编写的,但很快就发现自己很头疼,因为必须让所有东西都适合同一个系统。它是面向对象的,但它是紧密耦合的,这是我不喜欢的,因为当它以面向对象的方式编写时,组件真的不是那么独立,或者只是管理起来很麻烦。

有什么模式或指导我可以遵循得到更好的结果?我喜欢当前系统的一点是,我可以调用任何东西,预览视图渲染PHP或HTML视图、CSS样式、附加Javascript函数和按需AJAX通信,使占用空间非常小,但感觉很脏。我甚至使用一个全局的主数据库连接(虽然它是一个全局对象)。

任何想法?如果只有一种语言,这根本不是问题,但试图让所有东西一起工作有点令人头疼。

谢谢!

http://agiletoolkit.org/实现了您正在寻找的东西。它的源代码可以在http://github.com/atk4/atk4上找到,所以你可以从那里学习。

我在创建敏捷工具包的过程中学到了很多东西。

  • 看看桌面系统。Cocoa, Objective Windows和其他面向对象的桌面系统很久以前就解决了这些问题。创建视图,连接操作,定义回调。这映射到html模板视图、JavaScript绑定和AJAX请求。

  • Runtime Object Tree。在Agile Toolkit中,第一个阶段是初始化。在此阶段,对象相互插入。例如,您将Button添加到Form中,并将Form添加到Page中。然后是呈现阶段,递归地从所有内容生成HTML。

  • jQuery UI小部件。使用这些工具是解决许多问题的好方法。在Agile Tolokit中的视图可以与各自的jQuery UI Widgets对话

  • 您提到的对象是Agile Toolkit中的"模型"。如果您正在寻找独立版本,您可以依赖于一些ORM框架。

  • 考虑脱钩。如果您自己开发整个系统,那么耦合会给您带来很多好处。特别是如果它是面向对象的体系结构并且你继承了一些东西。你需要一些Java经验或桌面开发经验来做这件事。

链接:

    什么是面向对象Web开发PHP面向对象编程
  • 敏捷工具包的执行步骤

在不知道其他事情的情况下,我的想法:

  • 如果你不喜欢你的OOP代码,你可能设计错了。面向对象的思想是对象非常自然地表示事物,因此它们应该非常容易处理。如果你不喜欢这种耦合,有一些技术可以修复它。
  • 听起来你的MVC模式是错误的。 HTML/CSS/JavaScript的东西都应该在视图方面处理。在我看来,您使用了一些MVC原则,而忽略了其他原则。当然,如果没有您的代码,这只能是一种怀疑。