問題タブ [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.
c# - 返品タイプが異なる場合に戦略パターンを達成する
SaveManager Abstractクラスと、SaveManager Abstractクラスを実装する具体的なクラスTVSaveManager、DataSaveManager、VoiceSaveManagerがあります。
ファクトリクラスは、作成するマネージャーを決定し、リストを送信します。リストをループして、すべての具象クラスが準拠する共通インターフェース「MapAndSaveProduct」を呼び出します。私はもっと戦略パターンが好きだと思います。
ただし、具体的なsavemanageのMapAndSaveProductメソッドの戻り型はすべて異なります。TvSaveManagerのTVResponseやDataSaveManagerのDataResponseなど。そこで、すべての戻り型をクラブ化するSaveResponseModelクラスを作成しました(SaveResponseModelをファクトリに渡して、すべての具象のsavemanagerクラスのコンストラクターに渡されるようにします。個々のクラスはTvSaveManager-> saveResponseModel.TvResponseのように目的のプロパティを設定します)。希望する結果が得られ、コードはきれいに見えます。
質問は、1)異なるタイプがある場合、このパターンを使用する正しい方法ですか?2)具象クラスの種類が異なる場合、戦略パターンを使用するべきではありませんか?3)この場合、別のデザインパターンにアプローチする必要があります。はいの場合、どれですか?
php - PHP抽象メソッドとデフォルトメソッド
メソッドを抽象として定義する場合、子クラスのシグネチャはそれと互換性がある必要があることに気付きました。これにより、子クラスの署名で型チェックを使用する機会が失われます。
親メソッドをデフォルトの実装を持つ具象メソッドとして定義すると、そのインターフェイスに準拠せずに親メソッドをオーバーライドできます。
適切なデフォルトの実装が存在する場合、私は2番目のアプローチを使用する傾向があります。しかし、私はトラブルのために自分自身を入れていますか?
'abstract'の使用が非常に制限されているのは奇妙に思えるので、何かが足りないかどうか知りたいです...
注-他の言語に関しても同様の質問がなされているようですが、PHPはそれほど多くありません。
c# - DDD-サービスレイヤーとリポジトリ間の複製
私はDDDの原則に準拠しようとするいくつかのアプリケーションに取り組んできましたが、サービスレイヤーとリポジトリの間にコードの臭いのように感じる重複がある状況に陥ることに気づきました。
サービスレイヤーのほとんどの操作では、CRUD操作、GetAll、GetById、Create、Deleteなどへの直接マッピングのようです。アーキテクチャのフローはこれらの行内にあります。サービスレイヤーを呼び出すコントローラーがあります。バックエンドと通信するORMを呼び出すリポジトリを呼び出します。
したがって、たとえばGetAllはSLとリポジトリの両方に存在します。さて、GetAllが特定のアイテムを無視する必要があるという変更/ビジネス要件がある場合、どのようにそれを行うべきですか、リポジトリでこれらを無視する必要がありますか、それともサービスレイヤーに配置する必要があるビジネスロジックですか?ORMを直接呼び出すサービスレイヤーがあれば、生活は楽になりませんか?
要約すると、サービスレイヤーが一部のビジネスロジックを抽象化できることは理解していますが、ほとんどの場合、単純なCRUD操作を処理している場合は、リポジトリを削除する方が簡単ではないでしょうか。しかし、SLに複雑なビジネスロジックを持ついくつかのメソッドも含まれている場合、これらはリポジトリを経由する必要がありますか?優れた設計の観点から、一貫性を優先し、常にリポジトリを通過するか、単純に保ち、CRUD操作への単純な1対1のマッピングではない場合にのみリポジトリを使用する必要があります。
PS:似たような質問があるように見えますが、満足のいく答えは見つかりませんでした
oop - ブログシステムの未分類の投稿をデザインする方法
私は3つのテーブルを持っています:
役職
カテゴリー
PostCategory(多対多の関係テーブル)
ユーザーが投稿に対して1つ以上のカテゴリを選択すると、正常に機能します。しかし、1つのシナリオは、ユーザーがカテゴリを選択しなかった場合、これらのカテゴリ化されていない投稿を管理するにはどうすればよいですか?
私は2つの方法を考えました、どちらが良いかわかりません。
1.未分類の投稿は[PostCategory]に挿入しないでください。
問題:
a)URLルートで、「/ Post / Category/Travel」を使用して分類された投稿を表示します。これで、ユーザーは分類されていないすべての投稿を一覧表示したいので、「/ Post / Category/Uncategorized」のようなものしか使用できません。これにより、「未分類」の文字列と通常のURLルート値を区別するために、多くのコードが変更されます。
b)ユーザー自身が「未分類」というカテゴリをシステムに追加すると、混乱が生じます。(システム予約語を定義できるかもしれませんが、それは良いことではないと思います。)
2.システム予約語として、[Category]に定数値(Uncategorized)を追加します。ユーザーがどのカテゴリも選択しない場合は、投稿をPostCategory(postId、UncategorizedId)に挿入します。
問題:
「未分類」をカテゴリと見なします。これは、コンピュータにとって通常のカテゴリを意味します。これが特別なカテゴリであることを知っているのは人間だけです。OOP設計では良くありません。
どちらが優れているかを判断するのは難しいですが、「未分類」の投稿を管理する他の方法はありますか?
c# - クライアント/サーバー メッセージの処理?
クライアント/サーバーからシリアル化されたデータを受け取ります。データが逆シリアル化されると、コマンド ハンドラーに入りreceivedData.Action
ますClientMessage
。
コマンド ハンドラーは、クライアント メッセージを処理し、クライアントに提供する必要がある応答を返します。
次のように、クライアント メッセージの列挙型があります。
私が苦労しているのは、すべてのアクションを記述する方法です。たとえば、次のようになります。
- クライアントが送信するものと、サーバーが応答するものに対して別の列挙型を用意する必要がありますか?
- または、すべてのメッセージを含む単一の列挙型を使用し、要求に従ってそれに従う必要がありますか?
- または、メッセージを定義して処理するにはどうすればよいですか?
これは、より良いビューを提供するために、現在私のサーバー/クライアントが行っていることです。
- サーバーの起動
- クライアント接続
- クライアントが認証をサーバーに送信
- サーバーはクライアントを検証し、接続された承認メッセージを送信します
- クライアントはそこからサーバーへのプロファイルの送信と更新を開始します
これはおおよその例にすぎません。
IPacketHandler
指示
INIT の例
PS: 私のタイトルがずれていて、より良い提案がある場合はお知らせください。または、更新していただける場合は、これを英語で説明する方法がわかりませんでした.
uml - OOADとUMLの違い?
私はソフトウェア分野が初めてです。OOAD と UML の違いがわかりません。OOAD について学ぶためのチュートリアルを提案できる人はいますか。
architecture - シーケンシャル凝集度を機能的凝集度に変えますか?
このウェブサイトで説明されているように、
(唯一の)手続き的凝集度を備えたモジュールは、異なる、場合によっては無関係なアクティビティをサポートするモジュールであり、制御は1つのアクティビティから次のアクティビティに渡されます。Page-Jonesは、モジュールの例を示しています(その名前は、「休日の食事の準備:」のようなものである可能性があります。
- 以前の食事からのきれいな道具
- トルコを焙煎する準備をする
- 電話をかける
- シャワーを浴びる
- 野菜を刻む
- セットテーブル
さて、私の質問は、これらのアクティビティのそれぞれ、つまり電話をかけることが独自のメソッドに抽出されても、すべてが同じ順序で呼び出されるかどうかです。
この方法はまだ手続き上の結束の例ですか?それとも、問題に関連する1つのタスク(この場合は食事の準備)を実行するためのアクティビティをサポートするため、機能的にまとまりがありますか?
c# - C#抽象クラスと共変
私はこのようなコードを持っています:
DataFilterクラスを再利用する場合:
リスト動物のプロパティを再利用する方法???
function1を別のクラスに分割するためにリファクタリングする方法
c# - コンストラクター以外の場所に構造体/オブジェクトを構築する
同じビジネス エンティティを表すさまざまな種類のオブジェクトがあります。
UIObject
、PowershellObject
、DevCodeModelObject
、WMIObject
すべて同じエンティティに対する異なる表現です。
エンティティがAnimal
、AnimalUIObject
、AnimalPSObject
、AnimalModelObject
などであるAnimalWMIObject
とします。
AnimalUIObject
、AnimalPSObject
、の実装AnimalModelObject
はすべて別のアセンブリに含まれています。
今私のシナリオは、Animal
それが元のアセンブリに関係なく、ビジネス エンティティの内容を確認したいということです。そこで、エンティティGenericAnimal
を表すクラスを作成しました。Animal
ここでGenericAnimal
、次のコンストラクターを追加しました。
基本的にGenericAnimal
、基礎となるすべてのアセンブリに依存するようにしたので、検証中にこの抽象化を処理しました。
これを行うもう 1 つの方法はGenericAnimal
、空のコンストラクターを使用して、これらの基になるアセンブリTransform()
にGenericAnimal
.
どちらのアプローチにも、いくつかの長所と短所があります。
第 1 のアプローチ:
長所: すべての構築ロジックは 1 つのクラスの 1 か所にありますGenericAnimal
。 短所:GenericAnimal
新しい表現形式があるたびに、クラスを変更する必要があります。
2 番目のアプローチ:
長所: 構築の責任は、基になるアセンブリに委任されます。
短所: 構築ロジックはアセンブリ全体に分散しているため、明日プロパティを追加する必要がある場合は、X
すべてGenericAnimal
のアセンブリに触れてTransform
メソッドを変更する必要があります。
どちらのアプローチが良いですか?
またはどちらがより少ない悪だと思いますか?
上記の2つよりも優れた代替方法はありますか?
私が受け取ったコメントに基づいてさらに詳しく説明します。基になるオブジェクトの構造を変更する余裕はありません。つまり、AnimalUIObject AnimalPSObject などを変更することはできません。GenericAnimal は、検証目的で私が導入したコンストラクトです。
oop - さまざまな方法でオブジェクトをコピーする
オブジェクトをさまざまな方法でコピーするための設計原則/パターンを探しています。たとえば、タイプ ACCOUNT クラスのオブジェクトをコピーするには、次のオプションがあります。
1) 正確に複製
2) クレジット情報を除くすべてを複製
3) クレジット反転用のクローン (値を無効にする) など.
すべてのシナリオで、同じオブジェクトが複製されます。ただし、クライアントの入力に基づいて値が異なります。私はプロトタイプのパターンを考えていました。ただし、クライアントがオブジェクトのコピー方法を制御することはできません。
ありがとう、
プラディープ