2011-10-10 63 views
7

我一直在编码多年,发现自己处于一种沮丧的状态。我正在研究一种新的基于Web的服务,该服务也具有UI,并且将从头开发。它会使用一些开源组件,但主要是一个新的东西。基于Web的信息系统的PHP/JavaScript设计模式

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

  • PHP后台
  • HTML视图
  • CSS样式
  • JavaScript的前端
  • AJAX异步连接

我想他们都遵循相同的“模式”,以这种方式,系统中的模块由一个文件夹或一组文件组成,这些文件包含所有这些c该模块中的组件。

但是我很难得到这个架构,所以我很喜欢它。这是我到目前为止:

  • 整个主系统或多或少写在程序PHP。这解决了请求URL,处理缓存,日志记录和调试,并加载到其他组件中。
  • PHP在构建页面时,会根据当前模块加载模块特定的JavaScript文件,CSS文件,HTML文件和其他组件。这意味着每个模块都尽可能轻便,同时可以根据当前模块的需要进行扩展。
  • 系统还包含可在系统范围内使用的对象(如“用户”或其他类的类)的OOP组件。
  • 该系统是用MVC原则构建的,尽管没有OOP。

但是我确实感觉到 - 以过程方式构建主系统。我开始在OOP开始写它,但很快就发现自己头痛,因为必须让所有的东西都适合同一个系统。这是OOP,但它紧密结合,在写OOP方式时我不喜欢它,组件实际上并不是独立的,或者只是一个管理的麻烦。

是否有任何模式或指导我可以按照以获得更好的结果?我喜欢当前系统的是,我可以调用任何东西,预览视图呈现PHP或HTML视图,CSS样式,附加的Javascript函数和按需AJAX通信,保持脚部小巧玲珑,但感觉很脏。我甚至使用全局的主数据库连接(尽管它是一个全局对象)。

任何想法?如果它只是一种语言,那么它就不会成为一个问题,但试图让所有的东西一起工作有点让人头疼。

谢谢!

+3

你已经研究数千种PHP框架的/ CMS系统的/ etc?有很多这方面的例子。 – Mat

+0

它很难回答你的问题,因为你没有提出任何真正的问题。我目前正在研究这样一个几乎和你的系统一样的系统,但是有一些差异。我正在使用MVC/OOP。我无法想象你正在程序上处理它。我认为,直到你的项目有一些界限,在OOP中不应该有任何问题。 –

+0

您可以查看企业应用程序架构模式,GoF模式等,并自己实施它们。然而,最简单的(也是最明显的)答案是查看框架(已经面对这个_exact_问题)是如何实现这些模式的,并且(a)使用框架或(b)将框架的方法调整到您的应用程序中。在你选择的范例中寻找开源框架,查看他们如何做事,并看看你的应用程序有什么样的嘲弄。 –

回答

4

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

我学到了很多东西,而creating Agile Toolkit

  • 看看桌面系统。 - Cocoa,目标Windows和其他面向对象的桌面系统早已解决了这些问题。创建视图,连接操作,定义回调。它映射到HTML模板化视图,JavaScript绑定和AJAX请求。

  • 运行时对象树。在Agile Toolkit中,第一阶段是初始化。在这个阶段,对象被插入彼此。例如,将Button添加到Form中并将Form添加到Page中。然后是渲染阶段,从所有东西递归地生成HTML。这更有意义的是让组件回显HTML。

  • jQuery UI小部件。使用这些是解决许多问题的好方法。 Agile Tolokit中的视图可以与各自的jQuery UI Widget进行交流。

  • 您提到的对象是Agile Toolkit中的“Models”。如果你正在寻找独立版本,你可以依靠一些ORM框架。我已经让自己的观点更加紧密地融合在一起。

  • 重新考虑解耦。如果你正在开发自己的所有系统,那么耦合给你带来很多好处。特别是如果它是面向对象的架构,并且你继承了东西。您需要一些Java经验或桌面开发经验才能正确使用这些东西。

链接:

+0

这不完全是我正在寻找的东西,但它肯定比我臃肿的框架更接近我的想法。 – kingmaple

2

不知道别的,我的想法:

  • 如果你不喜欢你的OOP代码,你可能设计是错误的。面向对象的想法是对象很自然地表示事物,因此它们应该很容易处理。如果这是你不喜欢的耦合,那么有技巧可以解决这个问题。
  • 听起来像你的MVC模式是错误的。 HTML/CSS/JavaScript的东西都应该在视图方面处理。在我看来,你已经使用了一些MVC原则,而忽视了其他原则。当然,如果没有你的代码,这只能是一个怀疑。
+0

嗯,这取决于。从最经典的意义上讲,MVC与人们通常实现它的方式不同。 Javascript和浏览器是一个控制器,而不是一个视图。但是,除此之外,我的主要问题是,我有这个巨大的单一类的主引擎,这是毫无意义的,因为一切都依赖于它。我一直觉得,如果有一个类的单个实例(并且永远不会超过一个),它首先不应该是一个类。 – kingmaple

+0

我同意JavaScript的一部分:它可以是控制器的东西。如果你只能有一个类的实例(并且永远不会有多个),那并不意味着你不应该上课。然而,这听起来像你试图上帝类。不要这样做。 –

+0

但是,你可以推荐我看看?因为我需要一个包含主要组件(如主CSS文件,用于PHP和JavaScript/AJAX的主函数库以及CSS文件,函数库和每个模块按需的JavaScript/AJAX的主要函数库)的系统。我希望尽可能减少占地面积,而每个模块都可以独立工作。现在我同意这些模块应该是主类的扩展类,但是如何构建它的工作架构呢?如果不在上帝阶级中,解决方案在哪里?我只需要一些指导,因为我不想妥协:) – kingmaple