【发布时间】:2010-11-15 06:54:05
【问题描述】:
我们得到了一个 php 库存程序。然后我们应该说设计模式是否会使程序变得更好,或者它是否只会使程序更复杂。
程序的结构是这样的。
该程序被分解为嵌入 html 的 php 脚本。要么有 (A) 一个完整的 php 页面专用于一个选项,要么 (B) 一个选项的逻辑位于另一个脚本页面内,该页面服务于类似操作的其他选项。 (这不包括“重置”和“返回主页”等简单按钮。)
(A) 例如,一旦您打开网站,就会出现一个带有选项的导航菜单。当您单击一个选项时,例如在客户下,有一个“查看”链接。单击后,您将被带到另一个页面,其中包含与更多选项相对应的其他链接,例如“编辑”和“删除”。通常,对于这个网站,每个选项都对应着自己的 php 脚本页面。例如,“查看”对应于 list_customers.php。 “编辑”对应于edit_customer.php。
(B) 可能发生的另一件事是该选项的逻辑位于“通用”脚本页面中。我的意思是几个选项的逻辑被分组到一个页面中。这方面的一个例子是“删除”。在删除客户、工作订单或报价之前,需要将其定向到名为 auth.php 的 php 脚本页面,以确保只有管理员可以删除。检查是否是管理员登录以及删除客户、工作订单或报价单的逻辑也在 auth.php 中。另一个例子是客户的所有“搜索”选项。虽然它有自己的页面search_customer.php,但实际搜索的逻辑实际上在list_customers.php 中。此模式适用于所有搜索,包括搜索客户、报价或交付报告;搜索代码其实在对应的list_*.php页面中。
我发现很难找到一种不会使其变得更复杂的设计模式。我发现的大多数都是面向 OO 范式的,而这个清单当然不是。工厂模式当然无济于事,因为我发现它的唯一有用方法是登录(用户名和密码)更改为(用户名、密码、ID 号)之类的东西。但是,我认为这不会有用,因为只有 2 个 php 页面具有登录功能。
我还想看看是否所有的搜索逻辑都可以组成一个对象。但是,每种类型的搜索都必须有自己的方法(因为它们正在查询 diff.tables),这与当前设置不会有太大不同(每个搜索当前都在相应的列表 php 页面中。)
我发现可能唯一有用的是正则表达式的设计模式。程序中的表格未经验证。你有什么想法吗?
此外,课程的主题是软件质量。我个人的看法是设计模式会使这个网站变得更复杂,因为它不是一个大项目。但是我的同学争辩说,由于它不是面向对象的,所以它不是可维护的。但我在想,PHP 不是 OO,我说的对吗?所以强迫它符合 OO 设计模式只会把事情搞砸。
你怎么看?任何可能适用于这种情况的设计模式?
【问题讨论】:
-
您发现的大多数模式都涉及 OOP,因为那是模式概念首次应用于编程的地方。
-
非常感谢大家。习惯了Java,我可以说OO肯定更易于维护。特别感谢戈登。事务脚本正是我想要的!再次感谢您抽出宝贵时间。
标签: php oop design-patterns procedural-programming