我有一个具体的问题,即可以使用一个笼统的回答...当建立多层应用在PHP,一切必须完成的业务逻辑层,或者可以在任何层做的工作。例如,可以说我是建立一个应用程序,显示出用户信息(从数据库)在介绍层。我应该使用业务层,以简单地通过数据来表示层,或只是得到的信息数据库直接在介绍层。应该介绍层的使用只是为了提出数据的存取层的使用只是为了获得数据,所有工作要做,在业务层?

此外,发言的不同层,它是最好的做事程序,或者利用面向对象(如使用包括展示的模板vs使用的一类,包括模板,对数据进行验证程序vs使用的一类或功能的vs类获取数据库中的数据,等等。)

如你所见,我试图去理解事物如何运作,并最好的方法来做的事情。这就是说,如果您有任何建议,或任何一般性建议的主题上...请离开他们。。

感谢

有帮助吗?

解决方案

网络应用程序和N层是有趣的,主要是因为这一概念的多层已经扩大与广泛采用象和阿贾克斯,或闪光灯和XMLRPC.此 图表Webopedia 显示一个交错的蓝线,表示这一点。以总结:你的业务,访问者,并表示逻辑不仅可能存在的服务器--但在某些情况下,正在浏览器。意图N层,但是,是 可分性.如果你需要更改用户界面,或数据库,或增加其它用户界面,你应该不会影响你的商务逻辑。这是什么确定你的API--预测的天你HTML和CSS被丢弃Flex,并MySQL改变了Oracle。

这是要求确定,在某些网络应用程序,我已经使用的变化N层同时使用。例如LyrisHQ(电子邮件ASP)。他们有一个客户的网络应用程序。最近,他们盯着他们推闪基础的应用程序。这显然是运费的一个很大的数据浏览器,并有可能是一位商业逻辑复制在闪的用户界面。他们必须保持这两个应用程序,然而,由于任何一个是必要的,对于不同的(和重叠)的要求。

最常见的PHP应用不考虑航运多的格式化数据浏览器。但如果你是,这会告诉你很快,你会怎么想到的设计你Api。非常可能的是,你想要控制器可以谈XMLRPC,休息,或肥皂...除了一个类似的内部控制器类PHP演示模板的使用。这将严格意味着一个简单的登录网页页面,你会有一个PHP模板,用于登录的形式,谈到LoginController类。XML的接口也会使用相同的LoginController类。正如你设想,你会疯狂写SQL入Ajax请求...你将会严格避免编写查询到您呈现的模板。

业务层可以或多或少是严格的,因为经常从来没有要求交换品牌的数据库后结束。在一个严格的多层设计,怎么你的业务对象将谈谈你的数据库将为如果你可以从MySQL MS SQL而没有重写业务层。有时候这样做是通过模拟对象的每个表(表网关),每个行(活动记录),每个加入,或者每一笔交易。这是我喜欢的东西公设辩护人或PHP-ADO是有用的,但不足以完全隔离。奥姆/持久性层Java像休眠表现出更好的这种隔离,往往是通过提供一个目的查询语言(OQL).

我自己,我目前正在进行后结束的过渡,从一个MySQL基PHP应用程序通过以MS SQL之一。该应用程序只有曾经使用直接SQL查询。想象一下如何选择要采取一系列的查询一类,要么抽象,或子类,并希望不改变业务逻辑。至少你会想让你SQL呼吁间接的。(S.O.后PHP奥姆.)

最后,你的问题有关的面向对象:使用它必须如何履行您的要求。我的个人的技术是开始与逻辑权PHP介绍的模板,用几分钟的滚球,漂亮我很快就会重构成一种类和模板。如果我有共同的想法,我打破了例行程序进入的共用的课程,努力维护DNRY原则。(A S.O.后在这里。 面向对象不是一个基本要求N层的设计。DNRY是非常重要的保持你的代码可维护性、寿。通常的最后期限和范围班摧毁。"重构",它直到你得到你需要保持下去。我敢打赌,面向对象,将有助于得到你那里。

其他提示

我曾经读过的东西说大模型(业务层)应在大控制器(访问层)是首选。

另外:这真的取决于项目。在我眼里它并不总是有意义的使用OOP的一切(可能不是每个人都同意在这里),尤其是在脚本语言如PHP它往往是更容易简单地做作为校验功能...

我绝对建议你不要在表示层调用数据库,这会破坏它的目的。

有不同的方法来多层架构和它们具有不同的建议。

,我已经用通常的形式发模型/薄控制器变体的工作Zend框架。

如果发现本文中的注意事项选择一个PHP框架是在比较不错的(在此情况下)的CakePHP到Zend框架。

在我的opionion最大的区别是由CakePHP中所采取的惯例优先配置方法,它是由Zend框架配置焦点非常不同的。

通过使用一个框架,这让很多的意义,如果实施多层架构,你是被迫或者至少推入使用OOP,这不是一件坏事的方式。

当然,你可以实现,比如用纯功能性呼叫的三层架构,但它不会是规模以及根据我的经验。

有关网站MVC模式这实际上是由于层通信的方式完全不同的,是一个很好的选择。

“正常的” 3层拱和MVC模式之间的区别是,该视图有访问控制器和模型层,其中作为表示层只能访问3层的逻辑层既拱。

我同意弗兰兹说,尤其是关于在更大的控制器更喜欢较大的车型..你也可以使用一个经验法则,以帮助区分其中的代码应该去:如果有什么关系的UI结构/流,放它在所述控制器;如果它是纯的商业逻辑,它进入在模型..

我要补充的是作为一个Java开发人员是检验出PHP水域之前有很多的经验和Struts,我花了一段时间来理解如何MVC的想法应用到脚本语言..我个人发现使用如 CodeIgnitor 系统帮了不少忙。它提供了一个框架,就像Struts和鼓励良好的MVC模式..

我的世界是这样的:

  

DB1 < - 型号1,以提供访问   功能,数据完整性,业务   规则这个数据集DB2 < - 模型2   提供存取器函数,数据   诚信服务,此业务规则   数据集

     

控制器:控制数据流   视图,过滤器/组织从数据   观点。实现了业务规则   给定的应用。知道   业务规则的 模型之间。

     

查看:无非模板的详细   通过所提供的显示数据   控制器。传递所有数据到   控制器。毫不知情   型号1或模型2或业务   逻辑管辖它们。

我建议做设计模式的一些研究,因为这是你的拼图缺少的部分。有许多的覆盖这个话题(从A按下的有好)特定的PHP书籍以及设计模式的“圣经”:的 “设计模式:可重用的面向对象软件” 的元素

让我们等待的更稳定的版本 Doctrine2

它是被与持久性无知域对象理念的发展。这将是更容易开发多层应用这一框架的帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top