ソフトウェア工学

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

1
Delphi PascalにMVVMとMVCを実装するためのベストプラクティス
私はDelphiパスカルプログラマーで、最新のEmbarcadero delphi XEを使用しています。モデルビューコントローラーやモデルビュービューモデルなどのデザインパターンを利用したいと思います。 ただし、これをPascalで行うためのベストプラクティスについては、Webに多くはないようです。私が見つけることができるほとんどの例はC#にあり、一部の言語機能はPascalに存在しません。つまり、これらの機能を実装する方法を見つける必要があるかもしれません。 この記事のコードをここで適応させようとしています 私が直面している問題をリストします null許容型 PascalにはC#のようにnull許容型がないため、独自に作成しました。 TNullable<T> = record strict private fHasValue : boolean; fValue : T; function GetValue:T; procedure SetValue(newValue : T); public property HasValue : boolean read fHasValue; property Value : T read GetValue write SetValue; procedure SetToNull; end; 実装セクション function TNullable<T>.GetValue:T; begin if fHasValue then …

2
より制限的なライセンスの下で公開された後、著者および著作権者として、より自由なライセンスの下で私のコードを再ライセンスできますか?
たとえば、コードをGPLで公開したとします。 リリースから1か月後、悪質な企業(*咳*)は結局私のコードの使用を許可されていると判断しました。自分のコードを再ライセンスすることはできますか、それとも自分がそうする権利から自分をロックしましたか?
10 licensing  gpl 

2
リポジトリへまたはリポジトリへ
ドメインドリブンデザインについて初めて知ったとき、データベースに対する穴居人のようなSQLクエリを投げたクールな子供たちにとって、かつては一流であるように思われるリポジトリと作業単位パターンも紹介されました。EFやNHibernateのようなORMは、作業単位とリポジトリの両方を1つのAPI(セッションまたはコンテキストと呼ばれる)に実装するため、そのトピックを深く掘り下げれば読むほど、それらは必要なくなったように見えます。 今、私は何をすべきかわかりません。リポジトリするかしないか。このようなリークの多い抽象化は複雑すぎてデータアクセスを簡略化するものは一切追加しないという主張を本当に理解していますが、アプリケーションのあらゆる側面をEntity Frameworkなどに結合するのは適切ではないと感じます。通常、私はいくつかの簡単なガイドラインに従います: ドメイン層は、エンティティ、サービス、リポジトリを含むシステムの中心です... インフラストラクチャ層は、ファイル、データベース、プロトコルなどのインフラストラクチャ関連のドメインインターフェイスの実装を提供します。 アプリケーション層は、物事を結び付け、すべてをオーケストレーションするコンポジションルートをホストします。 私の解決策は通常次のようになります: Domain.Module1 Domain.Module2 IModule2Repo IModule2Service Module2 Infrastructure.Persistence Repositories EntityFrameworkRepositoryBase MyApp Boostrapper -> inject EntityFrameworkRepositoryBase into IRepository etc. 私は、IRepository<'T>データへのアクセス方法を教えてくれる他のものに依存しないドメインの問題でもあるを使用して、ドメインレイヤーをクリーンに保ちます。IModule2Serviceデータアクセスを必要とする具体的な実装を行うときは、注入DbContextし、これによってインフラストラクチャレイヤーに直接結合する必要があります。(Visual Studioプロジェクトに入ると、循環依存関係のために、これは本当にトリッキーになる可能性があります!) さらに、作品の保管庫やファックトンの代わりになるものは何ですか?CQRS?純粋なインフラストラクチャフレームワークを抽象化するにはどうすればよいですか?

5
HTTPヘッダーにデバイスの解像度、ピクセル密度などが含まれていないのはなぜですか?
現在、CSSメディアクエリを使用したレスポンシブウェブサイトを開発しています。サーバーがビューポートごとに異なるHTML / CSSを返すと、はるかに簡単になります。 クライアントがHTMLファイルをリクエストするときにビューポート情報を含めることができないのはなぜだろうと思っていました。この動作は、Accept-Languageヘッダーを使用して正しい言語でWebサイトを返す場合にすでに一般的です。
10 http 

2
APIの不正使用を回避するにはどうすればよいですか?
「ウィジェット」、つまりパートナーがWebサイトに埋め込んで、UIを表示し、APIを呼び出すスクリプトを設計する必要があります。 基本的に、API呼び出しで提供するいくつかのIDに基づいて、これらのサイトのデータを表示します。回避したいのは、誰かがAPIを悪用し、それを使用してカタログ全体をこすり取ることです。 スクリプトを埋め込む各パートナーには、APIを呼び出すときに提供する必要がある公開鍵が与えられます。スクリプトをロードするときに、このキーを追加するように依頼することをお勧めします。例: <script src="//initrode.com/widget/loader.js?key=xxxx"></script> このようにして、スクリプトのリクエストを使用してキー/ソースIPペアを登録し、キー/ IPペアが登録されたものと一致する場合に限り、後続のAPI呼び出しに応答できます(ライフタイムが制限され、1日あたりのリクエスト数に制限があります)。 それは明らかに難読化によるセキュリティです(スクリプトを再読み込みすると完全にバイパスされます)。しかし、アクセスを制限する他の方法はありません。すべてのユーザーに一意のキーを提供することはできません。パートナーにのみ提供します。すべてのコードが誰でも利用できるようになるため、私は秘密鍵システムを使用できません。基本的に、パブリックAPIへのアクセスを制限しています。つまり、その定義が矛盾しています。 このソリューションについてどう思いますか、これらの制約をどうしますか?

3
大きな遅延(時間)が許容できる場合のプッシュとポーリング
ポーリングは悪い習慣であり、リモートサーバーから常にデータを受信する必要があるモバイルアプリケーションを開発する場合、プッシュが適切な方法であることは最近の常識のようです。 すべての主要なモバイルショップは、プッシュ通知サービスのバージョンを提供しています。 Appleプッシュ通知サービス Android向けGoogleクラウドメッセージング Microsoftプッシュ通知サービス しかし、私はこの仮定がどの程度有効であるのか疑問に思っています。つまり、リモートサーバーを1日に数回しかポーリングせず、「通知」を即座に配信する必要がない(大きな遅延は許容できる)アプリケーションがある場合、それは適切な決定になります。データをプッシュする代わりにポーリングする方法は? 前もって感謝します!
10 mobile  push  polling 

3
console / stdoutへの出力は優れたデバッグ戦略ですか?
次のような関数があるとします。 public void myStart() { for (int i = 0; i<10; i++) myFunction(i); } private int myFunction(int a) { a = foo(a); a = bar(a); return a; } private int foo(int a) { //do something here //something gnarly here //etc return aValue; } private int bar(int a) { // do …
10 debugging 

1
なぜFRACTRANは完全に調子を合わせているのですか?
説明のためにグーグルで試してみましたが、ほとんどのリンクは、「FRACTRANが完成しつつあります。例として、乗算を見てみましょう。 xkcdフォーラムの投稿で、FRACTRANがポスターがチューリングの完全性を理解するのに役立つと言ったのを覚えています。言語メカニズムを見るとあまり明白ではないので、このesolangがチューリング完全である理由に関する直感的な説明を探しています。

2
バックエンドで使用される言語で書かれたフロントエンド![閉まっている]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 6年前休業。 私はウェブ開発の経験から、PHP、Java、Pythonなどの言語がバックエンド開発のもの(サーバーで実行されるソフトウェア)に使用され、フロントエンド言語にはJS / HTML / CSSが使用されることを知っています。 しかし、多くの企業が、たとえばフロントエンド開発にPHPを、バックエンドにpythonを使用していると言っているのを目にします。 それは、PHPがREST、RPCなどを介して他の言語で書かれた他のサービスを呼び出すためのフロントエンドであることを意味しますか?

1
C#5.0の非同期関数と通常の関数の間の線をぼかす
最近、C#5.0の驚くべき非同期待機パターンを十分に理解できていないようです。あなたは私の人生のどこにいましたか? 単純な構文には本当に感激していますが、小さな難しさがあります。私の問題は、非同期関数の宣言が通常の関数とはまったく異なるということです。他の非同期関数で待機できるのは非同期関数だけなので、古いブロックコードを非同期に移植しようとすると、変換しなければならない関数のドミノ効果があります。 人々はこれをゾンビの蔓延と呼んでいます。asyncがコードに噛み付くと、ますます大きくなります。移植プロセスは難しくありません。async宣言をスローし、戻り値をでラップするだけTask<>です。しかし、古い同期コードを移植するときに、これを何度も繰り返すのは面倒です。 両方の関数タイプ(asyncとplain old sync)がまったく同じ構文を持っていると、はるかに自然に思えます。これが事実であった場合、移植はゼロの労力で済み、2つの形式を簡単に切り替えることができます。 私はこれらのルールに従えばこれはうまくいくと思います: 非同期関数はasync宣言を必要としなくなります。それらの戻り値の型をにラップする必要はありませんTask<>。コンパイラは、コンパイル時に非同期関数を単独で識別し、必要に応じてTask <>ラッピングを自動的に実行します。 非同期関数の呼び出しを忘れることはありません。非同期関数を呼び出したい場合は、それを待つ必要があります。私はとにかくファイアアンドフォーゲットをほとんど使用していません。クレイジーレースコンディションやデッドロックのすべての例は、常にそれらに基づいているようです。私はそれらが私たちが活用しようとしている同期の考え方とあまりに混乱していて「連絡がない」と思います。 本当に忘れずに生きられないのなら、それのための特別な構文があります。いずれにせよ、それは私が話している単純な統一構文の一部にはなりません。 非同期呼び出しを示す必要がある唯一のキーワードはawaitです。待機している場合、呼び出しは非同期です。そうでない場合、呼び出しは従来の同期になります(覚えておく必要はありません)。 コンパイラーは非同期関数を自動的に識別します(関数には特別な宣言がなくなるため)。ルール4では、これを非常に簡単に行うawaitことができます。関数の内部に呼び出しがある場合、関数は非同期です。 これでうまくいきますか?または私は何かを逃していますか?この統一された構文ははるかに流動的で、ゾンビの蔓延を完全に解決できます。 いくつかの例: // assume this is an async function (has await calls inside) int CalcRemoteBalanceAsync() { ... } // assume this is a regular sync function (has no await calls inside) int CalcRemoteBalance() { ... } // …

2
Head First Design PatternsのDuckの例で示されているように、コンテキストの継承は戦略パターンとは無関係ですか?
でヘッドファーストデザインパターンでは教えて戦略パターンをダックの異なるサブクラスは、実行時に特定の動作を割り当てることができダックの例を使用して。私の理解では、戦略パターンの目的は実行時に単一のオブジェクトの動作を変更することですが、Duckの継承を使用してさまざまなタイプのDuckの動作を変更しています。 関連性? Duckのコンテキスト継承は戦略パターンと無関係であるか、またはDuckのタイプを変更し、それらの動作も変更することは、戦略パターンを採用する正当な理由ですか?両方を変化させる必要がある状況は、戦略パターンを使用する正当な理由になりますか?なぜこれを戦略パターンの例として含めるのですか? より簡単な例 Duckクラス(派生クラスなし)だけでこの例をさらに簡略化できますか?次に、1つのduckオブジェクトを実装するときに、独自のオブジェクトタイプに依存しない特定の状況に基づいて、異なる動作を割り当てることができます。例:FlyBehaviorは天気に基づいて変化し、QuackBehaviorは時刻またはアヒルの空腹度に基づいて変化します。これは本の問題とは異なる問題を解決することになると思いますが、私が探しているのは、頼りになる適切な戦略パターンの例です。 上記の私の例も戦略パターンを構成しますか? 編集: 私は、コンテキストを継承しない単なる戦略パターンであるHunter.javaとsolver.pyに厳密に準拠する2つの単純な戦略パターンの例を見つけることに成功しました。

4
ユーザーストーリーに基づくバックエンド開発者
バックエンド開発をユーザーストーリーに垂直に分割することを計画しました。しかし、私たちのチームのバックエンドの男は、これにより彼らの仕事が見えなくなると不平を言い始めました。 私の答えは スプリントの計画とレビューのミーティングでは、関係者の前でバックエンドのタスクについて話し合い、それが見えるようにします。 プロジェクト中に高品質を維持すると、他のチームよりも起動のペースが遅くなりますが、プロジェクト中は速度が安定します。そして、速度は利害関係者に非常によく見えます。 「開発者として、ビジネスロジックをカプセル化できるように、ドメインレイヤーを用意する必要があります。」 チームを汚染する前に問題を解決するにはどうすればよいですか? 問題の根本は、私たちの経営陣が体系的にバックエンドの仕事を目に見えないものと見なし、支援された開発者の鉱夫やその他の軽蔑的な言葉を呼ぶことです。
10 agile  scrum  team  user-story 

4
MVCでは、コントローラークラスに非アクションのプライベート関数を含めることをお勧めしますか?
コントローラークラスのアクション関数は、モデルからビューへのデータのフローを単純に制御するための多数のコード行で、巨大で厄介なものになる場合があります。ある時点で、これらの巨大な関数は、優れたコードの基本原則を完全に失うことになります。 これらの巨大なアクション関数をコントローラークラスで小さなプライベート関数に分割することは良い習慣と考えられるでしょうか、またはそのような最適化の必要性はモデルにそれらを追加する必要があることを意味しますか? アクションに関連するように、コントローラーで小さい関数をプライベートとして使用することに投票しますが、モデルが巨大でぎこちない場合は、コントローラーはシンプルであることが望ましいという意見を聞いています。そして、どちらが最も好ましい方法であるか疑問に思っていました。
10 php  code-quality  mvc 

1
doxygenはHTML出力用のテンプレートをサポートしていますか?
のコードをドキュメント化しましたが、コードdoxygenが提供するデフォルトのHTMLは必要ありません。(GNOMEのように)カスタムCSS、ヘッダー、フッターなどを提供することでカスタマイズできること、そして一般的なPHPコードをファイルに追加してとして保存するように指示する方法を.php知っていますが、それは本当に望んでいることではありません。 私が欲しいのはMSDNのような出力です。私はそれを本当に説明することはできません。私の質問は、テンプレートのようなものでdoxygenを使用してこれは可能ですか、それともXMLを出力して別のプログラムで解析する必要がありますか(私は書いてもかまわないでしょう)。

4
用語:本当に削除するか、IsDeleted(「ソフト削除」)フラグを設定するか
通常のユーザーがレコードを削除できるサイトがあります。そこではIsDeletedフラグが設定されます。管理ページでは、特権ユーザーは、実際のSQLがDELETEそのようなレコードを永久に破棄するレコードを削除できます。違いは明らかな理由で重要です。一貫した用語を使用して、ある形式の削除と他の形式の削除を比較したいと思います。私は言葉でプレーしてきたRemove、Delete、DiscardそしておそらくRecycle、とArchive。 私の質問は次のとおりです。これら2つの動作を区別する標準のユーザー向けの用語はありますか?
10 terminology  data 

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