ソフトウェア工学

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

2
ドメインオブジェクトのリポジトリを使用するか、ドメインオブジェクトをサービスレイヤーにプッシュする必要がありますか?
私はトランザクションスクリプトの世界から来たので、DDDを検討し始めたところです。DDD設計をデータベースの永続性と統合する正しい方法がわかりません。これは私が持っているものです: 組織ドメインオブジェクトのインスタンスを取得および保存するためのメソッドがインターフェイスに含まれている、OrganizationServiceと呼ばれるサービスクラス。組織は集約ルートであり、それに関連する他のデータがあります。メンバーとライセンスです。EF6データベースの最初のDBContextは、OrganizationService内で使用され、OrganizationDBエンティティと関連するMemberDBおよびLicenseDBエンティティを取得します。これらはすべて、OrganizationServiceによって取得され、Organizationドメインオブジェクトに読み込まれると、同等のドメインオブジェクトクラスに変換されます。このオブジェクトは次のようになります。 public class Organisation { public IList<Member> Members { get; set; } public IList<License> Licenses { get; set; } } 私はOrganizationServiceでRepositoryパターンを使用していません... EF6は現在、リポジトリを冗長化しているようで、EF自体をリポジトリとして使用しています。 設計のこの時点では、組織ドメインオブジェクトは貧弱です。EFPOCO組織クラスのように見えます。OrganisationServiceクラスは、リポジトリのように見えます! 次に、ロジックの追加を開始する必要があります。このロジックには、組織のライセンスとメンバーの管理が含まれます。トランザクションスクリプトの時代に、これらの操作を処理するためにOrganisationServiceにメソッドを追加し、DBと対話するためにリポジトリを呼び出しますが、DDDでは、このロジックは組織ドメインオブジェクト自体にカプセル化する必要があると思います... ここで何をすべきかわかりません。ロジックの一部としてこのデータをデータベースに永続化する必要があります。これは、組織ドメインオブジェクト内でDbContextを使用してこれを行う必要があることを意味しますか?ドメインオブジェクト内でリポジトリ/ EFを使用することは悪い習慣ですか?もしそうなら、この永続性はどこに属していますか? public class Organisation { public IList<Member> Members { get; set; } public IList<License> Licenses { get; set; } public void AddLicensesToOrganisation(IList<License> licensesToAdd) { …

5
Pythonスクリプトが同等のC ++プログラムと同じくらい高速になるのを妨げる技術的な制限や言語機能はありますか?
私は長年のPythonユーザーです。数年前、私はC ++の学習を始めて、速度の点でC ++が何を提供できるかを確認しました。この間も、プロトタイピングのツールとしてPythonを使い続けました。これは良いシステムのように思われました:Pythonによるアジャイル開発、C ++での高速実行。 最近、私はますますPythonを使用しており、この言語を使用して以前にすぐに使用した落とし穴とアンチパターンをすべて回避する方法を学びました。特定の機能(リスト内包表記、列挙など)を使用するとパフォーマンスが向上することは私の理解です。 しかし、Pythonスクリプトが同等のC ++プログラムと同じくらい高速になるのを妨げる技術的な制限や言語機能はありますか?

6
データベース関連のメソッドの設計。どちらを返す方が良いですか。true/ falseまたは行に影響がありますか?
データベースでデータの変更(挿入、更新、削除)を実行するいくつかのメソッドがあります。ORMは、私は方法のこれらのタイプの戻り行の影響を受けたint型の値を使用しています。操作の成功/失敗の状態を示すために、「私のメソッド」に対して何を返す必要がありますか? を返すコードを考えてみましょうint: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } 次に、使用法: A.2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } ブール値を使用する場合と比較してください。 B.1 public boolean myLowerLevelMethod(int id) { ... int …

5
2 ^ i * 5 ^ jから次に小さいものを印刷します。ここで、i、j> = 0
最近、電話によるテクニカルスクリーニングでこの質問を受けましたが、うまくいきませんでした。質問は以下に逐語的に含まれています。 {2^i * 5^j | i,j >= 0}ソートされたコレクションを生成します。次の最小値を継続的に印刷します。 例: { 1, 2, 4, 5, 8, 10...} 「次の最小」は、最小ヒープが関係していると思いますが、そこからどこに行くべきか本当にわかりませんでしたし、インタビュアーからの援助もありませんでした。 誰かがそのような問題を解決する方法についてアドバイスを持っていますか?
10 algorithms 

5
主要な目的がそのフレームワークに依存することである場合、コア言語の基本を過去に学習することは有益ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 これは「[ ここにフレームワークを挿入 ]に進む前に、[ ここに [ プログラミング言語をここに挿入 ]をどれだけ知っておくべきか」ということではないことに注意してください。私が知りたいのは、プログラミング言語の高度な概念を学ぶことは、ほとんどの場合そのフレームワークに大きく依存することを意図している場合にどれほど有益かということです。たとえば、私はjQueryを使い始めて、最初にJavascriptのコアコンセプトを本当に理解するために時間を割きました。さらに、基本的な本以外のいくつか(たとえば、Javascript忍者の秘密)を棚に置いて、その言語を本当に詳しく調べています。ページをざっと見てみると、かなりの部分がjQueryに引き継がれないことがわかります。私の主な目的はDOM操作です。 RubyとRoRについても同じことが言えます。これらの本は、全体として私をより良いプログラマーにしてくれるでしょうか?多分。これらのトピックは、そのフレームワークで私がそれをはるかに良くするのに役立ちますか?それは私が理解するのに苦労しているものです。

2
パッケージ(gems、eggなど)を使用して分離されたアーキテクチャを作成する
主な問題 最も近代的なプログラミングプラットフォームはパッケージ管理のために持っている良いサポートを見て(と思うgem、npm、pipなど、)、それが促進し、疎結合アーキテクチャを作成するように、内部で開発されたパッケージで構成されたアプリケーションやシステムを設計する意味がありませんか? 例 この例としては、データベースアクセス用のパッケージの作成や、システムの認証やその他のコンポーネント用のパッケージの作成があります。もちろん、これらも外部パッケージを使用します。次に、システムはこれらのパッケージをインポートして使用します-独自のコードベースにコードを含める代わりに。 考慮事項 私には、これはコードのデカップリングを促進し、保守性を支援するように思われます。ほとんどWebベースのデスクトップアプリケーションのようなものです(更新はほとんど自動的に適用され、単一のコードベースは単一の機能などに適用されます)。 これは合理的で健全なデザインコンセプトのように見えますか?これは、今日のアプリケーションを構造化する標準的な方法として実際に使用されていますか?

5
重複した四分木
四分木を実装しています。このデータ構造を知らない人のために、次の小さな説明を含めます。 クワッドツリーはデータ構造であり、3次元空間でのオクトリーと同じようにユークリッド平面にあります。クワッドツリーの一般的な用途は、空間インデックスです。 それらがどのように機能するかを要約すると、クワッドツリーは、最大容量と初期バウンディングボックスを持つコレクションです(ここでは長方形としましょう)。最大容量に達したクワッドツリーに要素を挿入しようとすると、クワッドツリーは4つのクワッドツリーに分割されます(その幾何学的表現は、挿入前のツリーの4分の1の面積になります)。各要素は、その位置に応じてサブツリーに再配布されます。長方形を操作するときの左上の境界。 したがって、クワッドツリーはリーフであり、その容量よりも要素が少ないか、4つのクワッドツリーを子として持つツリー(通常、北西、北東、南西、南東)です。 私の懸念は、重複を追加しようとした場合、同じ要素が数回または同じ位置にあるいくつかの異なる要素である場合、四分木はエッジの処理に根本的な問題があることです。 たとえば、容量が1の四分木と、境界ボックスとして単位長方形を使用する場合: [(0,0),(0,1),(1,1),(1,0)] そして、左上の境界が原点である長方形を2回挿入しようとします(または、N> 1の容量を持つ四分木にN + 1回挿入しようとした場合も同様です)。 quadtree->insert(0.0, 0.0, 0.1, 0.1) quadtree->insert(0.0, 0.0, 0.1, 0.1) 最初の挿入は問題になりません: ただし、最初の挿入でサブディビジョンがトリガーされます(容量が1であるため)。 したがって、両方の長方形は同じサブツリーに配置されます。 次に、2つの要素が同じ四分木に到着し、サブディビジョンをトリガーします… 以下同様に、サブディビジョンメソッドは無期限に実行されます。なぜなら、(0、0)は、作成された4つのうち常に同じサブツリーにあるため、無限再帰問題が発生するためです。 重複した四分木を持つことは可能ですか?(そうでない場合、それをとして実装できますSet) 四分木のアーキテクチャを完全に壊すことなく、この問題をどのように解決できますか?

5
実装しないアプリの機能リクエストへの対応[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は新しいアプリ開発者であり、アプリを20ダウンロード(無料と広告なし)した後、すでに2つの機能リクエストがあり、どちらも実装しません。 これらの機能のリクエストに対応する必要がありますか。私は自分のアプリに取り組むために時間を費やしたいので、まったく応答しないことを望みますが、新しい開発者であるため、アプリストアでのいくつかの悪い評価がアプリに害を及ぼす可能性があります。
10 mobile  appstore 

2
Scalaのパラメーターなし&空の括弧メソッド
現在、OderskyのプログラミングScala(2番目)を介してScalaを学習しています。私は第10章まで、パラメーターなしの空の括弧付きメソッドの導入を開始します。頭がおかしいだけです。 これまでのところ、私が理解しているのは、メソッドに副作用がある場合は空の括弧を使用し、それ以外の場合はパラメーターのないメソッドを使用する必要があることです。 この慣習の利点は何なのかわかりません。私はStack Exchangeで投稿を読みましたが、正直なところ、投稿がこのトピックについてある程度深く議論し始めたとき、私は迷いました。 この言語機能の典型的な使用例と、それをよりよく理解するのに役立つ利点について簡単な説明を探しています。
10 scala 

3
継承:スーパークラスからのコードは実質的にサブクラスに「コピー」されますか、それともサブクラスによって参照されますか?
Class SubはclassのサブクラスですSup。それは実際にはどういう意味ですか?言い換えれば、「継承」の実際的な意味は何ですか? オプション1: Supのコードが仮想的にSubにコピーされます。( 'copy-paste'と同じですが、コピーされたコードがサブクラスで視覚的に表示されていません)。 例:methodA()はもともとSupにあったメソッドです。SubはSupを拡張するのでmethodA()、(事実上)Subにコピーペーストされます。これで、Subにはという名前のメソッドがありmethodA()ます。コードのすべての行でSupと同じですmethodA()が、完全にSubに属しており、Supに依存していないか、何らかの方法でSupに関連しています。 オプション2: Supからのコードは実際にはSub にコピーされません。それはまだスーパークラスだけにあります。ただし、そのコードはサブクラスを介してアクセスでき、サブクラスで使用できます。 例:methodA()は、Supのメソッドです。SubはSupを拡張するのでmethodA()、Subから次のようにアクセスできますsubInstance.methodA()。しかし、実際methodA()にはスーパークラスで呼び出されます。つまり、methodA()は、サブクラスによって呼び出された場合でも、スーパークラスのコンテキストで動作します。 質問:2つのオプションのどちらが実際に機能するのですか?どれもない場合は、これらが実際にどのように機能するかを説明してください。

1
「電車」ベースの開発とは?
開発方法論の別の新しい用語に出くわしましたが、その定義を見つけることができませんでした。具体的には、「電車ベースの開発」と呼ばれています。 ここに私がこの用語を見た場所のいくつかの例があります。 今週の初めに、私はエンジニアリングリーダーとリリースマネージャーにWindows MetroバージョンのFirefoxを廃止するよう依頼しました。(ジョナサン・ナイチンゲール) https://blog.mozilla.org/futurereleases/2014/03/14/metro/ MozillaのキャリアWebサイトから: アジャイル開発方法論とトレーニングベースの開発/ QAチームの両方での作業経験。 Mozillaのコンテキストだけでなく、以前に「トレーニング」について聞いたことがあります。しかし、ネット上でそれに関する良い情報を見つけることができませんでした。 「電車ベースのソフトウェア開発」をググると、検索結果にほとんど情報が見つかりませんでした。列車をワゴンから分離するために私が掘り出すことができる最も近いのは、「列車」はスケジュールに従って定期的にリリースすることです。しかし、「電車」は一種の具体的なQA設定のようでもあります。 では、「電車ベースの開発」とは何でしょうか?

5
スクラムチームはどのくらいの頻度でスプリントの責任を果たすべきですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 約束は約束であり、約束を守る必要があると私たちは皆教えられました。しかし、各スプリントのコミットメントを維持することは現実的ですか?時々人々は病気になり、時には技術的アプローチが間違っていることが証明され、すべてを再考する必要があります。製品の所有者またはユーザーとのさらなる議論の間に、機能は当初考えられていたものとは大きく異なるはずだと理解します。 公式のスクラムガイドは、おそらくこれらの問題に対処するために、コミットメントではなく「予測」という言葉を使用していることを知っています。 したがって、私の質問は、組織内のチームがコミットメントを維持する頻度と、このアプローチが好きか、それとも変更したいかです。 ありがとうございました。
10 scrum 

4
疎結合設計を作成するためにどれだけの労力を費やす必要がありますか?
現在、デザインパターンについて学習しています。 ほとんどの人はこれらのパターンが優れたツールであることに同意するだろうと思いますが、すべての答えとしてではなく、適度に使用する必要があります。これらを使いすぎると、アプリケーションが過度に複雑になり、ほとんどメリットがありません。パターンは、それらが最良のソリューションになるか、優れたソリューションの作成に役立つ場合にのみ使用する必要があります(同意しますか?)。 これを考慮して: 私が読んでいる本(Head First Design Patterns)は、疎結合の重要性を強調しています。この疎結合は、「実装ではなくインターフェイスへのプログラム」や「変化するものをカプセル化する」などの原則に従って達成されます。 基本的に、これまでに学んだほとんどのパターンは、デザインを疎結合にして、より柔軟にするために存在します。 疎結合の重要性と利点を理解しています。 しかし、私の質問は、疎結合で柔軟な設計を作成するために実際にどれだけの労力を費やすべきかということです。 設計パターンに反対する人々は、これらのパターンを使用するコストが利益を上回ることが多いと言います。いくつかのパターンを使用して疎結合設計を作成することに多くの時間を費やしますが、実際には、疎結合、「実装ではなくインターフェイスへのプログラミング」、およびこれらの原則のすべては、実際にはそれほど重要ではない可能性があります。 私が知りたいのは、抽象化とデザインの追加レベルを作成するために実際にどのくらいの努力を払うべきかということです。これは、アプリケーションが疎結合、インターフェイスへのプログラム機能などのオブジェクト指向の原則に従うことを許可するためだけです。それは本当に価値がありますかそれ?これにはどのくらいの努力が必要ですか?

6
複数のスクラムチームによるコードの所有権
2つのスクラムチームが同じソフトウェアコンポーネントを使用する場合、そのコンポーネントの明確なアーキテクチャビジョンを提供し、コードベースの進化に合わせてこのビジョンを維持/開発する責任を持つのは誰ですか?スクラムでは、共同でコードを所有することになっているので、チームAが行った開発がチームBが行った開発に干渉しないようにする方法を教えてください。

2
データベースの正規化とスキーマの透過性のどちらを優先しますか?
新しいコード要件が古いコードベースに浮上しました。これにより、以前は直接関連していなかった2つのユーザークラス(完全に異なるスキーマの異なるテーブルに格納されている)間の直接(内部)通信が可能になり、残念ながら、コードはほとんどオブジェクト指向に対応していません。あまり設計されていないため、親クラスはありません)。この機能を考慮しなかったこの古い設定にバッグを掛けるつもりなので、PKの衝突がないという保証はありません。 したがって、解決策は明白なようです。火で殺し、混乱したマッピングテーブル全体を書き換えます。マップを実装するための可能な方法については2つの方向性がありますが、私はDBAではないので、見逃した長所と短所があるかどうかはわかりません。 抽象化を明確にするために、異なるユーザーデータの3つのグループを検討してください:教授、管理、学生(いいえ、これは宿題ではありません。約束!) マッピング1 (professor_id、admin_id、student_idは、それぞれのテーブルへの外部キーです) | mailing_id (KEY) | professor_id | admin_id | student_id | ------------------------------------------------------- | 1001 | NULL | 87 | NULL | | 1002 | 123 | NULL | NULL | | 1003 | NULL | NULL | 123 | このアプローチの+/-は、短所に対してかなり重いようです: 行ごとに2つの「無駄な」フィールド 2NFに違反 異常を挿入/更新する脆弱性(0-1フィールドのみがNULLに設定されている行など) ただし、プロにはメリットがないわけではありません。 マッピングは単一のルックアップで実行できます mailing_idから特定のユーザーの「ソース」データを簡単に特定 …

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