問題タブ [composition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Liskov 置換と合成
次のようなクラスがあるとしましょう:
そして、拡張メソッドができることを超えて何かを追加するためにそれを拡張したい....私の唯一のオプションは構成です:
これは機能しますが、大変な作業です...しかし、まだ問題に遭遇します:
ここで Foo を渡すことはできますが、スーパー Foo を渡すことはできません。なぜなら、C# は SuperFoo が Liskov Substitution の意味で本当に資格があるとは考えていないためです...これは、構成による私の拡張クラスの使用が非常に限られていることを意味します。
したがって、これを修正する唯一の方法は、元の API 設計者がインターフェースを残しておいてくれることを願うことです。
これで、SuperFoo に IFoo を実装できます (SuperFoo は既に Foo を実装しているため、署名を変更するだけです)。
そして完璧な世界では、Foo を消費するメソッドは IFoo を消費します。
これで、C# は、共通のインターフェイスによって SuperFoo と Foo の関係を理解し、すべてがうまくいきました。
大きな問題は、.NET が、拡張すると便利な場合がある多くのクラスを封印し、通常は共通のインターフェイスを実装しないため、Foo を受け取る API メソッドが SuperFoo を受け入れず、オーバーロードを追加できないことです。 .
それで、そこにいるすべての作曲ファンのために....この制限をどのように回避しますか?
私が考えることができる唯一のことは、内部の Foo を公開して、時々渡すことができるようにすることですが、それは面倒です。
php - Zend Framework ページにログイン フォームを埋め込む最良の方法
ログインフォームをZend Frameworkの複数のページに埋め込む最良の方法は何ですか?
現在、別のログインフォーム用の LoginController と、インデックスページでのアクション用の IndexController の 2 つのコントローラーがあります。
ユーザーがフロントページとログインページの両方からログインできるようにするには、ログインフォームをインデックスページに含める必要があります。
私の現在の解決策は、IndexController に LoginController を拡張させることですが、両方のコントローラーのコードを調整する必要があります (たとえば、子 indexAction 内から parent::IndexAction を呼び出してログイン フォームをレンダリングし、さまざまなリダイレクトも更新する必要があります)。
このようなコントローラーの inharitance を使用して「マルチページ」ログインを実装しても問題ありませんか?
ベストプラクティスは何ですか?
inheritance - 等価およびハッシュコード プロバイダーの構成と継承
エンティティと集約ルートを比較するときは、Oren Eini: Generic Entity Equalityから借りた ABC を使用します。価値のあるオブジェクトについても、私は同様に独創的でした。Jimmy Bogard の Value Object ABC: Generic Value Object Equalityを使用しました。
私の質問は次のとおりです。これらのABCを継承することを好むべきですか、それとも一般的な等値/比較子を使用して、代わりに前述の動作を構成する必要がありますか? 上記の等式の実装を再利用するつもりです。
これは、System.Object がデフォルトの Equals 実装を持っていることに帰着すると思います。これにより、言語は非常に使いやすくなりますが、興味深い難問も提供されます。Jon Skeet はここで詳しく説明します:比較方法
誰かが長所または短所を考えることができますか?
- ABC を継承する方が簡単で、すぐに使用できる演算子のオーバーロードが提供されます。
- 2 つの抽象クラスをそんなに「ドラッグ」する必要がありますか? 継承グラフがより複雑になり、カップリングが追加されます。
- DI を使用して等値プロバイダーを構成できますか?
要約すると、エンティティのカスタム等価実装を使用した経験がある人はいますか? 私の目的は、実装の選択肢をより完全に理解し、解決策を実装することです。これにより、プロジェクトの寿命が延び (エントロピーが減少し)、保守性が向上します。
oop - 「持っている」と「ある」-決定するためのコードの臭い
私は昨日、Barから継承したクラスFooでこれを書きました:
その後、これがバーを継承するのではなく、バーを使用する必要があることを示している可能性があるかどうか疑問に思いました。
継承と構成のどちらかを選択するのに役立つ他の「コードの臭い」は何ですか?
編集私はこれがスニペットであることを追加する必要があります、一般的な他の方法があります、私はあまり詳細に立ち入りたくありませんでした。私は作曲への切り替えの影響を分析する必要があり、バランスを崩すのに役立つ可能性のある他の「コードの臭い」があるのではないかと考えました。
php - 文章の単語を構成された用語に結合する方法は?
たとえば、私は文を持っています
John Doe は昨年、ニューヨークに引っ越しました。
ここで、文を単一の単語に分割すると、次のようになります。
array('John', 'Doe', 'moved', 'to', 'New', 'York', 'last', 'year')
それはとても簡単です。しかし、その後、単一の単語を組み合わせて、構成されたすべての用語を取得したいと考えています。構成された用語が意味をなさない場合はそうではありませんが、それらすべてを取得したいと考えています。その操作の結果は次のようになります。
ジョン、ドウ、ジョン・ドウ、引っ越し、ドウが引っ越し、ジョン・ドウが引っ越し、に引っ越し、ドウが引っ越し...
単語は、k 個の部分に制限される用語に構成する必要があります。上記の例では、制限は 3 です。したがって、用語には最大で 3 つの単語を含めることができます。
問題: コンポジションを PHP でコーディングするにはどうすればよいでしょうか? 入力として文を取得し、出力としてすべての用語を含む配列を与える関数があれば、それは素晴らしいことです。
あなたが私を助けてくれることを願っています。前もって感謝します!
inheritance - テスト容易性のための継承と合成
オブジェクトを設計しているときに、テスト容易性の観点からはコンポジションがより良い選択であることがわかりました。その理由は、単体テストの実行中に、必要に応じて構成構造の一部をモックできるからです。継承階層がある場合、これは不可能です。
他の人もこれが構成を好む理由であるとわかっているかどうか知りたい. また、継承が使用されたために、他にどのようなテスト容易性の落とし穴に陥りましたか?
oop - 用語 - 複合関係の一部
Orders のコレクションを持つ Customer など、複合的な関係があると仮定します (また、「所有する」Customer なしでは Order は存在できないと仮定します)。
この関係における役割を説明するためにどのような用語が使用されていますか? 顧客は注文の「所有者」であり、おそらく注文は「所有されている」と言うかもしれませんが、他の役割に言及せずに述べることができるより良い条件が確実に存在します。
メタ モデルで属性に適切な名前を付けることができるように、これらの用語を特定しようとしています。「でっち上げ」でも構いませんが、分かりやすい名前を付けたいと思います。
決定的な情報源への提案および/またはポインタを前もって感謝します。
明細書
c# - 単純な構成関係をどのようにモデル化しますか
誰かが私が構成関係をモデル化するための最良の方法を理解するのを手伝ってもらえますか?
たとえば、多くのスケジュールを持つことができる学生がいる場合、私は大まかに次のように作成します。
どこかでScheduleオブジェクトがあり、それがどの学生に属しているかを特定したいと思います。Schedule.Student.Name
書いて、お返しに生徒の名前をもらえるようになりたいです。スケジュールオブジェクトにもStudentプロパティを追加しますか?
私のアプリケーションは、CRUD機能を実行するためにStudentPkをScheduleオブジェクトに渡しています。必要に応じてハンドルを保持するために、StudentPKをプライベート変数として保持しています。
私のアプリケーションがより複雑になるにつれて、私は今までやってきたことを維持するのが難しくなっています。私へのあなたの提案は何ですか?これらの基本事項を復習し、より適切に処理するために、他に何を参照できますか(本/リンク)?
c# - 継承の代わりに構成を使用するデコレータパターン
デコレータパターンについての私の以前の理解は、で継承Window
し、オーバーライドされたメソッドで、上記のメソッドの実装をWindowDecorator
呼び出す前にいくつかの追加の作業を行うことでした。Window
次のようになります。
ただし、これは基本的に装飾をハードコードするので、継承の代わりに構成を使用するようにこれをどのようにリファクタリングしますか?