タグ付けされた質問 「hierarchy」

12
クライアントは現在のプロジェクトのコメントの25%を望んでいますが、どのように対応しますか?[閉まっている]
ジュニア開発者はこちら。 私は現在、私の会社の大顧客向けのWebアプリケーションで単独で作業しています。先月始めました。クライアントは、各ソフトウェアプロジェクトに少なくとも25%のコメントを求めています。 私は以前のアプリケーションのコードをチェックしました、そして私の観察はここにあります: 各ファイルはコメントブロックで始まります(パッケージ、最終更新日、会社名、著作権) すべての変数は名前でコメント化されます // nameOfCustomer public String nameOfCustomer すべてのゲッターとセッターがコメントされます 非常に少数の有用なコメント 開発者は、品質や有用性に関係なく、25%のしきい値に達するためにできるだけ多くのコメントを配置するようです。私の会社は、「クライアントが望んでいるとおりにそれを行う」と言っています。 私はこれについてクライアントと直接話しませんでした。これまでの私の議論は次のとおりです。 読み書きする無駄な行(時間の無駄) コメントが時々更新されない(混乱の原因) 開発者が実際に役立つコメントを使用または信頼する可能性が低い このテーマに関するアドバイスは何ですか?状況をどのように処理すればよいですか?

5
自身または他の2つのことを表すデータ型を作成する方法
バックグラウンド 私が取り組んでいる実際の問題は次のとおりです。カードゲームMagic:The Gatheringでカードを表現する方法が必要です。ゲーム内のほとんどのカードは見た目が普通のカードですが、一部は2つの部分に分かれており、それぞれに名前が付いています。これらの2部構成のカードの各半分は、カード自体として扱われます。そのため、明確にするためにCard、通常のカード、または2部構成のカードの半分(つまり、名前が1つだけのカード)を参照するためにのみ使用します。 したがって、基本タイプのCardがあります。これらのオブジェクトの目的は、実際には単にカードのプロパティを保持することです。彼らは本当に自分で何もしません。 interface Card { String name(); String text(); // etc } には2つのサブクラスがありCard、私はこれを呼び出していますPartialCard(2部構成のカードの半分)とWholeCard(通常のカード)。 PartialCardには2つの追加メソッドがあります:PartialCard otherPart()とboolean isFirstPart()。 代表者 私がデッキを持っている場合、それはWholeCardsではなくCardsで構成されている必要Cardがあり、a はである可能性がありPartialCard、それは意味がありません。そのため、「物理カード」を表すオブジェクト、つまり1つWholeCardまたは2つPartialCardのsを表すことができるオブジェクトが必要です。私は暫定的にこのタイプを呼んでいるRepresentative、とCard方法を持っているでしょうgetRepresentative()。Aは、Representativeカード(複数可)にほとんど直接的な情報を提供するだろう、それはそれ/それらへの唯一のポイントだろう、を表します。今、私の素晴らしい/クレイジー/愚かなアイデア(あなたが決める)は、WholeCardがとの両方 Cardを継承するということですRepresentative。結局のところ、彼らは自分自身を表すカードです!WholeCardsはgetRepresentativeとして実装できますreturn this;。 に関してはPartialCards、それらは自分自身を表しRepresentativeてはいませんが、a Cardではなく、2つPartialCardのにアクセスするためのメソッドを提供する外部を持っています。 このタイプの階層は理にかなっていると思いますが、複雑です。Cardsを「概念的なカード」と考え、Representativesを「物理的なカード」と考えると、ほとんどのカードは両方です。物理的なカードには実際には概念的なカードが含まれており、それらは同じものではないと主張することができると思いますが、私はそれらが同じだと主張します。 型キャストの必要性 のでPartialCard、SとWholeCardsともにCard、S、及びそれらを分離するためには良い理由は、通常はありません、私は通常、ちょうどと仕事ができると思いますCollection<Card>。そのPartialCardため、追加のメソッドにアクセスするためにs をキャストする必要がある場合があります。今は、明示的なキャストが本当に好きではないので、ここで説明するシステムを使用しています。そしてのようにCard、それらが表す実際のにアクセスするにはRepresentative、WholeCardまたはのいずれかにキャストする必要があります。CompositeCard 要約のために: ベースタイプ Representative ベースタイプ Card タイプWholeCard extends Card, Representative(アクセスは不要、それ自体を表す) タイプPartialCard extends Card(他の部分へのアクセスを許可) タイプComposite extends Representative(両方の部分にアクセスできます) これは非常識ですか?実際にはかなり理にかなっていると思うが、正直なところわからない。

3
複合パターンを使用するか、ツリー構造を使用するか、3番目の実装を使用するかをどのように判断できますか?
「オブザーバー」タイプと「サブジェクト」タイプの2つのクライアントタイプがあります。それらは両方ともグループの階層に関連付けられています。 オブザーバーは、異なる階層全体で関連付けられているグループから(カレンダー)データを受信します。このデータは、データを収集しようとしているグループの「親」グループからのデータを組み合わせて計算されます(各グループは1つの親のみを持つことができます)。 サブジェクトは、関連付けられているグループにデータ(オブザーバーが受信するデータ)を作成できます。グループでデータが作成されると、グループのすべての「子供」もデータを持ち、データの特定の領域の独自のバージョンを作成できますが、作成された元のデータにリンクされます(私の特定の実装では、元のデータには期間と見出しが含まれますが、サブグループは、それぞれのグループに直接リンクされた受信者の残りのデータを指定します)。 ただし、サブジェクトがデータを作成するとき、影響を受けるすべてのオブザーバーがこれと競合するデータを持っているかどうかを確認する必要があります。つまり、理解できる限り、巨大な再帰関数を意味します。 したがって、これは、上下に移動できる階層を持たせる必要があるという事実に要約できると思いますし、いくつかの場所はそれらを全体として扱うことができます(基本的に再帰)。 また、私は単に機能するソリューションを目指しているわけではありません。比較的理解しやすく(少なくともアーキテクチャ的には)、将来的に追加機能を簡単に受信できる柔軟性を備えたソリューションを見つけたいと思っています。 この問題または同様の階層の問題を解決するための設計パターン、または実行すべき優れたプラクティスはありますか? 編集: 私が持っているデザインは次のとおりです。 「Phoenix」クラスは、適切な名前をまだ考えていなかったため、そのように命名されています。 しかし、これに加えて、グループを通じて特定のオブザーバーに関連付けられている場合でも、特定のオブザーバーに対して特定のアクティビティを非表示にする必要があります。 少しオフトピック: 個人的には、この問題をより小さな問題に切り詰めることができるはずだと感じていますが、それは私をどのように回避します。相互に関連付けられていない複数の再帰機能と、さまざまな方法で情報を取得する必要があるさまざまなクライアントタイプが関係しているためだと思います。本当に頭を包むことはできません。階層の問題をカプセル化する方法を改善する方向に誰かが私を導くことができれば、それを受け取ることも非常にうれしいです。

1
MVCでは、モデルにサブビューモデルを含める必要がありますか?
背景: 同僚と私はMVCの解釈が異なります。つまり、同じ問題を考えると、根本的に異なる解決策が考えられます。彼はJavaのバックグラウンド出身で、MVCのすべてのコンポーネントが伝統的にオブジェクトをモデル化している可能性があります。私はHaskellのバックグラウンド出身で、OOPの経験はほとんどありません。 問題空間: モデル化しようとしている問題は、デスクトップ環境に少し似ています。ユーザーセッション(おそらくユーザーのログイン、デスクトップの背景)とデスクトップ上のプロセス(iTunes、Finderなど)には、それぞれ独自のモデルプロパティ(最小化など)があるという概念があります。 次の点に同意します。HMVCが最も優れた表現であると考えています。Session(デスクトップ)とProcess(アプリケーション)の2つのMVCオブジェクトがあること、およびProcessの概念Sessionやバックリンクを必要としないことに同意します。 ただし、MVCの中心的な意味と、ユーザーのデスクトップ上のプロセスのリストを保持する場所にどのように影響するかについては、意見の相違があります。 彼の解釈: 彼は伝統的にコードやレンダリングシステムで簡単にモデル化できる非常に有効なポイントを主張しています。彼は、プロセスのリストはProcessControllerオブジェクトのリストである必要があり、SessionControllerその中にモデルが個別のオブジェクトとして内部に含まれていると述べています。状態の、かなりの量の両方の中にあることをこれは意味SessionControllerし、SessionModelどのように関連しているSessionViewレンダリングする必要があります。 これは、簡単な検索でインターネット上で読み取ることができたものと非常に調和しているようです。 私の解釈: 私の解釈は最大のアーキテクチャ変更を必要とし、コードでの実装は難しいようですが、概念的には正しいと思います。なぜこれが当てはまらないのか、またはこの解釈と一致する別のモデル(MVCでない場合)を提示し、両方のパターンの長所と短所を強調して、最も情報に基づいた決定を下せるように誰かに説明してほしい(どちらも持っていない)ソフトウェアアーキテクチャの強力な背景)。 :私は3つの交換部品とトライアドとしてMVCを参照してくださいModel、ControllerとView。これは、私がインターネット上で読むことができるものと一致し、一部のソースは、「同じインターフェースを持つビュー、コントローラー、およびモデルは、異なる効果に交換可能である必要がある」のようなものに沿って物事を言うでしょう。これが機能すると想像する方法は次のとおりです。 モデルを交換すると、データの検証または保存の方法が変わります コントローラを交換すると、ページの動作が変更されますが、ページの一般的なデータコンテンツを変更する可能性があるものは変更されません ビューを交換すると、ページの表示方法が変わります このことから、私は任意の与えられたことを推論Modelし、Viewコントローラだけで行動していないページの「内容」を変更する必要があるため、唯一のコントローラはデータにページを変更しないでくださいスワッピング最初にレンダリングします。これは、鉄道システムの「駅コントローラー」としてのコントローラーの概念的な視覚化、モデルとしての鉄道の計画、および実際の物理的な外観とトラックの外観/感触(異なるフレーバーでは、「ビューとして「リアル」または「バーチャル3D」)。 ここで私たちは反対します: でユーザーに表示されるデータSessionViewはデスクトップ上のさまざまなプロセスによって変更されるため(プロセスは関連データとしてモデル化しています)、にSessionModelはのインスタンスのリストが含まれているはずですProcessModel。つまりSessionController、同じでランダムを使用すると、SessionView概念的に同じデータ(デスクトップ上のプロセス)が表示されるはずです。 彼は、Model別のモデルについて決して知らない方がより意味があると主張しています。つまり、SessionControllerにはのリストがProcessControllerあり、各Controllerオブジェクトにはそのモデルへのリンクがあります。a SessionViewが同じSessionModelでも異なるSessionController場合、ユーザーに表示されるデータは根本的に異なるはずです。 それぞれの解釈について議論し、最も十分な情報に基づいた結果に到達するために私たちを助けてください。 御時間ありがとうございます!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.