公式ドキュメントLaravelのドキュメントは、ファサード対契約を行うが、それはおよそ
https://laravel.com/docs/5.4/facades
から、これはテスト(キャッシュクラス)
public function testBasicExample()
{
Cache::shouldReceive('get')
->with('key')
->andReturn('value');
$this->visit('/cache')
->see('value');
}
ように簡単に思える本当に何であるかを説明するのに失敗しますファサードの文書でもよく書かれています:
ウィットと相互作用するサードパーティのパッケージh Laravel、それは ファサードを使用する代わりにLaravel契約を注入する方が良いです。 パッケージはLaravelの外に構築されているので、Laravelのファサードテストヘルパーには にアクセスできません。
これは本当にどのように表示されません。パッケージはlaravelの機能に非常によくアクセスするので、テストではうまくいかないとは思われません。
今契約中https://laravel.com/docs/5.4/contracts彼らは、少し哲学的な議論をどのように使用するか、ファサードか契約します。それらを一緒に使用する方がいいですか?契約はインタフェース以外の何ものでもないからです。今やインターフェイスのアイデアは全く新しいものではありません。私は実際には得られませんが、ファサードと契約を比較した最初の点は何ですか:
ファサードは基本的にテスト可能性を追加するララベルの拡張クラスです。彼らはしかし、実装を隠し、どのような機能がクラスで利用可能であるかを読むのが難しくなります。例えば。あなたは常にファサードのどの実装が使用されているかを把握し、そこにどのようなメソッドがあるかを調べる必要があります。一方、契約はインタフェース以外のものではありません。
基本的に私たちに "インターフェイスを使用する"と言っているlaravelの人々。私は同意する、インターフェイスは素晴らしいです。しかし、私はこれがファサードにどのように関係しているのか分かりません。彼らは関連していません。彼らはどちらも交換できません。
これは何についてですか?
「契約書やファサードを使用する」とは関係がなく、一緒に使用する必要があるのはなぜですか?
の例では、メールのファサードです:
/**
* @see \Illuminate\Mail\Mailer
*/
class Mail extends Facade{...
のでMail::
が\Illuminate\Mail\Mailer
のインスタンスを返しますアクセスする\Illuminate\Mail\Mailer
class Mailer implements MailerContract, MailQueueContract
{
契約を実装したクラスよりも他には何を見てみましょう別名インタフェース。
彼らは正確に何を私たちに伝えようとしていますか?
だから全員のための一般的なパッケージを作りたいと思ったら。それは一般的には私の場合ではないし、私が使用するほとんどのパッケージはlaravel用に設計されている。私は、テイラーの再使用がララベルのために作られたものではないことを理解しています。したがってファサードを使用すると、codeigniter用のサードパーティパッケージを作成することが不可能になりますか? https://www.sitepoint.com/how-laravel-facades-work-and-how-to-use-them-elsewhere/私はそうは思わない。したがって、有効と思われるあなたのポイントさえ、実際には有効ではありません。なぜfacers VERSUS契約:私は彼らが言いたかったと思う:両方を設定することができます。なぜそれを契約しても、インターフェースしないのですか?いいえヒント – Toskan
あなたが文字通りリンクしたsitepoint.comの例では、作曲家はIlluminatesサポートクラスに必要です。だからかなり完全にファサードに依存しています。彼らはLaravelのようにそれらを設定することによって一歩一歩進みます。私はあなたが言うことを得ようとしているが、正面ファサードはLaravelの外で使うことができるが、根底にある部分はまだ必要である(この場合、Illuminateに結合されている)。限り、契約対インタフェース?誰が知っているのだろう...たぶんテイラーは契約が意味をより良く伝えると思うかもしれない。それ以外に違いはありません。 – btl