我是PHP的新手,但在具有SOA架构和多层应用程序的复杂企业环境中经验丰富的Java程序员。在那里,我们通常在中间层实现具有业务逻辑的业务应用程序。
我正在编写一个替代货币系统,该系统应该易于部署并可由个人和社区进行定制;它将是开源的。这就是为什么php / mysql似乎是我的最佳选择。
用户拥有帐户,他们可以获得余额。此外,系统根据交付的总服务和总可用资产计算价格。
这意味着,在购买时会发生一系列计算;余额和总数得到更新;这些是派生的数字,通常不会放入数据库中。
尽管如此,我还是将触发器和存储过程放入db中,因此在php代码中没有进行任何更新。
人们怎么想?这是一个好方法吗?我的经验告诉我,这不是最好的解决方案,并促使我实施中间层。但是,我甚至不知道该怎么做。另一方面,到目前为止我对存储过程的看法在我看来是最合适的。
我希望我明白我的问题。所有评论赞赏。可能没有“完美”的解决方案。
答案 0 :(得分:1)
正如现在的趋势一样,远离数据库通常是一件好事。您可以更轻松地控制版本,并且只需一种语言即可使用。更重要的是,我觉得存储过程是一个很难的方法。另一方面,如果你喜欢那些东西并且你对MySql中的SP感到满意,那么它们并不坏,但我的感觉一直是它们更难以调试并且难以处理。
关于触发器问题,我不确定您的应用是否需要这样做。由于触发计算的事件是由用户调用的,因此即使用户在此期间被重定向到“等待”页面或其他页面,这些事情也可能发生在PHP中。显然,真正的触发器只能在数据库级别上完成,但您可以使用每X秒运行一次PHP脚本的守护程序线程......不惜一切代价避免这种情况,并尝试从用户端触发事件。 / p>
所有这些都说,我想在PHP上插入我最喜欢的数据访问层解决方案:Doctrine。它并不完美,但PHP就是它,它已经足够好了。是否有您想要的大部分内容,并让您使用对象而不是数据库过程等等。
关于你的标题,PHP中的多个层是完全可行的,但你必须这样做并尊重它们。 PHP代码可以调用其他PHP代码,它现在(5.2+)很好地OO和所有这些。确保忽略这样一个事实:你会看到许多PHP代码是完全废话,甚至不使用方法,更不用说层,以及体面的OO建模。如果您想要这样做,包括自己(或使用现有的)MVC解决方案,这一切都是可能的。
答案 1 :(得分:1)
将大量功能推送到数据库级别而不是数据抽象层的一个问题是,您将被锁定在DBMS的功能集中。通常编写开源软件,以便它可以与不同的DB一起使用(当然不总是如此)。有可能在未来的道路上,您可以轻松地移植到postgres或其他一些DBMS。现在使用大量MySQL特定功能将使这更难。
答案 2 :(得分:0)
使用触发器和存储过程以及数据库服务器提供的其他功能绝对没有问题。它运行良好,您正在充分发挥数据库的潜力,而不是简单地将其降级为简单的数据存储。
但是,我确信,对于这里与你(和我)一致的每个开发人员,至少有许多人认为恰恰相反,并且有很好的经验。
答案 3 :(得分:0)
谢谢你们。
我使用的是db触发器,因为我认为控制事务完整性可能更容易。正如您可能意识到的那样,我是一名开发人员,他也在努力掌握数据库知识。
现在,我看到有解决办法将PHP代码分布在多个层上,不仅在逻辑上而且在物理上通过部署在不同的服务器上。
然而,在这个开发阶段,我认为我会坚持我的触发器/ sp解决方案,因为这不会是错误的。分布在多个图层上需要我一致地重新设计我的应用程序。
另外,考虑开源,如果有人喜欢替代资金系统,人们可能更容易根据他们的要求更改布局,而如果人们触摸php代码我就不必担心计算出错了。
另一方面,当然,我同意db的东西可能很难调试。
数据库初始化脚本在源代码控制中,php文件也是如此:)
再次感谢