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

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

7
ifステートメントまたはスイッチの長いチェーン以外に、これを行うためのよりインテリジェントな方法はありますか?
メッセージを受信するIRCボットを実装し、そのメッセージをチェックして、呼び出す関数を決定しています。これを行うより賢い方法はありますか?20個のコマンドが好きになった後、すぐに手に負えなくなるようです。 おそらくこれを抽象化するより良い方法がありますか? public void onMessage(String channel, String sender, String login, String hostname, String message){ if (message.equalsIgnoreCase(".np")){ // TODO: Use Last.fm API to find the now playing } else if (message.toLowerCase().startsWith(".register")) { cmd.registerLastNick(channel, sender, message); } else if (message.toLowerCase().startsWith("give us a countdown")) { cmd.countdown(channel, message); } else if (message.toLowerCase().startsWith("remember am routine")) …

7
静的データをデータベースまたは他の場所に保存する必要がありますか?
現時点ではいくつかのソフトウェアに取り組んでいますが、これでどのルートを取るべきかわかりません。モバイルデバイスのどこかに保存するデータがあります。データは決して変化せず、階層的な関係があり、表示の入力に使用されます。このデータにはかなりの量があります。 次のオプションがあります。 列挙型/オブジェクトのセット XMLファイル 組み込みSQLiteデータベース この特定のケースでは、enumsオプションが最も作業が少ないと思いますが、そのようなコードに埋め込まれているデータから匂いがします。 XMLファイルは最も理にかなっていると思いますが、それを解析することはリソースヒットになります。 データベースのパフォーマンスへの影響はそれほど大きくありませんが、静的データでは過剰すぎるようです。 ここで正しい設計パスはどれですか? 注:「決して」変更しないと、変更されることはほとんどありません。問題のデータは一連の政府標準のモデルであるため、将来のある時点で変更される可能性がありますが、定期的に変更されることはなく、標準の変更によってソフトウェアが自動的に更新されることもありません要件の変更をトリガーします。
20 design 

3
PHP Webアプリケーションのアーキテクチャ/設計[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 PHPでWebアプリケーションを開発する新しい仕事に真っ先に投げ込まれました。私は決してPHPの初心者ではありませんが、以前に大規模なアプリケーションを開発したことはありません。将来の問題に備えて自分自身をセットアップすることを避けるために、開発をどのように構成するのか疑問に思っています。機能とパフォーマンスの観点から時間をかけてスケーリングできるように、アプリケーションを適切な方法で設計および設計するにはどうすればよいですか。私は次のようなことを考えています: バックエンドとフロントエンドの分離 ディレクトリ構造 持続可能な方法で大規模なPHP Webアプリケーション開発にアプローチできるようにする、アーキテクチャおよびアプリケーションの設計パターン、フレームワーク、およびメソッドへのポインターをいただければ幸いです。


2
WebサイトにHTML / CSSレイアウトを使用する代替手段はありますか?[閉まっている]
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 ここで何が尋ねられているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 HTML / CSS以外のWebサイトのレイアウトを設計するためのマークアップまたはプログラム式を作成する既存の使用中の、または単なる概念的な試みはありますか? 他の人がいて、頻繁に使用されているように見えない場合。どうしてこれなの?

3
パブリックメンバーを仮想化または抽象化しないでください-本当にですか?
2000年代に、私の同僚は、パブリックメソッドを仮想または抽象化するのはアンチパターンだと言っていました。 たとえば、彼は次のようなクラスはうまく設計されていないと考えました。 public abstract class PublicAbstractOrVirtual { public abstract void Method1(string argument); public virtual void Method2(string argument) { if (argument == null) throw new ArgumentNullException(nameof(argument)); // default implementation } } 彼は言った 実装Method1およびオーバーライドする派生クラスの開発者はMethod2、引数の検証を繰り返す必要があります。 場合には、基本クラスの開発者は、カスタマイズの一部の周りに何かを追加することを決定しMethod1たりMethod2、後で、彼はそれを行うことはできません。 代わりに、私の同僚がこのアプローチを提案しました: public abstract class ProtectedAbstractOrVirtual { public void Method1(string argument) { if (argument == null) throw new …

10
開発の開始時または終了時に、パフォーマンスを向上させるためにソフトウェアを最適化するのはいつですか?
私はジュニアソフトウェア開発者であり、パフォーマンス(速度)を向上させるためにソフトウェアを最適化するのに最適な時期はいつになるのか疑問に思っていました。 ソフトウェアが非常に大きく、管理が複雑ではないと仮定すると、最初にそれを最適化するためにより多くの時間を費やす方が良いでしょうか、またはすべての機能を正しく実行するソフトウェアを開発し、パフォーマンスを向上させるために最適化を進めるべきですか?

5
「深い構成階層」も悪くないですか?
「構成階層」が問題でない場合はおApびしますが、質問でそれが何を意味するのかを説明します。 「継承階層をフラットに保つ」や「継承よりも合成を優先する」などのバリエーションに遭遇していないオブジェクト指向プログラマーはいません。ただし、深い構成階層にも問題があるようです。 実験の結果を詳述するレポートのコレクションが必要だとしましょう: class Model { // ... interface Array<Result> m_results; } 各結果には特定のプロパティがあります。これらには、実験の時間と、実験の各段階からのメタデータが含まれます。 enum Stage { Pre = 1, Post }; class Result { // ... interface Epoch m_epoch; Map<Stage, ExperimentModules> m_modules; } いいですね 現在、各実験モジュールには、実験の結果を説明する文字列と、実験サンプルセットへの参照のコレクションがあります。 class ExperimentalModules { // ... interface String m_reportText; Array<Sample> m_entities; } そして、各サンプルには...まあ、あなたは絵を取得します。 問題は、アプリケーションドメインのオブジェクトをモデリングしている場合、これは非常に自然なフィットのように思えますが、結局のところ、a Resultは単なるデータの無意味なコンテナです!それのためにクラスの大きなグループを作成することは価値がないようです。 上記のデータ構造とクラスがアプリケーションドメインの関係を正しくモデル化すると仮定すると、深い構成階層に頼ることなく、そのような「結果」をモデル化するより良い方法はありますか?そのようなデザインが良いデザインかどうかを判断するのに役立つ外部コンテキストはありますか?

4
インスタンス変数が多すぎるとコードが重複しますか?
パターンのリファクタリングによると: クラスが多くのことをしようとすると、多くの場合、インスタンス変数が多すぎます。クラスのインスタンス変数が多すぎる場合、複製されたコードはそれほど遅れることはありません。 インスタンス変数が多すぎるとコードが重複しますか?

1
ネストされたREST URLと親ID、どちらが優れた設計ですか?
さて、2つのリソースがAlbumありSongます:と。APIは次のとおりです。 GET,POST /albums GET,POST /albums/:albumId GET,POST /albums/:albumId/songs GET,POST /albums/:albumId/songs/:songId 私たちはいくつかの歌が嫌いであることを知っていSusyます。たとえば、と呼ばれます。どこにsearch行動を起こすべきか? 別の質問。さて、今ではもっとリアルになっています。アルバム1を開き、すべての曲を読み込みます。JSオブジェクトを作成します。それぞれが曲データを保持しremove、次のようなメソッドはほとんどありませんupdate。 曲オブジェクトにはID、名前、およびものがありますが、どの親に属しているかについての手がかりはありません。これは、クエリによって曲のリストを取得するためです。私が間違っている? だから、私はいくつかの解決策を見ますが、私は本当に確信がありません。 親IDをオプションにします-get-parameterとして。私は現在このアプローチを使用していますが、butいアプローチだと感じています。 List,Create /songs?album=albumId Update,Delete /songs/:songId Get /songs/?name=susy # also, solution for first question ハイブリッド。OPTIONSメタデータを取得するためのクエリを実行するためにアルバムIDが必要なため、今では便利です。 List,Create /album/:albumId/songs Update,Delete /songs/:songId POST /songs/search # also, solution for first question 各リソースインスタンスで完全なURLを返します。APIは同じですが、次のような曲を取得します。 id: 5 name: 'Elegy' url: /albums/2/songs/5 このアプローチはHATEOASと呼ばれると聞きました。 だから...親IDを提供するには id: 5 …

4
「クラスの代わりにマップを使用してデータを表現する」-リッチヒッキー
でリッチヒッキーことで、このビデオ、Clojureの作成者、彼はJavaで行ったように、代わりにそれを表現するためにクラスを使用してのデータを表現するためにマップを使用することを助言します。単にマップとして表されている場合、APIユーザーはどのように入力キーを知ることができるのか、私はそれがどのように改善できるのか理解していません。 例: PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } 2番目の関数では、APIユーザーはどのようにして人を作成するための入力を知ることができますか?
19 java  design  class  clojure  map 

8
プログラマが自分のコードを100%明確にしないことは時々ありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は熟練したプログラマーではないので、これが理由かもしれませんが、複雑なコード(最近作成したチェスゲームなど)を作成するたびに、プログラムを動作させるための正しいコードを書くことができることに気付きました。後で、または数秒後にそれを見つけますが! それだけでなく、コードについても考えない傾向があり、代わりに入力するだけです。たとえば、チェスのゲームでは、動きを処理するために5次元配列を使用することにしましたが、あまり意識せずにこれを実行できることがわかりました。しかし、停止して読み直したとき、5次元の概念全体を理解するのは困難であり、自分が何をしたのか、コード自体がどのように機能するのかを完全に理解するには数分かかりました。 プログラマーが複雑なコードを書くとき、彼らが何をしているのかを半分の時間で理解しないのは普通ですか?

8
Java 7で文字列をオンに切り替えることの利点は何ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 Javaでプログラミングを始めたとき、switchステートメントが文字列を受け取らないという事実にイライラしました。その後、列挙型を使用すると、型の安全性(リファクタリングが容易になる)と他の開発者にとってわかりやすい値を渡すのではなく、列挙型を使用するメリットを実感しました。 SE7では、Enumではなく、文字列を入力として使用するスイッチを使用することにした状況を考えるのに苦労しています。文字列全体を切り替えることで実装されている場合(たとえば、部分一致または正規表現の一致ではなく)、コードが変更される理由が少なくなるようには見えません。 また、IDEツールとコーディングの読み取り/書き込み比率により、文字列値を渡すよりも余分なEnumを自動生成する方がはるかに幸せです。 彼らはプログラマーとしてどのような利益をもたらしますか?ボイラープレートが少ない? この機能のために言語が泣き叫ぶような気はしません。たぶん私は見落としているユースケースがあります。

4
データベースの設計が不十分なリレーショナルデータベース駆動型アプリケーションでより良いオブジェクト指向コードを作成する方法
私は主に、すべてのページに複数のテーブルとそれらのテーブルに適用されるフィルターがある類似したページの束で構成されるJava Webアプリケーションを作成しています。これらのテーブルのデータは、SQLデータベースから取得されます。 私はmyBatisをORMとして使用していますが、データベースの設計が貧弱で、mybatisはデータベース指向のツールであるため、私の場合はこれが最良の選択ではないかもしれません。 データベースの設計が貧弱であるため、クエリが非常に異なる可能性があるため、類似したものに対して異なるクエリを作成する必要があるため、多くの重複コードを記述していることがわかりました。つまり、クエリを簡単にパラメータ化することはできません。これは私のコードに伝播し、単純なループでテーブルの列に行を入力する代わりに、次のようなコードがあります: 取得Aデータ(P1、...、PI); get B Data(p1、...、pi); Cデータの取得(p1、...、pi); Dデータの取得(p1、...、pi); ... そして、異なる列を持つ異なるテーブルがある場合、これはすぐに爆発します。 また、ページ内のhtml要素へのオブジェクトのマッピングである「ウィケット」を使用しているという事実も複雑さを増しています。そのため、私のJavaコードはデータベースとフロントエンドの間のアダプターになります。これにより、ロジックが混在した大量の配線、定型コードが作成されます。 正しい解決策は、ORMマッパーを、dbへのより均質なインターフェースを提供する追加レイヤーでラップすることでしょうか、または私が書いているこのスパゲッティコードを処理するより良い方法はありますか? 編集:データベースに関する詳細情報 データベースは、主に電話情報を保持しています。貧弱なデザインは以下で構成されています: ドメインの知識とは関係のない人工キーを主キーとして持つテーブル。 一意のトリガー、チェック、または外部キーは一切ありません。 さまざまなレコードのさまざまな概念に一致する一般的な名前のフィールド。 条件が異なる他のテーブルと交差することによってのみ分類できるレコード。 文字列として保存される数値または日付である列。 まとめると、散らかった/怠zyなデザインです。

2
効率を維持しながら、ビジネスロジックからユーザーインターフェイスを分離するにはどうすればよいですか?
コンボボックスで10個の異なるオブジェクトを表すフォームを表示したいとします。たとえば、トマトを含む10種類のハンバーガーのうち1つをユーザーに選択してもらいます。 UIとロジックを分離したいので、コンボボックスに表示するためにフォームにハンバーガーの文字列表現を渡す必要があります。そうでない場合、UIはオブジェクトフィールドを掘り下げる必要があります。次に、ユーザーはコンボボックスからハンバーガーを選択し、コントローラーに送信します。ここで、コントローラーは、フォームで使用される文字列表現(おそらくID?)に基づいて、ハンバーガーを再度検索する必要があります。 それは信じられないほど非効率ではありませんか?既に選択したいオブジェクトがありました。オブジェクト全体をフォームに送信してから特定のオブジェクトを返した場合、フォームがそのオブジェクトへの参照をすでに返しているため、後でそれを見つける必要はありません。 さらに、私が間違っていて、実際にオブジェクト全体をフォームに送信する必要がある場合、UIをロジックから分離するにはどうすればよいですか?

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