찾다

 >  Q&A  >  본문

클래스 크리프는 외관으로 인한 주요 위협으로 남아 있습니다.

저는 Laravel Facades 时想到了这句话,Facade 的主要危险是类范围 Creep를 읽고 있습니다. 이것은 두 번째 단락입니다. 여기 링크가 있습니다 https://laravel.com/docs/6.x/facades#when-to-use-facades

클래스 범위 크리프는 무엇을 의미하나요?

클래스 범위 변경을 이해하는 데 필요한 리소스를 찾을 수 없습니다.

P粉155710425P粉155710425251일 전335

모든 응답(1)나는 대답할 것이다

  • P粉935883292

    P粉9358832922024-03-22 17:53:04

    귀하의 질문에 대한 답변은 실제로 다음 문장에 나와 있습니다. 하지만 Laravel을 사용하기 시작하면 매우 혼란스러워진다는 점을 인정합니다. 기본적으로:

    이는 파사드를 너무 많이 사용하면(Laravel뿐만 아니라 일반적으로) 코드가 더 커지고 읽기 어려워질 수 있다는 의미입니다. (룩을 사용해야 하는 이유 뒤에 있는 요점을 능가함)

    Facade는 원래 목적을 넘어서 많은 것으로 발전할 수도 있으며, Refactoring Guru(제휴 없음)가 말했듯이 Facade는 잘못 사용하면 신의 개체가 될 수 있습니다.

    Facade를 사용할 예정인데 아직 사용법을 모른다면 단일 책임 원칙 및 (이전 의견) 의심스러우면 Facade를 사용하지 않는 것이 좋습니다.

    이 섹션은 실제로 "하지 마세요" 가이드로, 그러니 하지 마세요!를 빠르게 읽어볼 수 있습니다. ” 독자 여러분, 이러지 마세요!

    저는 두 가지 다른 방식으로 외관을 과도하게 사용하는 다소 우스꽝스러운 예를 추가하기 위해 답변을 편집했습니다.

    1. 스코프, 정적, 특성과 관련된 모든 것에 대해 걱정하고 싶은 사람이 파사드가 종속성 주입 패턴의 고통을 실제로 해결한다는 것을 알고 계십니까? 그래서 모든 것에 파사드를 사용하기 시작합니다. 이전 쿼리에 어디에 추가해야 합니까? 단순한! 룩을 만들고 새 룩에 이름을 Scope::where($model, $column, $equals),想要与数据库对话,但 DB::query 刚刚开始太长? Facades 为您提供支持,将它们放入 DataModel::longQuery() 中并在任何地方使用它们。厌倦了一直调用 ProductResource::collection 吗?将其放入名为 Resource::collection($model)로 지정하세요.

    2. 결제 링크 생성을 돕기 위해 Facade를 추가했으므로 Payment 并最初将其与 Payment::generateLink() 一起使用,之后一段时间后,您会发现您还需要为网站内支付小部件生成视图,因此您添加了一个 Payment::view(),几个月后,当您需要与您的支付提供商讨论您的发票历史记录,只需将其添加到 Payment::getReceipts 메서드에서 호출하기만 하면 됩니다. 귀하의 결제 파사드는 이제 같은 장소에서 너무 많은 관련 없는 일을 처리하는 하나의 거대한 클래스가 되었습니다.

    두 예 모두 일반적인 코딩 실수를 통해 룩의 남용을 명확하게 확인할 수 있습니다. 내 예가 약간 과장되어 있기는 하지만, 몇 달에 걸쳐 실제 생활에서 이런 일이 어떻게 일어날 수 있는지 상상하기 쉽다고 생각합니다.

    회신하다
    0
  • 취소회신하다