2009-09-06 75 views
2

我对PHP比较陌生,但是在具有SOA架构和多层应用程序的复杂企业环境中经验丰富的Java程序员。在那里,我们通常会在中间层使用业务逻辑来实现业务应用程序。使用PHP的多层应用程序?

我正在编程一个替代货币系统,应该易于个人和社区部署和定制;它将是开源的。这就是为什么php/mysql似乎是我的最佳选择。

用户有帐户,他们得到一个余额。此外,系统根据交付的总服务和总可用资产计算价格。

这意味着,在购买时发生了一系列计算;余额和总数得到更新;这些是派生的数字,通常不会放入数据库中。尽管如此,我采取了将触发器和存储过程放入数据库,以便在php代码中不做任何更新。

人们认为什么?这是一个好方法吗?我的经验告诉我,这不是最好的解决方案,并促使我实施中间层。但是,我甚至不知道该怎么做。另一方面,到目前为止,我对商店流程的看法在我看来是最合适的。

我希望我明确提出了我的问题。所有评论赞赏。可能没有一个“完美”的解决方案。

回答

1

就像现在这种趋势一样,远离DB一般是件好事。您可以更轻松地进行版本控制,并且只需使用一种语言即可工作。更重要的是,我觉得存储过程是一个艰难的路要走。另一方面,如果你喜欢那些东西,并且对MySql中的SP感到满意,它们并不坏,但我的感觉一直是它们更难以调试并且难以处理。

在触发器问题上,我不确定这是否是您的应用程序所必需的。由于触发计算的事件是由用户调用的,所以即使用户在此期间重定向到“等待”页面或其他页面,这些情况也可能发生在PHP中。显然,真正的触发器只能在数据库级别完成,但是您可以使用每X秒运行一次PHP脚本的守护进程线程......不惜一切代价避免这种情况,并尝试从用户端触发事件。

所有这一切都说,我想在PHP上插入我最喜欢的数据访问层解决方案:Doctrine。这并不完美,但PHP就是这样,这已经够好了。大部分是你想要的,并且让你使用对象而不是数据库过程等等。

关于你的标题,在PHP中,多层是完全可行的,但你必须做,并尊重它们。 PHP代码可以调用其他PHP代码,现在(5.2+)很好地运行OO等等。确保忽略这样一个事实,即你会看到很多PHP代码都是废话,甚至不使用方法,更不用说层级了,还有体面的OO建模。如果你想要做到这一切都是可能的,包括做你自己的(或使用现有的)MVC解决方案。

+0

顺便说一句,使用存储过程并不一定排除源控制,相反,你可以并且应该把所有的代码放到源代码控制中。 – 2009-09-06 13:12:22

+0

True Anti,任何东西都可以受版本控制,但PHP代码特别适合。 MySql SPs被困在数据库中,对吧? – 2009-09-06 13:34:15

+0

不,您将SP源代码保存在文件中(因此在版本控制中),然后在部署时将它们加载到数据库。简单:) – 2009-09-06 17:52:21

0

使用触发器和存储过程以及由您的数据库服务器提供的其他功能绝对没有问题。它的工作原理和工作良好,你正在使用数据库的全部潜力,而不是简单地将其归入简单的数据存储。

但是,我敢肯定,对于在这里与你(和我)同意的每一位开发者,至少有同样的想法正好相反,并且有很好的经验。

0

谢谢你们。

我使用数据库触发器,因为我认为这可能更容易控制事务的完整性。您可能会意识到,我是一位开发人员,他也在努力掌握db知识。

现在,我看到有解决方案将php代码分布在多个层上,不仅在逻辑上而且在物理上通过部署在不同的服务器上。然而,在这个发展阶段,我认为我会坚持我的触发器/ sp解决方案,因为这不会是错误的。分布在多个图层上需要我重新设计我的应用程序。如果有人喜欢另类金钱系统,人们可能会更容易地为他们的需求更改布局,而我不需要担心如果人们触摸php代码就会导致计算错误。

另一方面,当然,我同意数据库的东西可能会很难调试。

数据库初始化脚本的源码控制,是不是一个数据抽象层的PHP文件:)

再次感谢

1

一个与推手的功能,数据库级别的问题,是您会被锁定到DBMS的功能集中。经常编写开源软件,以便它可以用于不同的DB(当然不总是)。有可能你会想要使它容易移植到postgres或其他DBMS。现在使用大量的MySQL特定功能将会变得更加困难。