問題タブ [grasp]
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.
oop - 純粋な製造と間接参照の違い
私はこれら2つの違いを説明するチュートリアルと良い例を見つけようとしていましたが、情報を見つけることができませんでした。
純粋なファブリケーションと間接参照は、中間オブジェクトを作成して責任を割り当てるように機能します。したがって、これらのデザインパターンの違いを誰かが説明できますか?
ありがとう!
grasp - GRASP情報エキスパートとGRASP結束の違いは何ですか?
どちらの概念も非常に似ているため、どちらがどちらであるかを判断するのは困難です。
それらをどのように区別するかの例を挙げてください。
design-patterns - SOLID GRASP コントローラーパターン?
GRASP コントローラー パターンを SOLID のまま、より具体的には単一の責任で維持しながら適用することについて質問があります。
ウィキペディアのコントローラー パターンの定義には次のように書かれています。
コントローラー パターンは、システム イベントを処理する責任を、システム全体またはユース ケース シナリオを表す非 UI クラスに割り当てます。Controller オブジェクトは、システム イベントの受信または処理を担当する非ユーザー インターフェイス オブジェクトです。
そしてSOLIDの単一責任原則について:
オブジェクト指向プログラミングでは、単一責任の原則は、すべてのクラスが単一の責任を持つべきであり、その責任はクラスによって完全にカプセル化されるべきであると述べています。そのすべてのサービスは、その責任と密接に連携する必要があります。
いくつかのサンプルコードに行きましょう。次の Java クラスがあるとします。
単一の責任を維持しながら、適切なコントローラーの実装は何ですか? ユースケースを通過するだけですか、それとも何ですか? 例えば:
ここで私は 1 つの責任を負っていますか? 私はこれを正しく行っていますか、またはこれを正しく理解していますか? よろしくお願いします。
編集:bazController
このメソッドがあり、両方のクラスが関連しているとどうなりますか?
java - GRASP に続く Java パラメータの受け渡し
クラスが呼び出され、セッション ID に基づいてデータベースからGame
いくつかのオブジェクトを取得する必要があるため、次のメソッドがあります。Game
わかりましたが、そこにパラメーターを渡さなければならないので、どのセッションのゲームを取得したいかを知ることができ、2 つの可能性があります。を渡すか、属性を持つint
オブジェクトを渡してから を使用できます。結局、どちらも基本的には同じ結果になるのですが、私が不思議に思っているのは別のことです。Session
id
session.getID()
私の質問は、どちらがより良いアプローチであり、オブジェクトを渡す場合、それはGRASPGame
と高結合しSession
て違反していることを意味しますか?
class - 継承されたクラスによる一般化
2種類のデザインがあります。2 つ目は、1 つ目の改良版 (下) です。違いは、B に 2 つの子クラスを追加することです。そのため、A は 2 つの子クラスに依存するようになりました。しかし、後で B に子クラスが追加された場合はどうなるでしょうか。
それは本当にベストプラクティスですか?特にGRASPの視点で?
oop - ビジネス ルールの 2 つのクラスへの分割
次のビジネス ルールを持つプロジェクト割り当てドメインがあります。
- 新しい従業員がプロジェクトに割り当てられるとき、総支出は予算額を超えてはなりません。
- 従業員の場合、割り当て率の合計は 100% を超えてはなりません
で作成した以下のエンティティを作成しましたC#
。
質問
ロジックは、Allocate
Project と Employee の 2 つのクラスに分割さList<Allocation>
れます。クラスのプロパティとして追加するのではなく、パラメーターとして Allocate メソッドに渡されます...正しいアプローチですかList<Allocation>
、これら 2 つのクラスにプロパティとして追加する必要がありますか? ?
ノート:
データベース
資格
コード
計画
従業員
参考文献
顧客が注文のリストを持っている必要があるのはどのような行動ですか? ドメインの動作 (つまり、どの時点でどのデータが必要か) をさらに検討すると、ユース ケースに基づいて集計をモデル化でき、オブジェクトの小さなセットの変更追跡のみを行うため、物事がより明確になり、はるかに簡単になります。集約境界で。
Customer は注文のリストを含まない別の集計であり、 Order は注文明細のリストを含む集計である必要があると思います。顧客の注文ごとに操作を実行する必要がある場合は、 orderRepository.GetOrdersForCustomer(customerID); を使用します。変更を加えてから orderRespository.Save(order); を使用します。
java - GRASP - 情報エキスパート パターン - アプローチ
次のケースでベストプラクティスのアプローチを探しています。ManualComponent
、AutomaticComponent
およびの3 つの Java クラスがあります。CustomComponent
これらは、抽象クラスを拡張し、次のインターフェイスCalculationComponent
を実装します。CalculableComponent
CalculationComponent
にあるものを集約する別のクラスがありますComponentBox
:
calculate()
のメソッドの実装を変更するように依頼されるまで、すべてが完璧に機能していましたCustomComponent
。現在、このメソッドは、他の計算済みのCalculationComponents
情報 (=このようなSet<CalculationComponent> components
場所にある情報) を必要としています。ComponentBox
calculate(components);
GRASP についての私の理解では、ComponentBox
クラスはInformation Expertになりました。これは、最終的な計算を行うために必要なすべての情報が含まれているためです ( calculateAll();
)。
ベスト プラクティス アプローチを取得するには、どのようにクラスを変更すればよいですか?
ご協力ありがとうございました!M.
oop - GRASP の Information Expert と MVC の Modelll は同じですか?
Applying UML and Patterns(第 2 版) の本を読み始めたところです。GRASP パターンの 1 つは Information Expert であり、モデル形式の MVC と同等ですか?
彼らは同じ責任を負っていますか(情報の保存と取得)?
php - PHP(およびJavaScript)プロジェクトでユースケースコントローラーを実装する方法
私は PHP とデザイン パターンの初心者です。javascript と php を含むアプリケーションでユース ケース コントローラを実装する際に問題があります。学生プロフィールマネージャーのプロジェクトを作ろうとしています。教師が特定のセクションの生徒のマークをアップロードする「マークのアップロード」の使用例があります。そして、このユースケースでのシステム操作の責任を、UploadMarksEventHandler という名前のクラスに割り当てました。メソッドと属性について言及しただけで、まだ出力を生成することは想定されていません。コードは次のとおりです。
上記のコードは、アプリケーション ロジック レイヤー用です。UI レイヤーのユーザーは、login($teacher_id, $password)、uploadMarks($student_id, $marks) などの操作を実行します。これらの操作はそれぞれ、コントローラー クラス UploadMarksHandler の責任として与えられます。問題は、ユーザーが UI レイヤーから操作を生成することです。これは jquery でコーディングする予定です。ユーザーがブラウザの「Upload Marks」という名前のボタンを押したとします。このために、AJAX を使用して UploadMarksHandler オブジェクトを作成します。UIレイヤーをアプリケーションロジックレイヤーにマッピングする目的で使用されるmain.phpファイルで行います。
「マークのアップロード」ユース ケースの処理を担当する $upload_marks オブジェクトをインスタンス化した後、アプリケーションは UI レイヤーで次のシステム操作をリッスンする必要があります。ユーザーが「ログイン」という名前のボタンを押したとします。コントロールがクライアント側からサーバー側に戻ると、 $upload_marks オブジェクトが削除され、その状態が失われます。
PHP で MVC とコントローラーを適用することについて検索しましたが、私の問題に関して運がありませんでした。MVC フレームワークを使用する必要がありますか? どんな助けでも大歓迎です。