Laravel深入学习10 - 里氏替换原则
声明:本文并非博主原创,而是来自对《Laravel 4 From Apprentice to Artisan》阅读的翻译和理解,当然也不是原汁原味的翻译,能保证90%的原汁性,另外因为是理解翻译,肯定会有错误的地方,欢迎指正。 欢迎转载,转载请注明出处,谢谢! 里氏替换原则简介别担心,里氏替换原则实际上比他的名字好理解。他是指任何在任何接受抽象化类的地方其实现也被接受。通俗的讲,类中使用接口实现的地方,不需要修改代码对于任意的接口实现类都将能使用。
实探我们继续拿 public function process(Order $order) { // Validate order... $this->orders->logOrder($order); } 在 class DatabaSEOrderRepository implements OrderRepositoryInterface { protected $connection; public function connect($username,$password) { $this->connection = new DatabaseConnection($username,$password); } public function logOrder(Order $order) { $this->connection->run('insert into orders values (?,?)',array( $order->id,$order->amount,)); } } 现在,让我们检验下如何将不得不去使用此实现: public function process(Order $order) { // Validate order... if ($this->repository instanceof DatabaSEOrderRepository) { $this->repository->connect('root','password'); } $this->repository->logOrder($order); } 注意,在订单处理类中,我们强制检测了 上述实例已违背里氏替换原则。在不修改 class DatabaSEOrderRepository implements OrderRepositoryInterface { protected $connector; public function __construct(DatabaseConnector $connector) { $this->connector = $connector; } public function connect() { return $this->connector->bootConnection(); } public function logOrder(Order $order) { $connection = $this->connect(); $connection->run('insert into orders values (?,)); } } 现在在 public function process(Order $order) { // Validate order... $this->repository->logOrder($order); } 如此改变,我们就可以在
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |