ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

2
この設計を適切なDDDに近づける方法は?
私は数日間DDDについて読みましたが、このサンプルデザインの支援が必要です。ドメインオブジェクトがアプリケーション層にメソッドを表示することを許可されていない場合、DDDのすべてのルールにより、どのように構築するかについて非常に混乱しています。行動を調整する他の場所は?リポジトリーをエンティティーに注入することは許可されていないため、エンティティー自体が状態で動作する必要があります。次に、エンティティはドメインから何か他のものを知る必要がありますが、他のエンティティオブジェクトも注入することはできませんか?これらのことのいくつかは私には理にかなっていますが、いくつかはそうではありません。すべての例は注文と製品に関するものであり、他の例を繰り返し繰り返しているため、機能全体を構築する方法の良い例をまだ見つけていません。私は例を読むことで最もよく学び、これまでにDDDについて得た情報を使用して機能を構築しようとしました。 私が間違っていることとそれを修正する方法を指摘するためにあなたの助けが必要です。エンティティを別のエンティティに注入できない場合、適切に実行する方法を簡単に確認できます。 私の例では、ユーザーとモデレーターがいます。モデレーターはユーザーを禁止できますが、ビジネスルールがあります:1日あたり3人のみです。関係を示すためにクラス図を設定しようとしました(以下のコード): interface iUser { public function getUserId(); public function getUsername(); } class User implements iUser { protected $_id; protected $_username; public function __construct(UserId $user_id, Username $username) { $this->_id = $user_id; $this->_username = $username; } public function getUserId() { return $this->_id; } public function getUsername() { return $this->_username; } …

3
オープンソースの商業環境への悪影響はありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私の会社には非常に幅広い製品があり、私たちにとって戦略的ではないものがいくつかありますので、それらをオープンソースにしたかったです(したがって、私たちはすべての会社が持っている製品を私たちのユニークでオープンソースにすることに集中できます)。 私たちの業界(ヘッジファンド)はオープンソースではありません(私たちがこれを試す最初の会社です)、経営陣から得ているフィードバックは、1)業界を破壊するか、2)すべての競争力のある商業会社が団結することです私たちに対して、どちらの方法でも一掃されます。私の会社では、共有のプラスの効果を目にしたIT担当者と、すべてを放棄するだろうと考えるビジネス担当者の間で大きな戦いになっています(彼らは、オープンソースにしたい部品を販売することを望んでいますが、何かを売却するときの標準です)。 それで、あなたの考えは何ですか?オープンソーシングは一般的に適用されますか、それとも実際にソフトウェアにのみ適用されますか?業界内外の人々にとって全体的に良いですか?私は実際にネガティブ効果にもっと興味があります(ポジティブも歓迎します) 更新:長い話は短いですが、コードは関係していますが、これはオープンソースのアイデアに関するものであるため、コードに関するものではありません。 私たちは中規模のクオンツヘッジファンドです。いくつかのユニークな戦略がありますが、標準的なロング/ショート、アービトラージ、グローバルマクロなどのファンドもあります。 私たちは持っているユニークな資金を保持していますが、他の誰もが持っている他のものは私たちがオープンソース化を検討していますだから私は、企業からの興味があるか、業界に入ることを考えているのではないかと疑っていますが、どの程度かはわかりません。 目標は、コミュニティを私たちのために働かせることではなく、それをいじりたい人が誰でもできるようにして、彼らが望むものを作成することです(私たちの一部を非公式に割り当てるかもしれませんが、私たちの製品ラインの一部ではありません成長するコミュニティを支援するスタッフの時間)。コードベースは非常に大きいですが、これの価値は、私たちが獲得した業界の知識とアプローチです(人工知能とクオンツ取引に関する多くの本がありますが、ほとんどの企業はスタッフが議論することを禁止しているため、実際に何年も遅れています彼らは何をやってるの)。簡単に言えば、ここには人々にとって価値があるかどうかがありますが、製品ラインナップを売却する間、一般の人々に利益をもたらす方法としてオープンソーシングに取り組んでいます。しかし、逆に、これは他の多くの企業にとってコア製品であり、幸せになります(Linux / Windows、ウィキペディア/ブリタニカ、グーグルマップ/コマーシャルマップファームなどについて考えています)。私が嫌いな人は大丈夫ですが、インデントされていない結果ではなく、この問題は、コア領域をオープンソース化する業界で一般的にそれらの結果が何であるかを理解しようとすることです。たとえば、Linuxが原因でOS市場のどの部分が成長したのか、自然に成長したのかなどを判断するのは困難です。テクノロジーは急速に成長しており、オープンソースがどのように影響したかを理解するのに苦労しています(そしてそれが肯定的であったかどうか。そのようなものが必要ですか?)。私を嫌っている人は大丈夫ですが、インデントされていない結果ではなく、この質問は、コア領域をオープンソース化する業界に一般的にどのような結果があるかを理解しようとすることです。たとえば、Linuxが原因でOS市場のどの部分が成長したのか、自然に成長したのかなどを判断するのは困難です。テクノロジーは急速に成長しており、オープンソースがどのように影響したかを理解するのに苦労しています(そしてそれが肯定的であったかどうか。そのようなものが必要ですか?)。私を嫌っている人は大丈夫ですが、インデントされていない結果ではなく、この質問は、コア領域をオープンソース化する業界に一般的にどのような結果があるかを理解しようとすることです。たとえば、Linuxが原因でOS市場のどの部分が成長したのか、それ自体が自然に成長していたのかなどを判断するのは困難です。テクノロジーは急速に成長しており、オープンソースがどのように影響したかを理解するのに苦労しています(そして、それが肯定的かどうか。そのようなものが必要ですか?)。たとえば、Linuxが原因でOS市場のどの部分が成長したのか、それ自体が自然に成長していたのかなどを判断するのは困難です。テクノロジーは急速に成長しており、オープンソースがどのように影響したかを理解するのに苦労しています(そして、それが肯定的かどうか。そのようなものが必要ですか?)。たとえば、Linuxが原因でOS市場のどの部分が成長したのか、それ自体が自然に成長していたのかなどを判断するのは困難です。テクノロジーは急速に成長しており、オープンソースがどのように影響したかを理解するのに苦労しています(そして、それが肯定的かどうか。そのようなものが必要ですか?)。 これは私にとって非常に具体的なことのように思えますが、オープンソーシングの一般的な影響を理解しようとしているので、ソフトウェアは学ぶべき良い場所のように思えました。

4
分類のみにインターフェースを使用するのは悪い習慣ですか?
例えば: 私はクラスを持っていると言いますA、B、C。私は2つのインタフェースを持って、それらを呼び出すことができますIAnimalし、IDog。IDogから継承しIAnimalます。Aand BはIDogsで、while Cはそうではありませんが、IAnimalです。 重要な部分は、IDog追加機能を提供しないことです。特定のメソッドへの引数として渡されることを許可するためだけに使用されますがA、BではありませんC。 これは悪い習慣ですか?

2
GPLまたはAGPL Web Application Framework / CMSを使用する場合の法的リスクは何ですか?
SOでこれを尋ねようとしましたが、ここで紹介されました... Composite C1などのGPLを使用したWebアプリケーションフレームワークを使用しても、会社がこのフレームワークに対して記述したソースコードを共有する義務はない、と言うのは正しいですか? それがAGPLの目的です、私は正しいですか? これは、KendoUIのようなJavascriptフレームワークにも適用されますか? GPLでは、ダウンロード用に提供する場合、フレームワークに加えた変更を他の人が利用できるようにする必要があります。 言い換えれば、単にWebサイトのコンテンツをブラウザにロードするだけでは、そのソフトウェアを「伝達」したり「配布」したりするわけではありません。 私はGPLウェブフレームワークを避けるべきだと主張してきましたが、今では調査後に間違いがあると確信していますが、他の意見を聞きたいですか? セス

4
Java Virtual Machineは、他の言語で記述されたコードをどのように実行しますか?
Java 1.6以降、JVMはJavaだけでなく、無数のプログラミング言語を実行できます。JavaがJava VM上で実行される方法を概念的に理解していますが、他の言語がJava VM上で実行される方法は理解していません。私には、それはすべて黒魔術のように見えます。私が指摘する記事はありますか?これにより、すべてがどのように組み合わされるかをよりよく理解できますか?
12 jvm 

2
別のクエリで使用するために、クエリの結果を一時的に保存する方法は?
私はあなたが私を助けるかもしれないと思うこの問題を抱えています。 PS私はこれをどのように呼ぶかわからないので、誰かがより適切なタイトルを見つけたら、編集してください。 バックグラウンド このアプリケーションは、バス路線を検索するために作成しています。 バスラインは3桁の数字であり、一意であり、変更されることはありません。 要件は、ストップAからストップBまでの行を検索できることです。 ユーザーインターフェイスは、有効なストップ名のみを使用するようにユーザーにヒントを出すことにすでに成功しています。 要件は、ルートに直通線があるかどうかを表示でき、そうでない場合は2行と3行の組み合わせを表示できることです。 例: ポイントAからポイントDに到達する必要があります。プログラムは次のように表示されます。 ダイレクトラインADがある場合。 そうでない場合は、AC、CDなど、2行の代替コンボを表示します。 2行のコンボがない場合は、3行のコンボ(AB、BC、CD)を検索します。 もちろん、アプリはバスの路線番号とバスをいつ切り替えるかを表示する必要があります。 私が持っているもの: 私のデータベースは次のように構成されています(簡略化された、実際のデータベースには場所と時間などが含まれています): +-----------+ | bus_stops | +----+------+ | id | name | +----+------+ +-------------------------------+ | lines_stops_relationship | +-------------+---------+-------+ | bus_line | stop_id | order | +-------------+---------+-------+ どこlines_stops_relationshipのバスラインと停止の間の多対多の関係を説明します。 順序、ストップが1行に表示される順序を示します。すべての行が行き来するわけではなく、順序に意味があります(順序2のポイントAは順序1のポイントBの後に来ます)。 問題 ラインがルートを十分簡単に​​通過できるかどうかを確認します。両方のポイントを正しい順序で通過する単一の行を検索するだけです。 2/3行のコンボがあるかどうかを確認するにはどうすればよいですか?出発地の停留所と目的地の停留所に一致する行を検索し、それらの間に共通の停留所があり、ユーザーがバスを切り替えることができるかどうかを確認しようと考えていました。その停止をどのように覚えていますか? 3行のコンボはさらにトリッキーです。ソースの行と宛先の行を見つけましたが、次に何をしますか?ストップが2つある行を検索しますが、繰り返しますが、ストップをどのように覚えていますか? tl; dr クエリの結果を覚えて、再び使用できるようにするにはどうすればよいですか?これを単一のクエリ(1行のルートのクエリ、2行のクエリ、3行のコンボのクエリ)で達成したいと考えています。 注:誰かが私が持っているものとはまったく異なるアプローチを提案するかどうかは気にしませんが、私はどんな解決策も受け入れています。 …
12 php  mysql  routing 

7
デスクトップアプリケーションからデータベースセキュリティをどのように処理しますか?
約10年間、私はSQL Serverデータストアを使用して社内のさまざまなデスクトップクライアントアプリケーションに取り組んできました。これらのプロジェクトを開始したことはほとんどありませんでした。ほとんどは買収作業です。 どこでも一定のように思われることの1つは、このアプリケーションが使用する単一のグローバルSQL Serverユーザーアカウントがあり、それが共通データベースへのアクセス許可を付与しsaたことです。 。 アプリケーションがデータベースへのアクセスに使用するこのユーザー名とパスワードを実際に非表示にすることはできません。通常、ファイルに保存されているiniかconfig、実行可能ファイル自体に焼き付けられています。いずれの場合も、少し掘り下げればユーザーに表示されます。あるケースでは、実際にconfigファイルを使用して暗号化しましたが、もちろん暗号化キーを実行可能ファイルに保存する必要がありました(この制限にナイーブではありませんでしたが、十分に精通している人をいじるのを効果的に阻止しました)configファイルを検索します)。 これらのシステムはすべて、アプリケーションに組み込まれたユーザー認証システムを備えていましたが、もちろん、すべてアプリケーション自体で管理されていました。つまり、ユーザー情報はデータベースに保存されていました。アプリケーションは、アクセスレベルに基づいて実行できることを制限していましたが、データベースに接続してアドホッククエリを実行できる場合は、あらゆる意味で意味がありません。 この問題を回避するために他のシステムが何をするかを知りたいです。私が知っているオプションは次のとおりです。 SQL Serverのセキュリティメカニズムを使用してユーザーとロールのリストを管理し、デスクトップアプリケーションにT-SQLクエリを介してユーザーを追加および削除させます。 データベースに直接接続する代わりに、サーバー上で実行される何らかの種類のWebサービスを作成し、そこに認証ロジックを配置します。すべてのリクエストにセキュリティ検証を実行させます。 ユーザーをデータベースから分離しているため、ユーザーは最上級のエンティティではなく、外部キー関係などでそれらを参照できないため、最初のオプションは少しいです。 2番目は、大きなパフォーマンスの問題のように思えますが、多くの余分な作業があり、さらに、NHibernateのようなORMマッパーを簡単に使用することはできません(と思います)。 誰でもこれを経験していますか?ベストプラクティス? 編集 もう少し考えて、SQL Server認証は実際にこの問題を解決できますか?たとえば、タイムシートを編集できるようにユーザーがタイムシートレコードを挿入および更新できる必要がある場合、SQLサーバーがタイムシートの詳細テーブルの他の行へのアクセスを禁止する方法はありません。つまり、他の人のタイムシートも読み書きできます。

4
カスタムフィールドとデータ型の設計パターン/戦略
データオブジェクトにカスタムフィールドを追加する機能を持つオブジェクトを設計するための、またはオブジェクトの独自のカスタム定義を作成するための一般的な戦略または設計パターンはありますか。たとえば、独自の種類の情報を持つことができるSalesForceなどの製品、Expression Engineなどのフレームワーク、およびチャネルとチャネルフィールドグループの処理方法(例)、またはwordpressのようなCMSの機能カスタム投稿タイプにフィールドを追加します。


4
「ドキュメント」を正確に構成するものは何ですか?
ソフトウェア製品の「ドキュメント」と言うとき、それには何が含まれ、何が含まれてはいけませんか? たとえば、最近の質問で、コメントをドキュメントと見なすかどうかを尋ねましたか? しかし、これが同様に有効な質問である他の多くの領域があります、いくつかは他のものより明白です: マニュアル(明らかに) リリースノート? チュートリアル コメント 他のもの? 線はどこに描かれますか。たとえば、「チュートリアル」がドキュメントの場合、「ビデオチュートリアル」のドキュメントですか、それとも別のものですか? 一般に、ソフトウェアの何かは、実装、テスト、および文書化されるまで「完了」しません。したがって、この質問は、「完了」したことを検討するために文書化の一部としてどのようなことを検討する必要があります。 私たちの会議での最近の顧客フィードバックからの質問は、私たちのドキュメントがより多くの「サンプル」を必要としていたことを示唆しています。 対象者:データベース、プログラミング言語、および関連ツール(前述のDBの管理クライアントなど)を使用するソフトウェア開発者

4
分散バージョン管理システムは、現在ガートナーの誇大広告サイクルのどこにあるのでしょうか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 編集:最近のダウン投票(この時点で+ 8 / -6)を考えると、ガートナーのライフサイクルはプログラマーの観点から偏ったメトリックであることは私に明らかにされました。これは私が経営陣に提示する論文の一部であり、経営陣はガートナーの聴衆の一部です。 DVCSを与える暴露&熱意を(誇大広告とみなさ、ことが「可能性」というか、少なくともなどの攻撃これを読んだとき)、次の質問を考える:「どのように私はDVCSsの準備ができていることを管理を説得するガートナーのハイプ・サイクルを使用することができます(または準備ができている)、それは単なる誇大広告ではありません」 DVCSsが誇大広告であるかどうかを尋ねるだけでは建設的ではありませんが、ガートナーの誇大広告サイクルは、それを尋ねるよりも客観的な手段です(この手段が偏っているとみなされても)。他の楽器を知っている場合は、ぜひとも言及してください。 編集#2:Gartnerのライフサイクルはすべてのテクノロジーに対応しているわけではないことに同意しますが、一部の人は誇大広告と見なされるほどの話題を生み出したと考えられるため、少なくともこのツールを使用して、どんな程度でもそれを証明/反証するために。私はDVCS、BTWの擁護者です。 編集#3:答えてくれてありがとう。バウンティは詳細と実践的なアドバイスで私の質問に答えてカレブに行きます。受け入れられた答えは、別の有用な手段を提供し、私の質問を超えて答えてくれた哲学者に送られます。 会社でDVCSの採用を支持して書いているホワイトペーパーの研究をしていて、社会的証拠の概念につまずいた。DVCS採用の社会的証拠が必ずしも貨物カルトではないことを証明したいので、5段階で技術の成熟度を説明するガートナーの誇大広告サイクルにつまずいた。 私の質問は:誇大広告サイクルの特定の段階での分散バージョン管理システム(一般的にはgit、mercurial、bazaarなど)の現在の場所の指標は何でしょうか?...(その他の(複雑ではない))つまり、DVCSの現在の期待は、a)開始、b)膨張、c)減少(幻滅)、d)増加(啓発)、またはe)安定化(成熟)、および(より重要な)理由であると言いますか? それは難しい質問であり、主観性が関与していることは知っていますが、特定のフェーズの最も明確な議論/証拠に答え(および従来のクッキー)を付与します。
12 research  dvcs  cvcs 

5
オーバーロードは、オープン/クローズの原則の例ですか?
ウィキペディアによると 「ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張のために開かれている必要がありますが、変更のために閉じられている必要があります」 関数という言葉が目を引きましたが、メソッドのオーバーロードを作成することは、オープン/クローズの原則の一例とみなすことができると思いますか? 例を説明しましょう。サービスレイヤーにメソッドがあり、ほぼ1000か所で使用されていることを考慮してください。メソッドはuserIdを取得し、ユーザーが管理者であるかどうかを判断します。 bool IsAdmin(userId) ここで、userIdではなくユーザー名に基づいて、ユーザーが管理者であるかどうかを判断する必要があると考えてください。上記のメソッドのシグネチャを変更すると、1000箇所でコードが破損します(関数は修正のために閉じる必要があります)。したがって、ユーザー名を取得するオーバーロードを作成し、ユーザー名に基づいてuserIdを見つけ、元のメソッドを見つけることができます。 public bool IsAdmin(string username) { int userId = UserManager.GetUser(username).Id; return IsAdmin(userId); } このように、オーバーロードを作成して機能を拡張しました(機能は拡張に対して開かれている必要があります)。 それはオープン/クローズド原則の例ですか?

3
正しい結果が返されるTDDの方法
私は新しいプロジェクトを開始し、TDDを使用して設計を推進することに非常に一生懸命取り組んでいます。私は何年もプッシュしてきましたが、ついにこのプロジェクトに余分な時間を費やして、それを適切に行う方法を学びながら、それを使用することを承認しました。 これは、既存のシステムに結び付ける新しいモジュールです。現在、すべてのデータアクセスはWebサービスを介して行われます。Webサービスは、ほとんどの場合、データベースストアドプロシージャの単なる薄いラッパーです。 1つの要件は、特定のストアについて、このアプリケーションに対して有効と見なされるすべての発注書を返すことです。出荷日が店舗のオープン日から特定の範囲内にある場合、POは有効であると見なされます(これは新しい店舗の場合です)。 上記の制約が与えられた場合、このストアに適用できるダースを取得するためだけに100万のPOを戻すつもりはないので、このロジックをアプリケーションコードに入れることはできません。 日付範囲をGetValidPOsプロシージャに渡し、それらの値を使用して有効なPOを返すことができると考えていました。しかし、有効なPOと見なされるものに別の要件を追加するとどうなりますか? そして、どのようにこれをテストし、機能し続けることを確認しますか?ORMを使用していないため、起こりそうにありません。また、テストでDBを呼び出すことはできません。 立ち往生しています。 私の考えでは、有効なデータを返すモック、不良データを返すモック、不良データが発生した場合にローカルリポジトリに例外をスローさせ、無効なデータがGetValidPOs procによって返された場合に例外がスローされることをテストしますテストで使用されるモック)。 これは理にかなっていますか?または、より良い方法はありますか? 更新: EFを使用できるようです。ストアドプロシージャと複数のデータベースにデータを散在させることの困難さに依存しながら、使用方法を把握し、テスト可能にする必要があります。

9
顧客が要求に対して何を意味したのかを理解することは、ソフトウェア開発者の責任ですか?
はい/いいえの質問の種類とその理由は? 顧客が要求で何を意味したのかを理解するのはソフトウェア開発者の責任ですか、それとも開発者に要求を適切に説明するのは顧客の責任ですか? 現在、職場での状況は、「顧客が既に説明していること、顧客が望んでいることです。それ以上の質問をするのではなく、リクエストを理解することはあなたの責任です」。 英語は私の強力なスイートではありませんが、すべてのリクエストは曖昧な英語で書かれており、単語を間違え、文章を理解するのが困難です。 私はシステムの3番目または4番目の開発者です(最後の開発者は仕事を辞めました)。それが、顧客が開発者側である程度の理解を期待している理由かもしれません。 システム自体は、UIレベルでもソースコードレベルでも非常に複雑です。これは私には猿のコーディングのように見えます-実際にリクエストを理解していない間、リクエストを正しく取得してください。 私は実際に仕事を辞めることを考えていますが、誰が正しいのか、誰が間違っているのかわからないので、まだやっていません。

4
ツリーは「最初の子、次の兄弟」構造で構成されていますか?そうでない場合は、なぜですか?
通常、ツリーデータ構造は、各ノードがそのすべての子へのポインタを含むように編成されます。 +-----------------------------------------+ | root | | child1 child2 child3 | +--+------------------+----------------+--+ | | | +---------------+ +---------------+ +---------------+ | node1 | | node2 | | node3 | | child1 child2 | | child1 child2 | | child1 child2 | +--+---------+--+ +--+---------+--+ +--+---------+--+ | | | | | | これは自然に思えますが、いくつかの問題があります。たとえば、子ノードの数が異なる場合、子を管理するには配列やリストなどが必要です。 代わりに(最初の)子ポインターと(次の)兄弟ポインターのみを使用すると、次のようになります。 +-------------------+ …

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