2016-03-10 46 views
2

比方说,我有一个简单的多层架构的应用程序。典型的层次可能是(从底部开始,继续前进):核心/实用程序,实体/数据,业务逻辑和用户界面。类之间的依赖只应该在“向下”的方向,例如。从用户界面到业务逻辑,而不是相反。我将如何去执行这在PHP中? IDE(如PHPStorm)可以做到吗?作曲家能做到吗?您可以在PHP中执行架构层依赖关系吗?

如果我在使用Java,一种我更熟悉的语言,我通常会使用Eclipse和Maven。每个图层都是一个单独的项目,并会生成一个JAR文件。层将通过类路径相互依赖。例如,业务逻辑层(或项目)将具有util和实体JAR文件,而不是UI。如果我错误地在“向上”方向创建了一个依赖项,那么IDE会将其标记为问题并且代码不会编译。

我一直无法找到一种方法来实现在PHP中的相同。有任何想法吗?

+0

在Java中分离所有这些东西的原因之一是因为整个构建和部署周期需要时间。在PHP中,您只需将文件保存在DOC_ROOT(开发阶段位于本地计算机上)并在浏览器中聘用F5即可。 –

回答

1

类之间的依赖关系只应该在“向下”方向,例如 。从用户界面到业务逻辑,而不是相反。 我将如何去执行这在PHP中? IDE(如 PHPStorm)可以做到吗?作曲家能做到吗?

一般来说,答案是否定的(或者我还没有能够找到ho这样做)......但是可以通过良好的工程实践来实施适当的分层。

例如:

  • 系统架构师可以提供整个团队精心设计 component diagramcomposite structure diagram
  • 系统架构师可以单独就分项目整个项目,并为整个项目的依赖性映射。我们使用composer及其composer.json。例如,我们的实体数据层就是这样的子项目,它具有我们的SOA服务的全套映射器:
  • 系统架构师可以在每个团队和团队之间强制执行代码审查,不仅适用于通用代码所有权,而且支持适当的分层
  • 使用模板引擎进行UI通常很有帮助(它增加了严格性)
  • 团队的每个成员都应该理解降低系统复杂性的基本概念(向他们展示流行和成功的工程系统,如OSI网络模型)

一般来说,我的一切在团队的手中。这就是为什么PHP的这种自由可以让你做出伟大的事情和完全的浪费。这将是很好的完成这个答案与意译著名的短语:

以较大的自由度越大,责任越大:)

+1

感谢您的好解答。我们确实尝试并遵循类似的一套做法。然而,奇怪的反向依赖通常会偷偷溜走并破坏某些东西。这就是为什么我采用自动化方式来迅速处理这类错误的原因。这对开发人员在违反设计规范时获得即时反馈也非常有用。 – dave

0

的事情是强制执行的每一层都应该知道什么分离做,我称之为责任。每一层都应该对预期的工作负责,而不需要任何一层知道别人怎么做。 我的简单体系结构有:

1)与HTML INPUT元素的接口通过第二层类获取/设置其内容到数据库。 1.1)更复杂的自定义界面PHP类元素,如VECTOR,SELECT和GRID,允许从此元素上列出的列表中选择一个数据库记录。

2)定义数据属性和SQL查询的PHP类。该级别实现基本的FIND,INSERT,ALTER和DELETE类方法,以使用SQL查询发送/接收数据到/从下一级数据库访问。我通常在这个级别上将这些类命名为数据库表,并将这些类的属性命名为他们将访问的数据库表的字段。

3)具有特定数据库品牌命令(例如MySQL和Oracle)的数据库类。这个级别可以通过一个类来完成,其中包含所有数据库的所有命令或每个数据库的一个类。如果您的系统仅使用一个数据库您可以让上一级(2)类知道并解决调用哪个数据库类。但是,如果您需要访问同一个应用程序上的多个数据库,或者需要经常更改数据库,最好只有一个包含所有命令的类。如果此级别的类只访问一个数据库,则它将被命名为数据库。

我设计的方式是,几层通过获取设置数据在两个方向上进行通信。

[] s

+0

感谢您的回答。您的架构指导方针看起来合理而实用。但除非我误解,否则程序员应遵循这些准则。我所追求的是一种自动化的方法(例如一种工具),它实际上实现了这种做法。也就是说,它将分析代码,并在违反准则时警告程序员。你知道这样的事情吗? – dave

+0

当然自动化会很好。没有抱歉,我没有去那么远。 改变主题,我几年前完成的是一个自动网站生成,它只做了导航结构并定义了导航菜单将放置的左侧和/或上侧区域,但是它的实际内容没有碰。 – user3692317

相关问题