問題タブ [ooad]
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 - 単純なドメインオブジェクトの属性値
Songのドメインモデルクラスがあるとしましょう。曲には、常に正の数である必要があるテンポ属性(int)があります。この要件は、ドメインモデルの一部である必要がありますか、それとも外部(SongManager /ビジネスロジックレイヤークラスなど)である必要がありますか?
次のように実装することを選択したとしましょう。
// what?
上記を次のように置き換えますか?
- 何もない。Songインスタンスが与えられた場合
s
、s.setTempo(-10)
オブジェクトの状態を変更することはありません。 - テンポを最小値に設定します
1
。例: - 句にチェックマークを
setTempo
付けてマークします。このように、コントローラーまたは他のコンポーネントは、無効なテンポ値をキャッチし、例外の処理方法を決定する責任があります。throws InvalidTempoException
throw
else
- ランタイムInvalidTempoExceptionをスローします。
- tempo属性をTempoクラスに抽出し、そこに「0より大きくなければならない」をカプセル化します。
- 他の何か。
最近、一般的な「階層化アーキテクチャ」アプローチ、特にドメイン層を調査しているので、質問します。
java - 検索クラスのインターフェースを実装したいのですが、インターフェースを実装するための最良の方法は何ですか?
いくつかの異なるオプションを含む検索クラスが必要です。私の検索クラスは、次のようなさまざまな方法で結果をフィルタリングできる必要があります。
上記の X、Y、Z、K は私の基準であり、私の場合は一般的であるため、次のようなインターフェイスを作成することにしました。
アプリケーションは毎回1つ以上の基準を取得できる必要があり、私のアイデアは、すべての基準とすべての基準()メソッドを実装してコンパイルされた基準を検索クラスに返すようにクラスに指示するインターフェースを持つことです。
すべての基準は文字列に基づいていますが、指定されたすべての基準を組み合わせて特定の型を戻り値として返す必要があるため、criteria() の戻り値の型についてはまだわかりません。
私の検索クラスはSQLに基づいておらず、主にJSONに基づいています。
検索クラスの基準のインターフェースを持つための最良のアプローチは何ですか?
uml - オブジェクト指向の方法でユニバーサル データ モデルを実装しますか?
LEN SILVESTON の本から取り出した UDM (Universal Data Model) を持っています。これを C Sharp でオブジェクト指向設計として実装し、PARTIES、PERSONS、および ORGANIZATIONS をモデル化します。
論理モデル SUPERTYPES および SUBTYPES からの移行は、クラス階層を介して簡単に実行できますが、関係を処理する方法がわかりません。リレーショナルの世界 (物理データベース) の世界における多対多の関係は、通常、別の関連付けテーブルに実装されます。このパラダイムに従い、オブジェクト指向の世界で MM リレーションを別の「関連付け」クラスとして実装することは、適切ではないかもしれないと感じています。またはそれは?
また、オブジェクト指向の方法でこれらの UDM を実装する記事が書かれているかどうか知っている人はいますか?
ご指摘ありがとうございます。
java - きれいなコード: 依存性注入により手続き型コードが強制される、リファクタリングの方法
私は以下のクラスを持っています:
これは例の 1 つにすぎません。依存関係として他のクラスに注入する、このような他のクラスがいくつかあります。しかし、それは私の SchemaFetcher クラスをシングルトンのようにし、そのすべてのメソッドに schemaDefinition を渡し続けます。これは非常に手続き的なようで、実際に SchemaDefinition を DatabaseSchemaFetcher クラスのインスタンス変数にしたいのですが、その場合、SchemaFetcher オブジェクトを Validator クラスに挿入できず、代わりに行う必要があります
しかし、これにより、フェッチャーと密接に結びついてしまうため、最初に依存性注入を使用したいと考えました。
DatabaseSchemaFetcher のデフォルトのコンストラクターと setSchemaDefintion() セッターを使用してこれを実現できる可能性があることがわかりますが、それはコンストラクターを使用してオブジェクトを完全に構築するという原則に違反しています。
これを改善して、手続き型のフェッチャーを持たないようにするだけでなく、依存関係をコンストラクターに注入するにはどうすればよいですか? ファクトリーまたはサービスロケーターを使用する場合、誰もクラスの実装を調べてクラスが使用する依存関係を把握することなく、依存関係を明確に定義するため、コンストラクター注入を好みます。
hibernate - オブジェクト指向の設計と休止状態
以下のクラス図のように、求人ポータルのユースケースをモデル化しようとしました。再利用を希望する求職者だけでなく、仕事でもスキル エンティティを共有できるようにしました。
スキルを共有するので、oo のデザインを修正しました。これは、1:N ではなく M:N の関係を意味すると思います。
- http://imagebin.org/219822 (Skill との M:N 関係で改訂)
- http://imagebin.org/219680 (Skill と 1:N の関係を持つ古い)
質問:
hibernate を使用して以下のことを行うにはどうすればよいですか? SQL に頼る必要がありますか?
- Skill は M:N の関係にあるため、関連テーブル JobSkill と SeekerSkill が必要になります。データベース内の既存のスキルを使用できるように、求人または求職者のインスタンスを作成する方法は?
- 仕事のスキル要件が候補者のスキルのサブセットになるようにスキル マッチングを行う必要があります。 a) 雇用者 e1: すべての候補者を見つける - 1{
仕事
+ 1{候補者}N }N
+ 雇用主 }N
この場合のビジネス サービス クラスを JobPortal として追加し、いくつかのメソッドを以下の疑似コードとして追加することを考えています。メソッドfindJobsForSeekerに必要な HQL クエリに答えることができる場合:
java - OOPでの設計提案
問題
Organization
1つ以上のを含めることができますCredential
。- DEV、TEST、UAT、PRODなどのデプロイメント環境ごとに1つのクレデンシャルが存在する可能性があります。
- クレデンシャルは、UIまたはアプリ間通信用にすることができます。
さらに、ユーザーは、すべての環境で資格情報が同じであることを示すことができます。または、ユーザーは、環境間でユーザー名が同じであることを示すことができますが、環境ごとに異なるパスワードを指定したいと考えています。
ご覧のとおり、クレデンシャルを修飾できる2つの側面、つまりエンドポイントの種類と環境があります。OOPの世界でこの種の関係をモデル化する方法を考えています。
c# - 「is – a」関係に合成を使用する際の問題
人事システム用に開発中のシステムがあります。Accountant の従業員と Programmer の従業員がいます。入社して最初の 1 か月間は、従業員は何の役割も与えられません。1 人の従業員が同時に会計士とプログラマーになることができます。次のコードで示されるデザインがあります。
ここで、新しい機能を実装してシステムを強化する必要があります。
すべての会計士を終了します。(終了とは、従業員のステータスを IsActive = false として設定することを意味します)。問題は、確認せずにすべての会計士を非アクティブとして直接設定できないことです。彼が他の役割を持っているかどうかを確認する必要があります。
終了機能をより自然な OO にするために、これらのクラスを改造する方法は?
アップデート
@AlexDev回答のEF Database Firstソリューションモデルとデータベーススキーマを持つ回答を探しています。
C# コード
@AlexDev回答
参照
c# - 1 つのサブスクライバーが他のサブスクライバーに依存するシナリオを設計する方法は?
私のアプリケーションでは、特定のモジュールで変更が発生した場合、他のいくつかのモジュールに通知する必要があるというシナリオがあります。変更が発生するモジュールをサブジェクトとして保持し、通知されるモジュールをオブザーバーとして保持することにより、オブザーバー パターンがここに適合すると考えました。
しかし、オブザーバー パターンの原則に従うと、オブザーバーは互いに独立しています。オブザーバー間に接続があってはなりません。私の場合、モジュールは異なりますが、依存しています。最初のモジュールの実行が正常に完了することは、次のモジュールを実行するために重要です。また、モジュール x が失敗した場合、モジュール 1 によってモジュール x-1 に対して行われたすべての変更を元に戻す必要があります。つまり、すべてのモジュールが正常に実行されるか、以前の状態にロールバックする必要があります。トランザクションのように想像できます。それから、オブザーバー パターンがこれを実装する正しい方法ではないことが間違っていることに気付きました。
ここでは、主題の変更が発生したときに処理する必要があるモジュールのセットがありますが、制約により、モジュールは互いに依存しています。誰かがこの問題を解決して、良いデザインを考え出すのを手伝ってくれませんか?
java - 手続き型コードとドメイン駆動設計スタイルのコードの違いは何ですか?
私はドメイン駆動設計 (DDD) の手法を試していますが、まだよく理解していないように感じています。
DDDは、ドメインオブジェクト、永続化のためのリポジトリ、クライアント(プレゼンテーション)用のドメインオブジェクトを組み立てるためのアグリゲータ、ドメインオブジェクトとリポジトリの上の薄い層であるサービス、アグリゲータにビジネスロジック(永続性、セキュリティなどのインフラストラクチャのものではない)を置くことを提案していますトランザクション境界として機能します。
このように言いましょう:
DDD では、ViewController --> SomeService --> {Domain Objects, Repositories, Aggregators}
私の現在の(手続き型)アプローチでは:ViewController --> SomeService --> DAO/Repository
ここで、ViewController は 1 つ以上のサービスと通信して、DAO を使用してデータベースとの間でデータをプル/プッシュします。ドメイン オブジェクトのプロパティでのみ動作するビジネス ロジックが、そのドメイン オブジェクト自体のメソッド内にある場合。最後に、サービスから取得したデータは DTO に集約され、View Layer に表示されます。
したがって、私には両方のアプローチがほとんど同じように見えます。
誰かが私に欠けているものを説明できますか?
PS:質問をよりよく説明するために、さらに情報を追加しています。理論的には、誰もが DDD が「ロジックはドメイン オブジェクトにある必要がある」ことを示唆していると言っています。わかった。実際のシナリオを考えてみましょう。
ShoppingCart アプリケーションで、一部のユーザーが注文を出しました。注文を処理するには、次のすべてのサブタスクを実行する必要があります。
各アイテムの詳細を取得し、合計注文価格を計算します。
配送先住所を取得し、住所確認サービスを使用して確認します
クレジットカードの詳細を検証/認証する
すべての注文関連情報を DB に保存します
したがって、DDDに従って、ロジックを配置します。
List オブジェクトをループする Order オブジェクトでの Order Total 計算。
Address オブジェクトには、BING アドレス検証を呼び出す validate() メソッドがあります。
CreditCard クラスには、いくつかの CCAuthorizationService を呼び出してサードパーティのサービスを使用して承認する authorize() メソッドがあります。
いくつかのリポジトリを使用して、すべての注文内容を DB に保存します。
これらのすべてのステップは、 Order.process() を呼び出すことによってトリガーされます
これが正しい DDD アプローチである場合は? もしそうなら、私たちのドメインオブジェクトはリポジトリと直接やり取りしており、これは関心の分離に違反しているようです.
これが正しい DDD アプローチではない場合、上記のユースケースをどのように設計するのか教えてもらえますか?
design-patterns - OOAD vs デザイン パターン - 混乱
私は 2 冊の HEAD ファースト ブック、OOAD と Design Patterns を手に取りました。デザインパターンを読み始めたとき、私はとても混乱しました。ここに私の基本的な疑問があります:
設計パターンはオブジェクト指向設計にのみ適用できますか? 私には、DPはOOADでのみ適用できるようです
設計パターンはオブジェクト指向設計 (で使用する一連のツール) の一部ですか? 具体的に私が尋ねようとしているのは、OOAD がより大きな目的であり、設計パターンが目的の達成に役立つかどうかです。
最初の 4 つまたは 5 つのパターンを読んだ後、誰かが優れた OO デザイナーであれば、これらのパターンを使用して自動的にデザインしたように見えます。
私は本当にとても混乱しています