您可以在PHP中强制执行架构层依赖吗?

时间:2016-03-10 23:41:48

标签: php architecture dependency-management layer

我们假设我有一个简单的多层架构用于应用程序。典型的层可能是(从底部开始并逐渐向上):核心/工具,实体/数据,业务逻辑和UI。类之间的依赖关系应该只在" down"方向,例如。从UI到业务逻辑,而不是相反。我将如何在PHP中强制执行此操作? IDE(例如PHPStorm)能做到吗?作曲家能做到吗?

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

我还没有找到在PHP中实现相同目标的方法。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

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

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

例如:

  • 系统架构师可以为整个团队提供精心设计 component diagramcomposite structure diagram
  • 系统架构师可以在子项目上分离整个项目,并为整个项目创建依赖关系图。我们使用composer及其composer.json。例如,我们的实体数据层就是这样的子项目,我们的SOA服务上有完整的Mappers集。)
  • 系统架构师可以在每个团队和团队之间强制执行代码审查,不仅要求公共代码所有权,还要支持适当的分层
  • 对UI使用模板引擎通常很有帮助(它增加了严谨性)
  • 团队的每个成员都应该了解降低系统复杂性的基本概念(向OSI网络模型展示流行和成功的工程系统会很有用)

一般来说,团队手中的一切。这就是为什么PHP的这种自由可以让你做出伟大的事情并完全浪费。并且用一个众所周知的短语来解释这个答案会很好:

  

有很大的自由带来了很大的责任:)

答案 1 :(得分:0)

事情是强制分离每个层应该知道和做的事情,我称之为责任。每一层都应该负责预期的事情,而没有任何一层知道其他人如何做。 我的简单架构有:

1)与HTML INPUT元素的接口,通过第二层类获取/设置其内容到数据库。

1.1)更复杂的自定义接口PHP类元素,如VECTOR,SELECT和GRID,允许从这些元素上显示的列表中选择一个数据库记录。

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

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

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

[]中