DI背后的要点是减轻一个类创建和准备它依赖的对象并将它们推入.这听起来很合理,但有时一个类不需要所有的对象,它们被推入它来执行它的功能.这背后的原因是"早期返回"发生在无效的用户输入或之前所需对象之一抛出的异常,或者在代码块运行之前实例化对象所必需的某个值不可用.
更实际的例子:
因此,推动所有必要组件的方式与某些组件的创建和从未使用的方式相矛盾的是"延迟加载",这有点不实用且影响性能.就PHP而言 - 加载,解析和编译更多文件.如果被推入的对象具有自己的依赖关系,则这尤其痛苦.
我看到它有3种方法,其中2种听起来不太好:
问题是处理这种情况的最佳方法是什么/你们使用什么?
更新:@GordonM这里有3种方法的例子:
//inject factory example
interface IFactory{
function factory();
}
class Bartender{
protected $_factory;
public function __construct(IFactory $f){
$this->_factory = $f;
}
public function order($data){
//validating $data
//... return or throw exception
//validation passed, order must be saved
$db = $this->_factory->factory(); //! factory instance * num necessary components
$db->insert('orders', $data);
//...
}
}
/*
inject provider example
assuming that the provider prepares necessary objects …Run Code Online (Sandbox Code Playgroud) 目前,我正在尝试一个非常简单的GUI绘图......"引擎"(我想你可以称之为).它的要点:
当然,我需要一种隐藏/显示这些精灵的方法.目前,我非常喜欢Flex默认情况下 - 就像"如果我们在comp可见的地方,创建它,缓存它并在每次再次可见时重复使用它".
现在的问题是-这将是隐藏和显示的更适当的和有效的方式-通过addChild/ removeChild或肘节visible.
我看到它的方式是:
visible 快速而肮脏(在第一次测试时)visible不会像Event.ADDED或那样创造一系列冒泡事件Event.REMOVED因此removeChild,当我确定,屏幕上不再需要该组件时(例如,缓存太大,我会调用)
stackoverflow'ers/AS3疯狂的人会怎么想?
更新:这是一个很好的阅读(忘了谷歌).
我会坚持visible; 它似乎更适合我的任务; 手册页上的"性能优化的Flash平台"由Adobe.69让我更有信心.
这是我为那些感兴趣的人测试的东西的代码片段:
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.utils.getTimer;
/**
* Simple benchmark to test alternatives for hiding and showing
* DisplayObject.
*
* Use:
* <code>
* new DisplayBM(stage);
* </code> …Run Code Online (Sandbox Code Playgroud)