3

我们得到了一个 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_*中。

我发现很难找到一种不会使它变得更复杂的设计模式。我发现的大多数都是面向 OO 范式的,而这个清单当然不是。工厂模式当然无济于事,因为我发现它的唯一有用方法是登录(用户名和密码)更改为(用户名、密码、ID 号)之类的东西。但是,我认为这不会有用,因为只有 2 个 php 页面具有登录功能。

我还想看看是否所有的搜索逻辑都可以做成一个对象。但是,每种类型的搜索都必须有自己的方法(因为它们正在查询 diff.tables),这与当前设置不会有太大不同(每个搜索当前都在相应的列表 php 页面中。)

我发现唯一可能有用的是正则表达式的设计模式。程序中的表格未经验证。你有什么想法吗?

此外,该课程的主题是软件质量。我个人的看法是,设计模式会使这个网站变得更复杂,因为它不是一个大项目。但是我的同学争辩说,由于它不是面向对象的,所以它不是可维护的。但我在想,PHP 不是 OO,我说的对吗?因此,强迫它符合 OO 设计模式只会把事情搞砸。

你怎么看?任何可能适用于这种情况的设计模式?

4

3 回答 3

4

然后我们应该说设计模式是否会使程序更好,或者它是否只会使程序更复杂。

设计模式是常见问题的常见解决方案。您不使用设计模式来使用设计模式。您使用它们来解决特定问题。最突出的设计模式是来自GOFPOEAA的那些。其中一些很容易实现,例如策略,而另一些则需要更多的架构思想。

一些你甚至不知道就使用的设计模式,例如,你的动作脚本对我来说听起来像TransactionScript。是的,您可以将它们制作成PageController以减少脚本中的样板代码。然后你可以添加一个FrontController来减少 PageControllers 中的样板。既然如此,为什么不使用 MVC 将业务逻辑和 UI 分开呢?

一般来说,从长远来看,设计模式将使您的代码更易于维护,特别是如果您保持您的实现GRASPSOLIDDRY。设计模式还将使您的代码更易于理解和讨论,因为模式是定义明确的术语。告诉开发人员这段代码是工厂,他/她会理解你的。

但是,是的,设计模式也可能使您的代码更复杂,您应该知道在哪里停止以防止过度工程。这并不是说不要使用它们,而是在可以解决特定问题的地方合理使用它们。还可以考虑学习常见的AntiPatterns

由于该课程是关于软件质量的,因此您应该知道软件质量不是以代码中设计模式的数量来衡量的。软件质量是通过许多指标来衡量的,并且有一些工具可以衡量它们。查看PHP 项目中的质量保证以获得一个想法。

在旁注中,设计模式不一定必须与 OOP 一起使用。OOP 只是一种组织代码的好方法,许多设计模式确实针对但不限于 OOP。MVC 可以与过程代码一起使用。您可以将 Strategy 和 Factory 与匿名函数一起使用,FrontController 可以是一个简单的 switch/case 语句,等等。那是因为设计模式是架构蓝图,而且大多与语言和范式无关。

于 2010-11-15T08:58:14.283 回答
0

OO 是一个很好的方法。它确实使代码更易于维护。这确实是编程的未来,而 php 是面向 OO 的绝佳语言。

于 2010-11-15T07:20:01.317 回答
0

PHP 5+ 是相当 OO 的。并且您应该尝试以 OO 的方式做大部分事情,即使它是一个单页脚本。这里的基本原理是,这一页很有可能会增长或将用于其他内容。

并且不要在没有很好理解的情况下尝试应用设计模式,当然也不要为了称其为模式而混入一个模式。请参阅有关设计模式的这个 SO 问题。

于 2010-11-15T08:54:09.433 回答