ソフトウェア工学

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

4
Fluent APIで自然言語の文法を使用する
私はWebSQL / Phonegap Database APIのクエリ抽象化をいじっていますが、自然な英語の文法の使用を模倣する流なAPIを定義することに惹かれ、疑っています。 これを例で説明するのが最も簡単かもしれません。以下は私の文法におけるすべての有効なクエリであり、コメントは意図したセマンティックを説明しています: //find user where name equals "foo" or email starts with "foo@" find("user").where("name").equals("foo").and("email").startsWith("foo@") //find user where name equals "foo" or "bar" find("user").where("name").equals("foo").or("bar"); //find user where name equals "foo" or ends with "bar" find("user").where("name").equals("foo").or().endsWith("bar"); //find user where name equals or ends with "foo" find("user").where("name").equals().or().endsWith("foo"); //find user …
14 javascript  api 

1
コードを削除するとバグが修正されることを証明するテストを作成する必要がありますか?
バグを修正するには、コードのセクションを削除する必要がある場合があります。TDDの純粋主義者は、失敗したテストを記述し、コードを削除して、テストの合格を監視することを推奨します(と思います)。 さて、いくつかのコードが削除されたと断言するテストがあるのは本当に奇妙に思えます。確かに、誰もソース管理を掘り下げてそのコードを元に戻すことはないでしょうが、それだけの価値はありますか?それが価値がある場合、追加されたコードのテストを書くよりも価値が低いように見えますよね?
14 unit-testing  tdd  bug 

5
テキスト内のメタデータを個別のデータ構造に保存する
インライン、テキストのメタデータを保存する必要があるアプリケーションを開発しています。つまり、長いテキストがあり、特定の単語またはテキストの文に関連するメタデータを保存するとします。 この情報を保存する最良の方法は何でしょうか? 私が最初に考えたのは、テキストを検索するときに解析されるMarkdown構文を含めることでした。次のようなもの: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[@note this sounds really funny latin] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. これにより、私が考えることができる2つの問題が発生します。 比較的小さいのは、前述の構文が偶然にも前述のテキストにあった場合、構文解析を混乱させる可能性があるということです。 最も重要なのは、このメタデータがテキスト自体とは別に維持されないことです。 クエリ、統計、並べ替えなどの個別の方法でそれらを使用できるように、これらのメタデータが格納されている異なるDBテーブルなど、このデータを保持する個別のデータ構造が必要です。 編集:回答者が答えを削除したので、この最初の概念を拡張した実用的な提案だったので、ここに彼の提案を追加するのが良いと思います。ポスターは似た構文を使用するが、これにメタデータをリンクすることが示唆PRIMARY KEYのmetadataデータベーステーブル。 このように見えるもの: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[15432] euismod tincidunt …

3
Strategyパターンを使用したJavaの汎用ファイルパーサーデザイン
私は、モジュールの1つの責任がXMLファイルを解析し、データベースに必要なコンテンツをダンプすることである製品に取り組んでいます。現在の要件はXMLファイルの解析のみですが、将来、あらゆる種類のファイルをサポートできるように解析モジュールを設計したいと考えています。このアプローチの理由は、特定のクライアント向けにこの製品を構築しているが、近い将来に他のクライアントに販売する予定だからです。現在のクライアントのエコシステム内のすべてのシステムはXMLファイルを生成および消費しますが、他のクライアントの場合はそうではありません。 これまでに何を試しましたか?(現在) 戦略パターンに基づいた次の設計を念頭に置いています。私はすぐに日食でコードを書き留めてデザインを伝えたので、例外を適切に処理する方法などの他の側面が今のところ無視されるといいでしょう。 Parser:解析メソッドを公開する戦略インターフェイス。 public interface Parser<T> { public T parse(String inputFile); } *ジェネリックパラメーターを使用する理由は、すべての戻り値の型を許可し、コンパイル時に型の安全性を確保するためです。 ProductDataXmlParser製品関連情報を含むproduct.xmlファイルを解析するための具象クラス。(XMLBeanを使用) public class ProductDataXmlParser implements Parser<ProductDataTYPE> { public ProductDataTYPE parse(String inputFile) { ProductDataTYPE productDataDoc = null; File inputXMLFile = new File(inputFile); try { productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile); } catch(XmlException e) { System.out.println("XmlException while parsing file : "+inputXMLFile); …
14 java  design  parsing  xml 


2
ASP.NET MVCサイトをモジュール化する方法
ASP.NET MVC 4を使用して従業員イントラネットシステムを構築する計画段階にあります。このサイトは、メッセージング、給与の変更など、異なる機能を提供する個別の「モジュール」で構成されています。 。これらのモジュールをコンパイル時に有効または無効にできるようにしたいと思います。ホームページには、ロードされた各モジュールにリンクするナビゲーションが表示されます。 これまでは簡単ですが、ナビゲーション機能がモジュールについて事前に知る必要はありません。言い換えれば、モジュールを動的に検出できるようにします。新しいモジュールのコードを記述し、ソースの他の場所でコードを変更せずにナビゲーションバーにリンクを追加できるようにしたいのです。各モジュールには、ナビゲーションバーに自分自身を登録する何らかの方法が必要です。さらに重要なことですが、これは、ロードされた各モジュールに対して行う必要があります。 MVCのエリアはサイトのレイアウトが事前にわかっている場合のために設計されているため、MVCのエリアを使用することはできません。MEFは適切であると思われますが、MEFとMVCを組み合わせることに成功した人はいませんでした。MEFは実際にここに行く方法ですか、それとも私が必要なことを達成するためのより良い方法がありますか?

1
リポジトリパターンを使用していますか?
-repositoryデータベースからデータを取得するために、接尾辞が付いた一連の個別のクラスを使用しています。各テーブルごとに独自のリポジトリ。 たとえば、customerrepository顧客を取得するためのあらゆる種類のメソッドを持つクラスと、vacancyrepository空席を取得するためのあらゆる種類のメソッドを持つクラスがあります。 このことを行う方法について2つの質問があります。 複数のテーブルにまたがるデータを取得するのはどうですか?たとえば、私はまだ空席を作成していないすべての顧客を表示する画面を持っています。のcustomerrepositoryメソッドを使用できますか、vacancyrespository両方のリポジトリが結果を返すdataserviceことができますか?両方のリポジトリから結果を取得して1つの結果に結合する階層の上位にクラスを付けますか? そのようなリポジトリはどのくらいのロジックを処理できますか? リポジトリに「where active == true」を実装してアクティブなレコードのみを取得してもよいと思いますか、またはその単純なロジックでさえ、階層の上位のクラスで処理する必要があります(名前を付けましょうdataservice)? 私が今遭遇した例はこれです: 1つ以上の質問を含む質問リストがあります。 質問には結果があり、別のテーブルに保持されます。 したがって、質問リストの合計結果を取得するには、questionlistテーブル、質問テーブル、およびテーブルのデータを結合する必要がありquestionstatusます。 現在、これらのテーブルには3つの異なるリポジトリがあります。 questionlistrepositoryリスト番号12の合計結果を尋ねると、他の2つのリポジトリからデータを取得する必要があり、そのため何らかのロジックが必要になります。 またはquestionlistdataservice、使用するリポジトリを知っているものはありますか? もう1つ:リポジトリは結果を生成できるIQueryableため、呼び出し元のサービスは結果を簡単に結合できますが、そうでない場合は、3つのテーブルすべてのコンテンツをすべて取得することは良い考えではないと思いますデータベース。

8
「合格/破損ビルド」インジケータの代替手段
コミットごとにテストを実行する継続的な統合を行う場合、一般的なベストプラクティスは、すべてのテストを常にパスすることです(「ビルドを中断しないでください」)。 私はそれに関するいくつかの問題を見つけます: たとえば、チケットに対応するテストを作成して、オープンソースプロジェクトを支援することはできません。失敗したテストを含むオープンソースプロジェクトにプルリクエストを提案した場合、ビルドは失敗としてマークされ、プロジェクトは「ビルドを壊す」ためリポジトリにマージされたくないでしょう。 そして、レポでテストに失敗するのは悪いことではないと思います。それは、トラッカーに未解決の問題があるようなものです。これらは修正されるのを待っているものです。 同じことが会社にも言えます。TDDを使用している場合、テストを作成し、コミットしてから、テストを満たすロジックコードを作成することはできません。つまり、ラップトップで4〜5個のテストを書いた場合、休日に行く前にテストをコミットすることはできません。誰も私の仕事を取り戻すことはできません。たとえばメールで送信する場合を除き、同僚と「共有」することさえできません。また、テストの作成者とモデルの作成者との作業も妨げられます。 言うまでもなく、私はビルドプロセスを誤用/誤解しているか、継続的な統合を行っていますか?「通過する」/「通過しない」という指標は狭すぎるように思えます。 継続的な統合とTDD互換性を実現する方法はありますか? 「新しいテスト」(失敗する可能性がある)と「回帰テスト」(以前は機能していたため失敗するべきではない)を区別するための標準的なソリューション/プラクティスがあるかもしれません。

1
実稼働環境で実行するJavaバージョンに関する考慮事項
技術の最先端を走る人もいます-何かが更新される日を更新します。本番環境では、これは適切ではありません。 現在の(Java 7)バージョンの生産準備が整っているかどうかを調査すると、もはや正しくない可能性のある大量の古い資料が作成されます(この記事の執筆時点では、Java 7は1年半にわたって公開されていますが、かなり長いようです) 。 実稼働環境を新しいバージョンのJavaにアップグレードすることが適切かどうかを判断するには、どのような考慮事項が必要ですか?


6
データベースの正規化後もインデックス作成が必要ですか
適切な正規化を行った後でも、テーブルのインデックスを作成する必要がありますか?これはパフォーマンスにどのように影響しますか?適切に正規化した後、何らかの形でパフォーマンスに影響を与えますか? 主キーと外部キーが既にある場合、通常どの列にインデックスが付けられますか? データベースを正規化することはすでに効果的であるようです。しかし、索引付けがデータベースに与える影響をスキップしたかもしれません。これは、クエリを使用する場合にのみ有効ですか?これはどのように機能/実行し、データベースを改善しますか?


8
技術面接でのOOデザイン関連の質問[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は最近、かなりの数のインタビューに参加しており、企業から「[モデルを挿入]を設計する」という質問に数回以上回答するように依頼されています。 これは最近の業界では普通ですか?私は20年以上ソフトウェアの世界にいて、インタビューに参加していますが、インタビューでこのパターンが現れるのはごく最近です。 質問は非常に開かれていると感じています。たとえば、「駐車場を設計する」ためにクラス図を描くように頼まれました。インタビュアーがどのレベルの詳細を期待しているのかわかりません。これは、Visioダイアグラムを添付することが期待されていたオンラインテストであったため、彼らの期待を尋ねることはできませんでした。 この種の質問を面接プロセスで使用していますか?それらはクラス図のみに関連していますか、またはシーケンス、フローチャート、ERD(もちろん職種の性質に基づいて)を求めていますか? *ケビンの応答用に編集* 例:完全な質問は、「空きスロットを見つけるために使用できる駐車場管理システムを設計する」です。 I 2クラスで行うことができ、ParkingLotかつSlot追加したり、私が上で行くことができるIVehicleとVehicleしてCarおよびMotorcycleクラス。どこで線を引きますか? public class ParkingLot { IVehicle Vehicle {set; get;} List<Slot> GetEmptySlots() { }; } public class Vehicle : IVehicle { Slot SlotNum {set; get;} } public class Slot { int Row {set; get;} int Column {set; get; } }

3
インターフェイスを直接実装するか、スーパークラスに実装させる必要がありますか?
違いはありますか public class A extends AbstractB implements C {...} 対... public class A extends AbstractB {...} abstract class AbstractB implements C {...} どちらの場合でも、クラスAがインターフェースに準拠することになることを理解しています。2番目のケースでAbstractBは、のインターフェイスメソッドの実装を提供できますC。それが唯一の違いですか? のインターフェイスメソッドの実装を提供したくない場合 AbstractB、どのスタイルを使用する必要がありますか?どちらか一方を使用すると、何らかの「文書化」の目的が隠されますか?

1
MITライセンスの下にあるライブラリを正しくサブライセンスするにはどうすればよいですか?
MITライセンスの下にあるライブラリを正しくサブライセンスする方法を教えてください。 ライブラリを使用および拡張しています。MITライセンスでは、ライブラリをサブライセンスすることは自由であると述べています。 簡単に言うことができます: <Software library> is copyright <original author> and licensed under the MIT license. <orignal license> Extensions to <Software library> are copyright <me> and licensed under the GPL license, or commercial license if applicable. <GPL, or commercial license>

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