是否有DP来解决一种类型只能由另一种类型使用的问题?

时间:2009-12-20 21:23:21

标签: php design-patterns

我有一个课程,我希望它的实例仅由某些其他课程使用
是否存在针对此类问题的已知设计模式? 这种必要性的一个例子是一个大型应用程序(一个10人的团队)在MVC引擎下使用BL对象和DL对象的情况,我想确保只有BL类可以调用/使用DL类。不在控制器/视图/助手等。
我正在使用PHP(这意味着我没有子类)。

1 个答案:

答案 0 :(得分:1)

我不是PHP人员,但在其他平台(如.NET)中,您可以将DL类和BL类放在同一个程序集(库)中,并将DL类标记为程序集的“内部”(不能被其他组件访问)。这是在PHP中可以实现的吗?

但是,一般情况下,我不会这样做。我会有一个BL库和一个DL库,只是让它知道DL库不应该被BL库中的任何代码使用。根据我的经验,即使在10人或10人以上的团队中,这种方法仍然有效。如果您的BL库真正封装了可重用逻辑,这使得它们比DL类直接使用它们更好的类,那么您应该看到您的同行开发人员使用它们而不是DL类。 DL类的不正确直接使用应通过同行代码审查或失败的单元测试和/或集成测试来暴露。实际上,由于绕过BL层中包含的强制性业务逻辑规则,后者应始终暴露BL / DL消费代码中业务逻辑中的任何故障。我想我真正要说的是,作为DL / BL开发人员,你应该恰当地编写这些类,而不用担心它们的可见性,并安全地依赖其他机制来暴露任何潜在消费代码中的缺陷,这应该是这种情况。如果您的项目有良好的测试和代码审查政策。

注意:仅仅为了完整性,在.NET中也可以有单独的BL和DL库,DL类标记为内部,BL库标记为DL库的“朋友”程序集,允许BL库访问DL内部成员。其他图书馆不会被标记为朋友,因此无法访问内部DL成员。再说一遍,我不确定在PHP中是否可以做到这一点。