我的Zend项目中有一些与货币转换相关的功能。我想利用Controllers和Models中的功能。是否有最佳实践可以放置此代码?或者事实上,两者中使用的功能都是一个指标,也许我应该重新考虑项目的结构,这样两个地方都不需要它?
答案 0 :(得分:6)
我认为纯粹主义者会争辩说,如果你在控制器代码中进行货币转换,那么你可能做错了,因为那里不应该有任何业务逻辑。然而,有时候实际考虑会超过纯粹主义者的担忧。我们假设这是一个这样的情况。 : - )
如果您的货币类是一个相当简单的实用类型类,那么我倾向于在“application”下创建一个名为“utils”的新目录,然后将该目录添加到应用程序引导程序中的资源加载器:
protected function _initResourceLoader()
{
$this->_resourceLoader->addResourceType( 'utility', 'utils', 'Utility' );
}
然后,您可以创建一个名为Application_Utility_Currency
的类,该类存储在该目录中名为Currency.php
的文件中,并调用静态方法,例如:
Application_Utilility_Currency::convert( $from_currency, $to_currency, $amount );
如果你有其他的实用程序类也在寻找一个家,这种方法会特别有用。
但是,如果您的货币类包含更丰富的功能(例如连接到外部服务以获取汇率数据等),那么IMO最好将其视为“服务”而不是“实用程序” 。我对“模型”的定义相当松散,包括所有与数据相关的服务,无论数据是位于应用程序数据库还是其他地方,所以如果类的类型更复杂,那么我只会将其与其他数据相结合。模型。