微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP中的多层……正确的方法?

我有一个特定的问题,可以使用一般答案……在PHP中构建多层应用程序时,一切都必须在业务逻辑层中完成,或者任何层都可以工作……例如,让我说我在构建层上构建一个显示用户信息(来自数据库)的应用程序.我应该使用业务层简单地将数据传递到表示层,还是直接从表示层中的数据库获取信息.如果表示层用于呈现数据,那么访问层使用JUST来获取数据,所有工作都在业务层完成?

另外,谈到不同的层,最好是在程序上做事,或者使用OOP(比如使用includes来显示模板,使用类来包含模板,在程序上验证数据与使用类,或者使用函数和类来获取来自数据库的数据等)

正如您所看到的,我正在努力了解事情是如何运作的,以及最好的做事方式.话虽这么说,如果你有任何建议,或任何关于这个问题的一般性提示……请留下他们..

谢谢

解决方法:

Web应用程序和N层很有意思,主要是因为随着JSON和AJAX,或Flash和XMLRPC的广泛采用,N层的概念已经扩展.这个chart on Webopedia显示了交错的蓝线,表达了这一点.总结一下:您的业务,访问者和表示逻辑不仅可以存在于服务器上 – 而且在某些情况下,可以存在于浏览器中.然而,N层的意图是可分离性.如果您需要更改UI或数据库,或添加其他UI,则不应影响业务逻辑.这就是决定你的API的原因 – 预测你的HTML和CSS被弃用的那一天,并且MysqL已经被更换为Oracle.

这是需求确定的,在我使用的一些Web应用程序中,同时使用N层的变体.以LyrisHQ(电子邮件ASP)为例.他们有一个客户Web应用程序.最近,他们盯着推动基于Flash的应用程序.这显然会将大量数据传递给浏览器,并且Flash UI中可能存在一些重复的业务逻辑.但是,他们必须维护这两个应用程序,因为任何一个都是不同(和重叠)要求所必需的.

最常见的PHP应用程序不考虑将大量未格式化的数据传送到浏览器.但如果你这样做,这将很快告诉你如何设计你的API.很可能,除了PHP演示模板使用的类似内部控制器类之外,您还需要能够与XMLRPC,REST或SOAP …进行对话的控制器.这将严格意味着一个简单的Web登录页面,您将拥有一个与LoginController类对话的登录表单的PHP模板. XML接口同样使用相同的LoginController类.就像你会假设你将sql写入Ajax请求一样疯狂……你将严格避免在你的演示模板中编写查询.

业务层可以或多或少地严格,因为通常不需要切换数据库后端的品牌.在严格的N层设计中,业务对象如何与数据库通信就好像您可以从MysqL切换到MS sql而无需重写业务层.有时,这是通过为每个表(表网关),每行(活动记录),每个联接或每个事务建模对象来完成的.这是像PDO或PHP-ADO这样的东西很有用,但不足以完全隔离.像Hibernate这样的Java中的ORM / Persistence层通常通过提供对象查询语言(OQL)来更好地证明这种隔离.

我自己,我目前正在进行从基于MysqLPHP​​应用程序到MS-sql应用程序的后端转换.该应用程序只使用过直接SQL查询.想象一下,选择如何在类中进行一系列查询,并抽象它们或子类化,并希望不改变业务逻辑.至少,您需要间接地进行所有sql调用. (S.O. post on PHP ORM.)

最后,关于OOP的问题:使用它如何满足您的要求.我的个人技术是在PHP演示模板中开始使用逻辑几分钟来推动滚动,很快我就会将它重构成一个类和一个模板.如果我有共同的想法,我会将例程分解为共享类,努力保持DNRY原则. (A S.O. post on that here. OOP不是N层设计的基本要求.DNRY对于保持代码可维护性非常重要.通常截止日期和范围转移会破坏API.重构它直到得到你需要继续前进的东西.I打赌OOP将帮助你到达那里.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐