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

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

15
独学でコーディングの練習を続けるべきですか、それともプロとしてコーディングする方法を学ぶべきですか?[閉まっている]
最近、私はプロの仕事を得て、他のプログラマーと付き合い、業界で友達を作りました。唯一のことは、私は100%独学です。それは、私のスタイルが適切に訓練されたスタイルから大きく逸脱する原因になりました。異なるのは、私のコードのテクニックと構成です。 それは私がするいくつかのことの混合物です。私はいくつかのプログラミングパラダイムをブレンドする傾向があります。機能的およびオブジェクト指向のように。私はオブジェクト指向よりも機能的な側面に傾いていますが、抽象的なエンティティとして何かがより理にかなっている場合にオブジェクト指向の使用を見ます。ゲームオブジェクトのような。次に、私は何かをするときも簡単なルートに行きます。対照的に、プロのプログラマーから見たコードは、そのために複雑な場合があるようです!私は多くのクロージャーを使用しています。そして最後に、私は最高のコメント者ではありません。コメントを読むよりコードを読むだけの方が簡単だと思います。そしてほとんどの場合、コメントがあったとしてもコードを読んでしまいます。加えて、コードを簡単に書くことができるため、非常に読みやすいと言われました。 専門的な訓練を受けたプログラマーが単体テストのようなことを続けていると聞きます。私が今まで使用したことがないものなので、それらが何であるか、またはどのように機能するかについての微妙な考えすらありません。たくさんのアンダースコア「_」は、本当に私の好みではありません。私が使用する技術のほとんどは、私から直接のもの、または私が読んだ数冊の本です。MVCについては何も知りません。backbone.jsのようなものについてはよく耳にします。アプリケーションを整理する方法だと思います。ただ私を混乱させているのは、今では自分の組織構造を作ったからです。 それは少し苦痛です。UbuntuのQuicklyのような新しいことを学ぶときは、テンプレートアプリケーションをまったく使用できません。訓練を受けた人からだとわかるコードを理解するのに苦労しています。完全なオブジェクト指向プログラミングは本当に私の口に悪い味を残しますが、それは他の誰もが厳密に使用しているもののようです。 自分のコードの見栄えに自信がなかったり、入社時に火花を散らしたり、オープンソースプロジェクトに貢献したりするのではないかと思いました。実際、私は人々が最終的に私のコードをチェックアウトするという事実をかなり恐れています。これはプログラマーが経験する普通のことなのでしょうか、それとも本当に自分のテクニックを変えるべきなのでしょうか?

3
ビジネスレイヤーでのキャッシュとデータレイヤーでのキャッシュ
私は常に、DALでキャッシングが行われるプロジェクトに取り組んできました。基本的には、データベースへの呼び出しを行うときに、キャッシュにデータが既に存在するかどうかをチェックし、存在する場合は呼び出しを行いません。代わりにそのデータを返します。 私は最近ビジネス層でのキャッシュについて読んだので、基本的にビジネスオブジェクト全体をキャッシュします。すぐにわかる利点の1つは、応答時間の短縮です。 どちらを優先するかはいつですか?およびビジネス層でのキャッシングは一般的な慣行ですか?


2
命名規則DAL、BAL、およびUIレイヤー[非公開]
次のレイヤーを持つ典型的なWebアプリケーションを開発しています UIレイヤー(MVC) ビジネスロジックレイヤー(BAL) データアクセス層(DAL) 各レイヤーには、BALおよびDALを含む独自のDTOオブジェクトがあります。これに関する私の質問は次のとおりです DALによって返されるDTOは、BAL内の対応するDTOに変換され、UIレイヤーに送信されるだけです。場合によっては、DTOオブジェクトの属性と構造の両方が同じです。このようなシナリオでは、中間オブジェクトを含めずに、DALのDTOをUIレイヤーに単純に返すことをお勧めします。 これらのDTOオブジェクトと各レイヤーの他のオブジェクトに名前を付ける最良の方法は何ですか。DTOName、ServiceNameなどのプレフィックスを使用する必要がありますか?プレフィックスを使用するように求めている理由は、ソリューションのクラスがフレームワークの他のクラスと競合していない場合、プレフィックスが各クラスがどこに属しているかを理解しやすいためです?
35 c#  design  naming 

4
スプレッドシートの背後にあるデータ構造は何ですか?
スプレッドシート(​​他のセルを参照する値または数式を含む名前付きまたはその他の方法で識別されたセルのグループ)がどのように解決されるかを理解したいと思います。既存のプロジェクトを調べてみましたが、GUI、シリアル化、イベントなどで非常に多くのことが行われていたため、スプレッドシートが見つかりませんでした。 その最も簡単な方法はどのように機能しますか?

6
割引モデルに適用される設計パターンはありますか?
割引モデルを実装するための既知の設計パターンはありますか? 割引モデルとは、次のことを意味します。 顧客が製品X、製品Y、および製品Zを購入すると、10%または100ドルの割引を受けます。 顧客が製品Xを100単位購入すると、15%または$ 500の割引を受ける 顧客が昨年に10万ドル以上持ち込んだ場合、20%の割引が適用されます 顧客が製品Xを2ユニット購入した場合、製品X(または製品Y)を1ユニット無料で入手できます。 ... 上記のすべてのシナリオを処理するために適用できる一般的なパターンはありますか?私はいくつかのモデルを考えていますが、一般的なモデルに出くわすことはできません。

8
高度にスケーラブルなWebサイトを設計する最良の方法は何ですか?
Facebookなどのソーシャルネットワークなど、高度にスケーラブルである必要があるWebサイトの場合、Webサイトを設計する最良の方法は何ですか? サイトが必要なデータを取得するためにクエリするWebサービスが必要ですか? または サイトはデータベースを直接照会する必要がありますか?(組み込みの言語構造を使用して、テーブルに自動的に入力するなどを行うことができます)。 ウェブサービスは一元化されたデータアクセスを提供し、キャッシングなどの制御がはるかに簡単になるため、より良いデザインだと思いますが、他の人はどう思いますか?

5
同じクラス内の他のメソッドを呼び出すメソッドを単体テストする最良の方法
私は最近、同じクラス内のメソッドから同じクラス内のメソッドへの結果または呼び出しをスタブするのに最適な次の2つのメソッドを友人と話していました。 これは非常に単純化された例です。実際には、機能ははるかに複雑です。 例: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } これをテストするために、2つのメソッドがあります。 方法1:関数とアクションを使用して、メソッドの機能を置き換えます。例: public class MyClass { public Func<int> FunctionB { get; set; } public MyClass() { FunctionB = FunctionBImpl; } public bool FunctionA() …

1
DRYに関係なく、ほぼ同一のコード
ほぼ同一のコードがいくつかありますが、メイン変数ではまったく異なる型を使用し、それらの間には継承はありません。具体的には、C#およびVB.NET用のRoslynを使用して、次のタイプのアナライザーを作成しています。 Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax コードは同じことをしているので、できるだけDRYのままにして、できるだけ別々の(ただしタイプ以外は同じ)メソッドに分割するか、2つのメソッドが完全に分離するのかどうか疑問に思っています関連しておらず、将来の変更が一方のバージョンの変更を強制する可能性がありますが、もう一方のバージョンは変更しない可能性はありますか? 編集: 1年ほど後、私はこの同じ問題にぶつかり、Roslynチームが解決に協力しました。ジェネリックを取り、TAttributeSyntaxほとんどの作業を行うパラメーターを持つ基本クラスを作成します。次に、特定の型を必要とする最小限のデータで派生クラスを作成します。
34 c#  design  dry 

8
Clang / LLVMが、列挙されたすべてのケースが含まれるswitchステートメントでデフォルトを使用することについて警告するのはなぜですか?
次のenumおよびswitchステートメントを検討してください。 typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 私はObjective-Cプログラマですが、より多くの読者のために純粋なCでこれを書いています。 -Weverythingを使用したClang / LLVM 4.1では、デフォルトの行で警告が表示されます。 すべての列挙値をカバーするスイッチのデフォルトラベル 今、私はこれがなぜあるのかを見ることができます:完全な世界では、引数に入力する値theMaskは列挙型のみであるため、デフォルトは必要ありません。しかし、ハックがやって来て、初期化されていないintを美しい関数に投げ込んだらどうなるでしょうか?私の機能はライブラリのドロップとして提供され、そこに何が入るかを制御することはできません。を使用することdefaultは、これを処理する非常に適切な方法です。 なぜLLVMの神は、この振る舞いを地獄のデバイスにふさわしくないと考えているのでしょうか?引数をチェックするifステートメントをこれに先行させる必要がありますか?

2
高度に拡張可能なクラスでの使用により適したBlochのBuilderパターンを改善する方法
Joshua BlochのEffective Javaの本(第2版)に大きな影響を受けました。おそらく私が読んだどのプログラミングの本よりもそうでしょう。特に、彼のビルダーパターン(項目2)が最大の効果をもたらしました。 Blochのビルダーは、過去10年間のプログラミングよりも数か月ではるかに遠くまで私を導いてくれましたが、私は今でも同じ壁にぶつかっています。 --especiallyジェネリックが遊びに来たときに、そして特にと自己参照ジェネリック医薬品(などComparable<T extends Comparable<T>>)。 私には2つの主要なニーズがありますが、この質問で焦点を当てたいのは2番目だけです。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。好奇心may盛な方のために、この回答記事の最後でこの部分について説明しましたが、ここで焦点を当てたいものではありません。 私がコメントを求めている2番目の問題は、「他の多くのクラスによって拡張されることを意図したクラスにビルダーを実装するにはどうすればよいですか」です。ビルダーを使用してクラスを拡張するのは、当然、ビルダーを使用せずに拡張するよりも困難です。を実装Needableするビルダーを持つクラスを拡張することは、そのため、それに関連付けられた重要なジェネリックを持ち、扱いにくいです。 それが私の質問です:Bloch Builder(私が呼ぶもの)をどのように改善できますか?そのクラスが「ベースクラス」であることを意図している場合でも、自由にビルダーを任意のクラスに添付できますビルダー(およびその潜在的なジェネリック)が彼らに課す余分な荷物のために、私の未来やライブラリのユーザーを落胆させることなく、何度も何度も拡張およびサブ拡張されましたか? 補遺 私の質問は上記のパート2に焦点を当てていますが、対処方法など、問題1について少し詳しく説明したいと思いました。 最初の問題は、「...単...クラスごとに再実装することなく、自己復帰メソッドチェーンを共有する方法」です。これは、拡張クラスがこれらのチェーンを再実装する必要があることを防ぐためではなく、もちろん、これらのメソッドチェーンを利用したい非サブクラスを防ぐ方法を再実装する必要があります- ユーザーがそれらを利用できるように、すべての自己復帰機能を実装しますか?このために、ここでインターフェースのスケルトンを印刷し、今のところはそのままにしておく必要がある必要性の高いデザインを考え出しました。私にとってはうまくいきました(この設計は長年の開発でした...最も困難な部分は循環依存を回避することでした): public interface Chainable { Chainable chainID(boolean b_setStatic, Object o_id); Object getChainID(); Object getStaticChainID(); } public interface Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); boolean isNeededUsable(); R endCfg(); } …

2
NoSQLデータベース設計のベストプラクティス
NoSQLドキュメントベースのデータベース(MongoDB)を使い始めたばかりで、データベース設計のベストプラクティスに興味があります。 アーキテクチャはリレーショナルデータベースとは異なるはずだと思いますか?正規化されたデータベースを引き続き目指すべきですか? たとえば、特定のユースケースがあります。 レンタル履歴(アドレスの配列)を持っているユーザーがいますが、その配列はユーザ​​ーの配列であるか、共有キーを持つ個別のコレクションですか?
33 design  nosql 

10
ビューとモデルは通信する必要がありますか?
MVCアーキテクチャのウィキペディアページによると、ビューはモデルから通知されることも、モデルの現在の状態についてクエリすることもできます。ただし、スタンフォード大学のiOS 5のPaul Hegartyのコース1、18ページによると、すべてのやり取りはコントローラーを介して行われる必要があります。ヘガティの声明がコースの簡略化を意図したものであるかどうかは私には明らかではありませんが、私は彼がそのようなデザインを意図していると言いたくなります。 これら2つの反対の視点をどのように説明しますか?
33 design  mvc 

8
ソリッド、貧血ドメインの回避、依存性注入?
これはプログラミング言語にとらわれない質問かもしれませんが、.NETエコシステムを対象とした回答に興味があります。 これがシナリオです:行政用のシンプルなコンソールアプリケーションを開発する必要があるとします。アプリケーションは、車両税に関するものです。これらの(のみ)次のビジネスルールがあります。 1.a)車両が自動車で、所有者が最後に税金を支払ったのが30日前であれば、所有者は再度支払う必要があります。 1.b)車両がバイクで、所有者が最後に税金を支払ったのが60日前であれば、所有者は再度支払う必要があります。 つまり、車がある場合は30日ごとに支払う必要があり、バイクがある場合は60日ごとに支払う必要があります。 システム内の各車両について、アプリケーションはそれらのルールをテストし、それらを満たさない車両(プレート番号と所有者情報)を印刷する必要があります。 私が欲しいのは: 2.a)SOLID原則(特にオープン/クローズド原則)に準拠します。 私が欲しくないのは(私が思うに): 2.b)貧弱なドメイン。したがって、ビジネスロジックはビジネスエンティティ内に配置する必要があります。 私はこれから始めました: public class Person // You wanted a banana but what you got was a gorilla holding the banana and the entire jungle. { public string Name { get; set; } public string Surname { get; set; } } public …
33 c#  .net  design  architecture 

11
設計パターンは一般に良いか悪いかの力ですか?[閉まっている]
パンをスライスして以来、デザインパターンが最高のものであると主張したと聞いています。また、デザインパターンは「セカンドシステムシンドローム」を悪化させる傾向があり、非常に使い古されており、ユーザーに実際よりも優れたデザイナーだと思わせると主張していると聞きました。 私は以前のキャンプに近づく傾向がありますが、最近では、ほぼすべての相互作用がオブザーバー関係に置き換えられ、すべてがシングルトンであるデザインを見てきました。 それでは、利点と問題を考慮して、設計パターンは一般に良いか悪いか、そしてその理由は何ですか?

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