标签: facade

什么是立面设计模式?

门面里面包含了很多其他类的一类?

是什么使它成为一种设计模式?对我来说,这就像一个普通的课程.

你能解释一下这个Facade模式吗?

design-patterns facade

182
推荐指数
12
解决办法
11万
查看次数

Facade,Proxy,Adapter和Decorator设计模式之间的区别?

Facade,Proxy,Adapter和Decorator设计模式有什么区别?

我从来没有读过明确的解释,你的是什么?

proxy design-patterns facade decorator adapter

125
推荐指数
2
解决办法
6万
查看次数

Facade和Adapter Pattern有什么区别?

我一直在阅读这两个定义,它们似乎完全相同.任何人都可以指出他们的差异是什么?

谢谢

c# java design-patterns facade adapter

91
推荐指数
9
解决办法
3万
查看次数

外墙与调解员

我一直在研究这两种模式之间的区别.

据我所知,facade封装了对子系统的访问,而mediator封装了组件之间的交互.

我知道子系统组件不知道外观,因为组件明显知道中介.

我目前正在使用facade来封装检索配置信息的方法,例如App.Config,存储在SQL中的用户设置,程序集信息等,以及用于在不同窗体之间导航的介体.

但是,大多数网站都指出调解员"增加了功能".这是什么意思?介体如何添加功能?

design-patterns facade mediator

77
推荐指数
4
解决办法
2万
查看次数

Laravel:差异App :: bind和App :: singleton

我对laravel在IOC容器和外墙方面提供的所有好东西感到有些困惑.由于我不是一位经验丰富的程序员,因此学习起来势不可挡.

我想知道,这两个例子有什么区别:

  1. 'Foo'的门面并通过容器注册 App::bind()

  2. 'Foo'的门面并通过容器注册 App::singleton()

在我的最佳理解Foo::method()中将被重写,$app->make['foo']->method()因为在第一个示例Foo中将创建类的多个实例,并且在第二个示例中,因为它通过a绑定App::singleton(),所以Foo每次调用该对象上的Method时都将返回相同的实例.

如果这个问题的答案显而易见,我很抱歉,但我找不到任何关于这个问题的确认,也没有明确解释.

php oop facade ioc-container laravel-4

62
推荐指数
2
解决办法
3万
查看次数

57
推荐指数
8
解决办法
3万
查看次数

服务和外观的角色是否相似?

我读的越多,我就越困惑.

请注意,所有问题都与服务和外观如何适应MVC模式有关.

我的理解是Facade不是一个超级智能对象,它只是一种暴露简单接口/ api来执行复杂操作的方式(例如:执行10 $付款,这是一个复杂的操作,涉及一些操作,但这样的复杂性可以通过一个外观来处理,它只会按特定的顺序调用相应的对象......等等...)

现在,服务是一种执行对几个DAO的调用以获得复杂数据结构的方法(我对此不太确定,但这是我目前所理解的).

那么问题是,外观和服务之间有什么区别?在一天结束时,外观可以完美地访问几个DAO,以便通过提供简单的界面来执行复杂的操作,并且服务似乎类似于某些东西.

交易也是如此,我知道服务是开始交易的地方,但我同样觉得它们也可以放在外墙上,毕竟外立面也可以调用几个DAO.

那么哪个堆栈会更有意义

controller-facade-dao controller-service-dao

或者可能

controller-facadade-dao有时候是controller-facade-service-dao ??

java model-view-controller spring design-patterns facade

49
推荐指数
3
解决办法
3万
查看次数

Laravel自定义模型方法

每当我向Eloquent模型添加额外的逻辑时,我最终都必须使它成为一种static方法(即不太理想)才能从模型的外观中调用它.我已经尝试了很多关于如何以正确方式执行此操作的内容,并且几乎所有结果都讨论了创建返回Query Builder接口部分的方法.我试图弄清楚如何添加可以返回任何东西的方法,并使用模型的外观进行调用.

例如,假设我有一个名为的模型,Car并希望得到它们:

$cars = Car::all();
Run Code Online (Sandbox Code Playgroud)

好的,除了现在,假设我想通过make将结果排序为多维数组,所以我的结果可能如下所示:

$cars = array(
  'Ford' => array(
     'F-150' => '...',
     'Escape' => '...',
  ),
  'Honda' => array(
     'Accord' => '...',
     'Civic' => '...',
  ),
);
Run Code Online (Sandbox Code Playgroud)

以这个理论为例,我很想创建一个可以被称为的方法:

$cars = Car::getAllSortedByMake();
Run Code Online (Sandbox Code Playgroud)

让我们忘记一下可怕的方法名称以及它与数据结构紧密耦合的事实.如果我在模型中创建这样的方法:

public function getAllSortedByMake()
{
   // Process and return resulting array
   return array('...');
}
Run Code Online (Sandbox Code Playgroud)

最后在我的控制器中调用它,我将抛出此异常:

非静态方法Car :: getAllSortedByMake()不应该静态调用,假设$ this来自不兼容的上下文

TL; DR:我如何添加有意义的自定义功能,使其成为模型而不使其成为静态方法并使用模型的外观调用它?


编辑:

这是一个理论上的例子.也许这个问题的改写更有意义.为什么某些非静态方法在Eloquent模型的外观上是可用的,all()或者which()在模型中添加了其他方法?这意味着__call正在使用魔术方法,但是如何让它在模型中识别我自己的函数?

可能比"排序"更好的例子是,如果我需要对一段数据运行计算或算法:

$validSPG = Chemical::isValidSpecificGravity(-1.43);
Run Code Online (Sandbox Code Playgroud)

对我而言,这样的事情在模型中是有道理的,因为它是特定于域的.

php facade laravel eloquent laravel-4

35
推荐指数
2
解决办法
4万
查看次数

Facade模式和abstarct工厂模式之间有什么区别?

我不是在问采访的观点.我想知道在struts框架等项目中实现的实时场景.

java design-patterns facade abstract-factory

30
推荐指数
3
解决办法
1万
查看次数

如何使用Laravel创建外观类?

我在使用Laravel创建一个Facade模型类时遇到了一些问题.我已经关注了http://laravel.com/docs/facades,但我想我错过了一些东西.

我已经创建了一个app/models名为的文件夹foo.在该文件夹中,我有两个文件.

第一个文件(Foo.php):

<?php
namespace Mynamespace;

class Foo {
    public function method() {

    }
}
?>
Run Code Online (Sandbox Code Playgroud)

第二个文件(FooFacade.php):

<?php
use Illuminate\Support\Facades\Facade;

class Foo extends Facade {
    protected static function getFacadeAccessor() { return 'foo'; }
}
?>
Run Code Online (Sandbox Code Playgroud)

然后我添加Foo => 'Mynamespace\Foo'aliases数组app/config/app.php并运行composer updatecomposer dump-autoload.

现在,当我尝试跑步时,Foo::method()我得到了Non-static method Mynamespace\Foo::method() should not be called statically.我究竟做错了什么?

php facade laravel

25
推荐指数
1
解决办法
2万
查看次数