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

ソフトウェア設計による問題の解決とソリューションの計画に関する質問。

3
HATEOASを使用してRESTサービスを発見するための戦略はありますか?
HATEOAS制約を使用してRESTサービスを構築する場合、リンクを介してリソースの存在を宣伝するのは非常に簡単です。あなたGETは私のサイトのルートにa を作成し、私はすべての第1層リソースをリストするルートドキュメントで応答します。 { users: { href: "/users" } questions { href: "/questions" } } これらのhref値の読み取り方法を理解しているクライアントは、これらの値に対してGET要求を実行し、アプリケーションで使用可能な現在のすべてのリソースを発見できます。 これは基本的なルックアップシナリオではうまく機能しますが、リソースがクエリ可能かどうかは示しません。たとえば、次のことを実行するのが妥当な場合があります。 GET /users?surname=Smith リソースの事前の知識がなくても、クライアントが一貫したクエリを形成できる十分な情報でこのクエリ機能を表現できる形式はありますか? さらに、クライアントがPOST期待された場所で特定の場所への実行を許可されていることを表現する方法はありますか。たとえば、クライアントが新しい質問リソースを作成するために以下を実行することが期待できます。 POST /questions { title: "Are there strategies for discovering REST services using HATEOAS?", body: "When building a REST service with the HATEOAS constraint, it's very..." } 人間が使用する形式としてHTMLを使用する場合、フォームとプロンプトを使用してこれを多く表現し、サービスで実行できる操作を人間が発見できるようにすることができます。 クライアントにとって同様のことができるフォーマットはありますか?
10 design  rest  hateoas 

1
java.utilパッケージのスタックのオブジェクト制約言語(OCL)
私は試験が近づいています。私は過去の論文を調べて、何が期待できるかを考えています。私は次のものに少しこだわっていて、誰かがいくつかの例の答えを出すことができれば本当に感謝します。 次の各操作(java.utilパッケージのStackクラスに含まれる)のOCLに前提条件と事後条件を記述します。 (1)ブールempty()-このスタックが空かどうかをテストします (2)E peek()-スタックから削除せずに、このスタックの最上部にあるオブジェクトを調べます (3)E pop()-このスタックの一番上のオブジェクトを削除し、そのオブジェクトをこの操作の値として返します (4)E push(E item)-アイテムをこのスタックの一番上にプッシュします ここで、Eはスタック内の要素のタイプを示します。 私の試みは次のとおりです: Boolean empty() pre: none post: self -> IsEmpty() = true //should this be result -> IsEmpty() = true because it returns a boolean value? E peek() pre: self -> NotEmpty() = true post: result = ??? // I …
10 design  languages  object  ocl 

3
ソフトウェア開発における「疑似実装」のようなコンセプトはありますか?
私は、技術/スケーラブルな製品を開発するための時間を費やすことなく、製品やデモをすぐに始めるために、人間ベースの計算方法やアルゴリズムを「偽造」する他の手段を使用する慣行を説明するラベルを探しています/分析ソリューション?例:Amazon Turkを使用して、レストランの空のテーブルの数をカウントします。 私はまた、この主題についてもっと知りたいと思っていますが、何を検索すればよいかわかりません。人間ベースの計算は1つの方法にすぎません。疑似実装の一般的な考え方に興味があります。何かアイデア、お勧めの読書?

5
出口コストをソリューションの選択に組み込む必要がありますか
私は現在、2つの実行可能なソフトウェア設計/ソリューションから選択しています。ソリューション1は実装が簡単ですが、一部のデータを独自の形式でロックし、後で変更するのが困難になります。ソリューション2は実装が困難ですが、後で変更する方がはるかに簡単です。 これについてYAGNIに行くべきか、それとも意思決定に出口費用を組み込むべきか?または別の質問として、出口コストはTCOの一部ですか? これを持って顧客に戻り、出口費用が適切であるかどうかを質問することを考えていますが、コミュニティが最初に何を考えているのか知りたいのですが。 PS出口費用は正しい用語ですか?

5
戦略パターンにリファクタリングされた関数を単体テストする方法は?
私のコードに次のような関数がある場合: class Employee{ public string calculateTax(string name, int salary) { switch (name) { case "Chris": doSomething($salary); case "David": doSomethingDifferent($salary); case "Scott": doOtherThing($salary); } } 通常、これをリファクタリングして、ファクトリクラスと戦略パターンを使用してPloymorphismを使用します。 public string calculateTax(string name) { InameHandler nameHandler = NameHandlerFactory::getHandler(name); nameHandler->calculateTax($salary); } TDDを使用している場合は、calculateTax()リファクタリングの前にオリジナルで機能するテストをいくつか用意します。 例: calculateTax_givenChrisSalaryBelowThreshold_Expect111(){} calculateTax_givenChrisSalaryAboveThreshold_Expect111(){} calculateTax_givenDavidSalaryBelowThreshold_Expect222(){} calculateTax_givenDavidSalaryAboveThreshold_Expect222(){} calculateTax_givenScottSalaryBelowThreshold_Expect333(){} calculateTax_givenScottSalaryAboveThreshold_Expect333(){} リファクタリング後、FactoryクラスNameHandlerFactoryと少なくとも3つのの実装ができInameHandlerます。 テストをリファクタリングするにはどうすればよいですか?の単体テストを削除して、実装ごとにTestクラスを作成する必要claculateTax()がEmployeeTestsありますInameHandlerか? Factoryクラスもテストする必要がありますか?

4
応答を処理するためのデザインパターン
ほとんどの場合、特定の関数呼び出しの応答を処理するコードを書いているとき、次のコード構造が得られます。 例:これはログインシステムの認証を処理する関数です class Authentication{ function login(){ //This function is called from my Controller $result=$this->authenticate($username,$password); if($result=='wrong password'){ //increase the login trials counter //send mail to admin //store visitor ip }else if($result=='wrong username'){ //increase the login trials counter //do other stuff }else if($result=='login trials exceeded') //do some stuff }else if($result=='banned ip'){ //do …

1
Pythonの「神クラス」をリファクタリングする方法は?
問題 私は、メインクラスが少し「神オブジェクト」であるPythonプロジェクトに取り組んでいます。そこされているので、多くの属性とメソッドのfrigginの! クラスをリファクタリングしたい。 これまでのところ… 最初のステップとして、私は比較的単純なことをしたいと思います。しかし、最も簡単な方法を試したところ、いくつかのテストと既存の例が破られました。 基本的に、クラスには属性のリストがたくさんありますが、私はそれらをはっきりと見て、「これらの5つの属性は関連しています...これらの8つの属性も関連しています...そして残りはあります」と考えることができます。 getattr 基本的に、関連する属性をdictのようなヘルパークラスにグループ化したかっただけです。__getattr__その仕事に理想的だと感じました。それで、属性を別のクラスに移動し、確かに、__getattr__その魔法は完全にうまくいきました… で、最初に。 しかし、私は例の1つを実行してみました。サンプルのサブクラスは、これらの属性の1つを直接(クラスレベルで)設定しようとします。しかし、属性が親クラスで「物理的に配置」されなくなったため、属性が存在しないというエラーが表示されました。 @property 次に、@propertyデコレータについて読みます。しかし、それが親クラスのプロパティであるself.x = blah場合に実行したいサブクラスに問題が発生することも読みましたx。 望ましい self.whatever親のwhateverプロパティがクラス(またはインスタンス)自体に「物理的に」配置されていない場合でも、すべてのクライアントコードがを使用して機能し続けるようにします。 関連する属性をdictのようなコンテナにグループ化します。 メインクラスのコードの極端なノイズを減らします。 たとえば、これを単に変更したくありません。 larry = 2 curly = 'abcd' moe = self.doh() これに: larry = something_else('larry') curly = something_else('curly') moe = yet_another_thing.moe() …それはまだうるさいからです。これにより、simple属性がデータを管理できるものにうまく変換されますが、元の変数には3つの変数があり、調整されたバージョンにはまだ3つの変数があります。 しかし、私はこのようなもので大丈夫でしょう: stooges = Stooges() そして、のルックアップがself.larry失敗した場合、何かがチェックされstooges、larryそこにあるかどうかが確認されます。(ただし、サブクラスlarry = 'blah'がクラスレベルで実行しようとした場合にも機能する必要があります。) 概要 親クラスの属性の関連グループを、他の場所にすべてのデータを格納する単一の属性に置き換えたい larry = …

2
「デメテルの法則」はパブリック/ APIメソッドの署名に適用できますか?
API /パブリックメソッドシグネチャへの変更は、これらのメソッドを使用するクライアントコードを壊さないようにするために最小限でなければならないので、デメテルの法則はこれらにあまり適用されないのではないかと思っていました。 簡単な例: class Account() { double balance; public void debit(Transaction t) { balance -= t.getAmount(); } } debitメソッドは、2倍の金額ではなくTransactionオブジェクトを渡すことに注意してください( 'Law of Demeter'は、私が理解しているように、必要な情報だけを渡すと言います。この場合、Transactionオブジェクトではなく、金額だけを渡します... )。この背後にある理由は、将来のメソッドでは、金額の他にいくつかのトランザクションプロパティが必要になる可能性があるためです。私が理解していることから、これは将来的に新しいパラメータを追加することによってメソッドのシグネチャを壊すことを防ぎます。 これはそれを賢明な選択にしますか?それとも何か不足していますか?

7
コードを記述できる状態から優れた開発者になるにはどうすればよいですか?
スクリプト(bash、awk)から単純なアプリケーション(c、php、python)を記述して、より大きく複雑なソフトウェアを設計および開発する方法に至る具体的な説明がないことに私は不満を感じています。一方にはプログラミング言語の本があり、もう一方にはプログラマーのチーム向けに設計されたソフトウェアエンジニアリング/プロジェクト管理の本があるようです。 私は両方をたくさん読みました。私はXP / Agileの古典を読んだことがあり、ソフトウェア開発プロセスについて適切な理論的理解を持っています。私は他の人のコードを読むのが好きで、それをかなり順守できます。しかし、プロジェクトのアイデアがある場合、または「ここが問題/必要です」から「ここが解決策」に行きたいとき、私の心は空白を描き、どこから始めればよいのかわかりません。 私はそれをハックするだけですか?チームで働いていない個々の開発者や、大きなソフトウェア会社のための構造化されたワークフローはありますか?私はPMPを取得したり、ソフトウェア会社で働いたりすることを望んでいません。効果的、効率的、実用的なワークフローを探しています。

5
構成クラス/構造:パターンまたはアンチパターン?代替案?
プログラムに新しい構成オプションを追加すると、多くの場合、オプションを実行する必要がある場所にオプションを取得するという点で、大量の波及効果が生じる可能性があります。私が認識しているこれに対処する3つの基本的な方法があります。 すべての構成設定を、プリミティブとして明示的に必要とするプログラムの部分に渡します。これは最も明示的な方法であり、物事を最も分離する方法です。欠点は、これが冗長であり、もろいことです。 最も頻繁に使用される構成設定をグローバル/静的にします。これは最も簡単な方法ですが、距離を置いてアクションを導入し、テスト性を妨げ、構成が本当にグローバルであると仮定します(常に1つの構成のみが必要である)。 プログラム全体またはプログラム内の主要な懸念事項のすべての構成オプションを含む構成クラス/構造体を作成し、これを明示的に渡します。これは、(1)より明確ではありませんが、(2)より明確です。1つの関数呼び出しのみの設定を変更する場合は、構成オブジェクトを複製して、この1つの値を変更できます。これは、テストと実際の両方で役立ちます。ただし、必要のない関数に大量の情報を渡す可能性があり、configクラス/構造体の値を変更すると、離れた場所でアクションが発生する可能性があります。 (3)パターンとアンチパターンのどちらを検討しますか?アンチパターンの場合、代わりに何をしますか?

6
顧客の世界が変わりました-これをどのように処理しますか?
少し前、私たちは、SQL Serverをバックエンドとして使用して、顧客の古いメインフレームシステムを新しいイントラネットASP.NETソリューションで置き換えるプロジェクトを任されました。これの一部は、ビジネスのリエンジニアリングでもありました。基本的に、システムを変更するとき、ビジネスをよりよく行うにはどうすればよいかを考えていました。 したがって、最初のタスクは、論理データモデルと物理データモデルを組み合わせて実行することでした。顧客はこれらの議論に参加しており、完全にサインオフしていました。次のフェーズは、各モジュールの設計と構築を実際に行うことでした。さて、長い話を簡単に言うと、プログラミングは完了しており、システムの並列テストに取り掛かっています。これまでのほとんどのモジュールで問題はありません。 私たちには1つのシステムがあります。ビジネスユーザーにアプリケーションとレポートのみを表示する場合は、すべて問題ありません。新しい統合ワークフローと連携し、以前の手動プロセスを自動化し、仕様どおりに機能します。移行されたレガシーデータについては、並行テストでいくつかの問題が明らかになりました。レガシーシステムのビルダーは、新しいスキーマとビジネスプロセスを理解するのに非常に苦労しています。したがって、レガシーデータを取得して新しいスキーマに入れる方法を理解するのに非常に苦労しています。このため、彼らはビジネスユーザーと利害関係者の会議を呼び出し、新しいシステムは古いシステムが提供したデータを提供しない(実際にはそうである場合)-これは新しいシステムの見た目を悪くします。 これは控えめに言ってもイライラします。新しいシステムはうまく機能し、必要なすべての機能を提供します。ITスタッフが新しいテーブルに古いデータを入力できない場合は、ビジネスユーザーは新しい機能に満足しています。 これを処理する方法についての提案を求めています。いくつかの政治的動きのために、新しい「アーキテクト」はシステムがどのように機能するかを理解しておらず、ITスタッフが要求している変更の影響を十分に理解できません。ITスタッフはシステムにいくつかの根本的な変更を望んでいます。これは本質的に不要であり、実際には悪い設計ですが、彼らは顧客です。 何かご意見は?

2
単一責任とカスタムデータタイプ
過去数か月、私はここSEや他のサイトの人々に、私のコードに関して建設的な批判をしてくれるように頼みました。ほぼ毎回飛び出し続けていることが1つあります。それでも、その推奨事項には同意しません。:P私はそれについてここで議論したいと思います、そして多分物事は私にとってより明確になるでしょう。 それは単一責任原則(SRP)に関するものです。基本的に、私はデータクラスを持っています。これは、データFontを操作するための関数だけでなく、データをロードするための関数も保持しています。ロードファンクションはファクトリクラス内に配置する必要があると、2つは分離する必要があると言われています。これはSRPの誤解だと思います... 私のフォントクラスの一部 class Font { public: bool isLoaded() const; void loadFromFile(const std::string& file); void loadFromMemory(const void* buffer, std::size_t size); void free(); void some(); void another(); }; 提案されたデザイン class Font { public: void some(); void another(); }; class FontFactory { public: virtual std::unique_ptr<Font> createFromFile(...) = 0; virtual std::unique_ptr<Font> createFromMemory(...) = …


5
エンドユーザーのドキュメントの例とアドバイスのための適切なリファレンス[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 私たちの社内ソフトウェアは多くのユーザーに使用されており、トレーニング部門はエンドユーザーのドキュメント形式のヒントを求めてきました。 トレーニング部門がインスピレーションを得るために使用するソフトウェアエンドユーザードキュメントの良い例や、良いアドバイスがあるサイトがどこにあるか知っていますか? これはこの質問に似ていますが、技術者以外のユーザーが使用するエンドユーザードキュメントを探しています。

1
接着剤や管理のクラスが多すぎるのはいつですか?
デザイン内の他のクラスを管理する集中型クラスを作成する傾向があります。それ自体はすべて保存されませんが、ほとんどのデータ要求は最初に「マネージャー」に送信されます。この質問への答えを見ていると、「神のオブジェクト」という言葉に気づきました。ウィキペディアは、それを当然のことながらアンチパターンとしてリストしています。 データとメッセージを場所から場所へと渡す正当な接着剤クラスまたはモジュールと、やり過ぎているクラスとの間の境界はどこにありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.