ソフトウェア工学

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

4
LINQとデータアクセスレイヤー
私は常に、自分のビジネスロジックとUIコードとは完全に別の「レイヤー」でデータアクセスコードを処理することを学びました。これは常に私にとって非常に優れたアーキテクチャであり、私が目にするすべての「ルール」またはベストプラクティスは、このスタイルのコーディング、特に単一責任の原則にうまく適合しています。 ほとんどのホームプロジェクトでは、私が作成した独自のORMを使用します。これは、常にオープンソースを作成することを目的としていました。しかし、それ以来、LINQが利用可能になりました。これは、私のORMが機能する方法と非常によく似ていました(しかし、より優れています)。 以前に自分のORMを使用して、今はLINQを使用して実行できないことはありません(REST統合のビットを除く)。だから私の質問です。LINQは新しいデータアクセスレイヤーですか?このレイヤーはもう必要ですか?私のBLLはLINQと直接通信する必要がありますか?それとも、この悪い習慣はまだですか? 編集: 元の質問はLINQ to Entitiesに関するものでしたが、LINQ to SQLに関しては興味深い答えがたくさんあります。両方の人々の考えは何ですか?LINQ to SQLでDALを実際に置き換えることはできませんが、Entity Frameworkは収集できますか?

6
時間の見積もりはスクラムでの約束と同じですか?
見積もりが約束ではない場合、製品所有者として、どのくらい時間がかかるかわからないままプロジェクトを提供するにはどうすればよいですか? 時間の見積もりを約束として扱うと、スクラムチームはより効率的に機能しますか? ストーリーの調査(準備、問題を理解するための努力)はどれだけ適切な見積もりを出すのに十分ですか? 作業を見積もった後に発生する予期しない技術的な問題(最初の見積もりを実際に混乱させる可能性がある問題)はどうですか?

5
構成クラス/構造:パターンまたはアンチパターン?代替案?
プログラムに新しい構成オプションを追加すると、多くの場合、オプションを実行する必要がある場所にオプションを取得するという点で、大量の波及効果が生じる可能性があります。私が認識しているこれに対処する3つの基本的な方法があります。 すべての構成設定を、プリミティブとして明示的に必要とするプログラムの部分に渡します。これは最も明示的な方法であり、物事を最も分離する方法です。欠点は、これが冗長であり、もろいことです。 最も頻繁に使用される構成設定をグローバル/静的にします。これは最も簡単な方法ですが、距離を置いてアクションを導入し、テスト性を妨げ、構成が本当にグローバルであると仮定します(常に1つの構成のみが必要である)。 プログラム全体またはプログラム内の主要な懸念事項のすべての構成オプションを含む構成クラス/構造体を作成し、これを明示的に渡します。これは、(1)より明確ではありませんが、(2)より明確です。1つの関数呼び出しのみの設定を変更する場合は、構成オブジェクトを複製して、この1つの値を変更できます。これは、テストと実際の両方で役立ちます。ただし、必要のない関数に大量の情報を渡す可能性があり、configクラス/構造体の値を変更すると、離れた場所でアクションが発生する可能性があります。 (3)パターンとアンチパターンのどちらを検討しますか?アンチパターンの場合、代わりに何をしますか?

1
複数のZendアプリケーションコードの編成
過去1年間、私はすべてZendフレームワークに基づく一連のアプリケーションに取り組んでおり、すべてを使用しなくてもすべてのアプリケーションがアクセスする必要がある複雑なビジネスロジックを中心に(それぞれに複数のライブラリフォルダーを用意するよりも簡単です)それらはすべて共通のセンターでリンクされているため、アプリケーション)。 プロジェクトの詳細については詳しく説明しませんが、コードを "グループ化"する方法について(プロジェクトだけで作業しているので)いくつかの情報を探しています。私は、依存関係をできる限り取り除くような方法ですべてを分割しようとしました。 私はそれを論理的に可能な限り分離したままにしようとしているので、自分の時間がアップする12か月の時間で、他の誰かが私が作成したものを拡張するのに問題はありません。 構造例: applicationStorage\ (contains all applications and associated data) applicationStorage\Applications\ (contains the applications themselves) applicationStorage\Applications\external\ (application grouping folder) (contains all external customer access applications) applicationStorage\Applications\external\site\ (main external customer access application) applicationStorage\Applications\external\site\Modules\ applicationStorage\Applications\external\site\Config\ applicationStorage\Applications\external\site\Layouts\ applicationStorage\Applications\external\site\ZendExtended\ (contains extended Zend classes specific to this application example: ZendExtended_Controller_Action extends zend_controller_Action ) …

4
ビジネスロジックは本当にサーバーに属していますか?
Webアプリケーションの一般的なスタックは、データベース、サーバーサイドコードを備えたサーバー、HTML / CSS / JavaScriptを備えたブラウザーを備えたユーザーです。 広範なAJAXが登場する前は、コントローラーがサーバー側コードであるMVCが決着していました。サーバーは動的Webページ(つまり、JSPやASPなどのテンプレート化されたHTMLソリューション)に対する応答要求をルーティングする必要がありました。サーバーは、データベースへの呼び出しを調整し、ページ要求への応答に使用する動的ページを決定します。これらすべての結果、ビジネスロジックはページを提供するという考えに強く結び付けられていませんが、サーバーには最終的にビジネスロジックが含まれています。 「Web 2.0」に移行すると、サーバーサーバーの静的ページは、JavaScriptを使用してデータを入力し、表示内容を変更します。JavaScriptに含めることができます。JavaScriptは多くの場合、RESTfulサービスを実装しています。つまり、データベースクエリを指定しています。 したがって、サーバーは、実際のファイルを提供し、AJAX呼び出しに応答する役割に任されています。また、AJAX呼び出しへの応答は、セッション管理とセキュリティの提供にすぎません。そして実際、ユーザーが見ることができるのは、データベースで指定されるべきデータです。 そこで、そこから、サーバーを、電子メールの送信やWebサービスの起動など、たまにしか行わない、ダムの仲介者の役割に追いやるべきですか?ビジネスロジックがすべてJavaScriptに存在する(秘密でない場合)か、それがストアドプロシージャに存在する可能性がありますか? サーバーとデータベースを組み合わせたり、SAPのようなERPソリューションをサーバーとして機能させることは理にかなっていますか?

3
テストデータが必要ですか、それとも単体テストと手動テストに依存できますか?
現在、中規模/大規模のPHP / MySQLプロジェクトに取り組んでいます。私たちはPHPUnitとQUnitでユニットテストを行っており、アプリケーションを手動でテストしている2人のフルタイムテスターがいます。テスト(モック)データは現在、SQLスクリプトで作成されています。 テストデータ用のスクリプトの管理に問題があります。ビジネスロジックはかなり複雑で、テストデータの1つの「単純な」変更によって、アプリケーションにいくつかのバグが発生することがよくあります(実際のバグではなく、無効なデータの産物です)。テーブルの作成と変更は常に行われているため、これはチーム全体にとって大きな負担になっています。 UIを使用して約5分ですべてをアプリケーションに手動で追加できるため、スクリプトでテストデータを維持する意味は本当にわかりません。私たちのPMはこれに同意せず、テストデータで展開できないプロジェクトがあることは悪い習慣だと言います。 テストデータを含むスクリプトのメンテナンスを中止し、テスターがデータなしでアプリケーションをテストできるようにする必要がありますか?ベストプラクティスは何ですか?

1
TFSビルドプロセステンプレート(ワークフロー)を使用した展開
複雑な展開にTFSビルドワークフローを使用することを考えています。展開が必要なものがあります。 Webアプリケーションとサービス データベース SSRSレポート SSISパッケージ 他に何を知っている人 どのビルドをデプロイして実行するかなど、ワークフローにいくつかの基本的なパラメーターを与えることができるという事実が気に入っています。潜在的に、一部の部分は人間の承認を必要とする可能性があり、ワークフローもそれを処理できることを知っています。例として、ワークフローを使用してVisual Studioデータベースプロジェクトから変更スクリプトを作成する場合がありますが、DBAグループはスクリプトを実行する前に承認する必要があります。 他の人が過去にこの目的で「ビルド」を使用したかどうか、およびどのような問題が見つかったかを知りたいです。

3
SOLIDの原則を使用する場合、開発者の発見可能性は問題ですか?
他のすべての開発者が基本的なCRUDアプリを実行することに慣れているか、かわいらしい/機能的なインターフェイスを作成することに専念している基幹業務アプリを実行しており、次のことをたくさん得ています。 「私たちがそれを行うために使用する方法で、従業員はあなたが従業員に対しておそらくできるすべてのことをするでしょう。」そしてそれは本当でした。その1つの「クラス」には数千行のコードがあり、従業員に対して実行できることは何でもありました。または、さらに悪いことに、従業員データのテーブルがあり、各開発者がイベントハンドラーで実行したいことを実行する方法を見つけました。 そのアプローチのすべての悪い点は真実でしたが、少なくとも従業員を使用する開発者は、他のドキュメントに行かなくても、従業員をヘルスプランに登録し、昇給、解雇、雇用、異動などを行う方法を見つけることができました。マネージャーと他のすべての主要なアイデア。または、従業員が他の必要なデータテーブルを使用している場合は、必要なことを実行できます。 はい、多くの重複したコードがありました。はい、それは非常に壊れやすいコードでした。はい、テストは必要以上に困難でした。はい、機能の変更は恐怖を誘発するものであり、コピーペーストはそのアプローチにより当然のことでした。 しかし、少なくとも1つのクラスを作成することで何が利用可能であるかを発見したり、インターフェイス、抽象クラス、具象クラスなどの違いを理解しなくても、必要なことを実行したりできます。 intellisenseによって返されるメソッド、またはデータが存在するテーブルを知っているメソッド。 googled / bingedやyahoo!dも行っていますが、この問題の確認はありません。 だから問題はないかもしれないし、何か足りないだけなのかもしれない。実際の動作やデザインに対応していない開発者が、外部ドキュメントを参照したり、さまざまなコンポーネントのクラス名をスキャンしたりせずに、何かを行う方法を簡単に発見できるソリューションを理解しようと頭を悩ませました/それが動作するように聞こえるものを見つけるためのプロジェクト。 私が思いつくことができた唯一のものは、より良い名前がないために、これらを持っていることです、「Table of Content Class」は実際のクラスを返すだけで何もしません(そして実際にそれらのほとんどはインターフェースですがそれらは他の開発者が希望する実際のタスクを実行するために使用できる違いまたは注意さえも知っています。まだ本当に大きなクラスになってしまいますが、それらにはほとんど振る舞いがありません。 SOLIDの実際の実装が行われる中間層の詳細な知識を必要としないより良い方法はありますか? 基本的に私が求めているのは、CRUDタイプの開発者が非常に複雑なシステムのCRUD開発者であり続けることを可能にする方法があるかどうかです。
10 solid  crud 

2
SRPに従う場合、エンティティの検証と保存にはどのように対処すればよいですか?
私は最近、クリーンコードやSOLIDに関するさまざまなオンライン記事を読んでいますが、それについて読むほど、何も知らないように感じます。 ASP.NET MVC 3を使用してWebアプリケーションを構築しているUsersControllerとしましょう。たとえば、次のCreateようなアクションがあるとします。 public class UsersController : Controller { public ActionResult Create(CreateUserViewModel viewModel) { } } そのアクションメソッドでは、入力したデータが有効な場合、ユーザーをデータベースに保存します。 さて、単一の責任の原則に従って、オブジェクトは単一の責任を持つべきであり、その責任はクラスによって完全にカプセル化されるべきです。そのすべてのサービスは、その責任と厳密に一致している必要があります。検証とデータベースへの保存は2つの別々の責任であるため、次のようにそれらを処理するために別々のクラスを作成する必要があると思います。 public class UsersController : Controller { private ICreateUserValidator validator; private IUserService service; public UsersController(ICreateUserValidator validator, IUserService service) { this.validator = validator; this.service= service; } public ActionResult Create(CreateUserViewModel viewModel) { ValidationResult result …

4
Web開発者向けのラーニングパス.NETまたはJava [終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 Windowsでホストされている実際のWebアプリケーションサーバーの数を知りたいですか? C#とASP.NETについて学び、自分を組み込み開発者からWebアプリ開発者に変えたいと思っています。 私の友人は、WindowsサーバーよりもLinuxベースのサーバーの方がはるかに多いことを教えてくれました。また、Javaスキルスタックは、Webアプリケーションの世界では.NETよりもはるかに有用であると述べました。 JavaとC#の私の経験は大体同じです。私は経験豊富なC ++開発者です。 誰か私にそれについていくつかの提案をすることはできますか? どうもありがとう
10 c#  java  .net 

8
Visual Studioソリューションのグッドプラクティス[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 うまくいけば、相対論の簡単な質問です。私は建物内の修理されたデバイスの扱いやすさを作成するための新しい内部プロジェクトに取り組んでいます。 データベースはリモートでウェブサーバーに保存され、ウェブAPI(JSON出力)を介してアクセスされ、OAuthで保護されます。フロントエンドGUIはWPFで、ビジネスコードはC#で作成されています。 これから、プレゼンテーション/アプリケーション/データストアのさまざまなレイヤーがわかります。APIへのすべての認証済み呼び出し、エンティティ(ビジネスオブジェクト)を表すクラス、エンティティ(ビジネスオブジェクト)を構築するクラス、WPF GUIのパーツ、WPFビューモデルのパーツなどを管理するためのコードがあります。 これを単一のプロジェクトで作成するのが最適ですか、それとも個別のプロジェクトに分割するのが最適ですか? 私の心の中でそれは複数のプロジェクトであるべきだと言います。私は以前に両方の方法でそれを行っており、単一のプロジェクトソリューションを使用するとテストが簡単になることがわかりましたが、複数のプロジェクトを使用すると、再帰的な依存関係が発生する可能性があります。特に、クラスにテストを容易にするためのインターフェースがある場合、問題が発生する可能性があることがわかりました。

2
多くのボタンにOnClickListenerインターフェイスを実装する適切な方法は何ですか
私のAndroidアクティビティには、すべてOnClickListenerを必要とする複数のボタンが含まれています。私はこれを行う多くの異なる方法を見てきました: アクティビティクラスでのインターフェースの実装 インターフェースを実装する別のクラスを作成する 各ボタンの匿名内部クラスを定義します。 私はそれぞれのアプローチの多くの例を見てきました。ただし、なぜ1つのアプローチが別のアプローチの代わりに使用されるのかは、はっきりしません。これらのアプローチの違いは文体的ですか、それとも1つのアプローチを改善する理由がありますか?

2
ユビキタス言語-正確さとユーザビリティの間の矛盾
ドメイン駆動設計の中核は、会話、コード、データベーススキーマ、UI、テストなど、システム全体でユビキタス言語を一貫して使用することです。 私は、国際標準化機構によって定義された、確立されたドメイン言語がすでに存在するプロジェクトに関与しています。 ただし、私たちが行っている作業はパブリックWebサイトのためのものであり、ドメインの「正しい」用語は、一般の人々が通常それらを使用して理解する方法とは限りません。 現時点で使用している妥協点は、UIコンポーネントを参照する承認基準を除き、どこでも「公式」の用語を使用することです。ここでは、非公式の名前を使用しています。 これは合理的なアプローチのように見えますか?

3
サプライヤーのWebサービスを呼び出す単体テスト方法
1つのパブリックメソッドSend()といくつかのプライベートメソッドを持つクラスがあります。いくつかのWebサービスを呼び出し、応答を処理します。処理はプライベートメソッドで行われます。 コードを単体テストしたい。私の理解では、単体テストではコードを分離してテストする必要があります(つまり、サプライヤーの応答をモックアップします)。 また、プライベートメソッドを単体テストする必要はないと考えていますが、Send()メソッドをテストするだけでは、コードは分離してテストされておらず、サプライヤの反応に依存しています。 その後、モック応答でテストできるように、プライベートメソッドを公開する必要がありますか?私はクラスだけがそれらを呼び出す必要があるので、それは悪い習慣のようです。 基本的な質問であれば、申し訳ありませんが、単体テストはかなり新しいものです。 私はc#とVS2010を使用しています


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