5

通过 MVC 架构设计程序的多层工作,我发现我希望获得有关更深层次的方法返回结果的更多信息,而且我并不总是可以预期何时需要这些信息。并且 - 为了抽象起见 - 我可能不希望该方法将内容输出到特定于应用程序的日志(该方法可以在不同的程序中使用),或者像上面的其他层一样具有特定的应用程序相关行为。

例如,在给定的实用程序函数中,我可能在执行某个操作之前进行了几次先决条件检查,但都失败了。如果我对其中任何一个返回 false,则调用者不知道发生了什么。如果我返回 false 并将发生的事情记录到应用程序日志中,则我将该函数绑定到应用程序特定的行为。

问题是:实现一个名为 MyResult 的小类并让它返回响应状态(ok/false)、一条消息、一个最终的整数代码和一个对象占位符(数组或对象),调用者可以访问返回的对象?这个 MyResult 类将在整个系统中使用,并且是所有方法及其调用者之间的通用“方言”。然后,所有方法都将始终返回 MyResult 的一个实例。

4

3 回答 3

2

这就是例外的原因。您不必像 Java 那样过度使用它们,但它们的存在是因为错误代码很糟糕。

于 2011-06-12T15:27:51.400 回答
2

你能举个例子吗?看起来有点,但我可能弄错了,您正在使用静态使用的方法(即使它们没有像它们本来可以那样实现/调用)。可以绘制自身的表格对象的基本示例是这样调用的$myTable->paint();:它可以返回一个变量是否有效(真/假),但任何其他东西(如日志记录)都是一个函数,就table()我而言,您的调用方法和返回值都不应该与此有任何关系担心的。

也许我很难理解您将在什么情况下使用它,但是如果您想出于某种需要消息(或事件等)的目的发送消息,您应该定义这些,但我看不到任何定义一个默认的 returnObject 来传递方法调用结果的优点。

对于错误,您有两种选择:异常(即:您确实不希望发生的事情并且应该停止执行)和错误:预期但不希望的行为。第一个应该不理会,第二个可能很棘手,但我想说对象本身应该包含一个状态,它可以清楚地说明发生了什么。

于 2011-06-12T15:31:54.270 回答
1

如果一个框架没有提供您需要的特定功能,那么您没有其他方法可以自行处理。尤其是如果您需要一些超出框架目标的东西,那么永远不会进入。

但是,许多框架提供了可以扩展它们的地方。有些比其他的更灵活。因此,如果可能的话,我会看看您是否仍然可以将所需的功能实现为一种可以留在框架范围内的附加组件、插件或帮助代码。

如果那是不可能的,我会说做任何你想做的事情总是有效的。使用对您有用的框架部分。

于 2011-06-12T15:25:42.983 回答