ソフトウェア工学

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

3
@staticmethod vsモジュールレベル関数
これは約@staticmethodではありません@classmethod!仕組みはわかっていますstaticmethod。私が知りたいのは、@staticmethodvs。モジュールレベルの関数の適切なユースケースです。 私はこの質問をグーグルで調べましたが、モジュールレベルの関数は静的メソッドよりもPythonに近いため、モジュールレベルの関数が優先されるという一般的な合意があるようです。静的メソッドには、そのクラスにバインドされるという利点があり、そのクラスのみが静的メソッドを使用する場合に意味があります。ただし、Pythonの機能は通常、クラスではなくモジュールによって編成されるため、通常はモジュール関数にすることも理にかなっています。 静的メソッドはサブクラスでオーバーライドすることもできます。これは、見方によっては利点または欠点です。静的メソッドは通常「機能的に純粋」であるため、オーバーライドするのは賢くないかもしれませんが、便利な場合もあります(ただし、これは「便利でありながら絶対にしないでください」という種類の経験でしか教えられないことがあります)。 staticmethodまたはmodule-level関数を使用するための一般的な経験則はありますか?具体的な長所と短所は何ですか(将来の拡張、外部拡張、読みやすさなど)。可能であれば、事例も提供します。
21 python 


5
関数型プログラミングは数学と強く関係していますか?
この質問は 、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学にとても関連していますか?命令的な背景を持つプログラマーのための関数型プログラミングを学び、理解するための強力な数学の基礎を持つ必要がありますか?

2
フロントエンドで計算を行うのが適切なのはいつですか?
私のチームはWEBベースの財務アプリケーションを開発していますが、同僚と計算をどこで行うべきかという議論が少しありました。純粋にバックエンドで行うのか、それともフロントエンドで行うのですか? 簡単な説明:フロントエンドにはJava(ZK、Spring)を使用し、バックエンドにはProgress 4glを使用しています。筋金入りの数学とデータベースからのデータを含む計算はバックエンドに保持されるため、私はそれらについて話していません。ユーザーが値Xを入力し、値Yに追加され(画面に表示)、結果がフィールドZに表示される状況について話しています。純粋で単純なjQueryのような操作、つまり。 ここで、ベストプラクティスは次のとおりです。 1)JavaScriptを使用して値を追加し、バックエンドに行ったり戻ったりするのを防ぎ、バックエンドで「保存時」にそれらを検証しますか? 2)すべてのビジネスロジックを同じ場所に保持します。したがって、値をバックエンドにもたらし、そこで計算を行いますか? 3)フロントエンドで計算を行います。次に、データをバックエンドに送信し、そこでデータを検証し、計算を再実行します。結果が有効で等しい場合にのみ、ユーザーに表示しますか? 4)他に何か? 注:Javaでいくつかの基本的な検証を行いますが、ほとんどは他のすべてのビジネスロジックと同様にバックエンドにあります。 バックエンドのすべてを再計算することで送信されるデータの増加は問題になりません(XMLサイズが小さい。サーバーと帯域幅はユーザーの操作量の増加に耐えます)。


6
小規模企業でのペアプログラミング/コラボレーション
私は小さな開発会社で主任開発者として働いています。私たちには他に2人の開発者と、開発者である上司がいますが、実際のコーディングは実際にはあまり行いません。 私が克服しようとしている問題は多面的です。私たちは皆、私たちの間の多くのコラボレーションなしに、私たち自身のプロジェクトに取り組む傾向があります。実際のところ、私は(最も先進的な開発者として)他人の意見/助けを彼らが私のものよりも求めています。 私たちのコラボレーションを増やしたいと思い、彼らにそれを表明しました。大部分は、より良い開発者になり、より良いプラクティスに従う方法についていくつかのことを見せたいからです。しかし、他の開発者の性格タイプを考えると、彼らは単独で作業する方が快適だと思います。 私はペアプログラミングについて読んでいますが、あるフォーラムでは、ある開発者が他の開発者(私)よりも進んでいるとうまくいかないことを読みました。それでも、私たちの仕事がそれほどばらばらにならないように、私たちは協力し始めることが不可欠であると感じています。 私の質問は、誰かがこれまでに同様の状況にあったかどうか、そして何が彼らのために働いたのですか? 私はこれが万能の状況ではないことを理解していますが、複数のアプローチを試してみたいと思います。 私たちは皆、共通の領域で働いており、開発者は個々のオフィス/キュービクルを持っていません。


4
大きなデータベースで誤ったデータ更新を回避するために従うべきプラクティスは何ですか?
実稼働展開の前の一般的なアドバイスは、最初にDBをバックアップすることです。このように、新しい更新に潜在的なデータ損失または論理データ破損につながる可能性のある問題がある場合、古いレコードを比較して修正するためのバックアップがまだあります。 ただし、DBサイズが数GBになるまでこれはうまく機能します。DBのサイズが大きくなると、バックアップの完了に長い時間がかかります。コード展開の論理的な問題による論理データの破損を回避するために、このような状況で従うべきベストプラクティスは何ですか?

6
結果をキャッシュしない方法でLINQを実装することにより、どのような利点が得られましたか?
これは、LINQを使用して足を濡らしている人々にとって既知の落とし穴です。 public class Program { public static void Main() { IEnumerable<Record> originalCollection = GenerateRecords(new[] {"Jesse"}); var newCollection = new List<Record>(originalCollection); Console.WriteLine(ContainTheSameSingleObject(originalCollection, newCollection)); } private static IEnumerable<Record> GenerateRecords(string[] listOfNames) { return listOfNames.Select(x => new Record(Guid.NewGuid(), x)); } private static bool ContainTheSameSingleObject(IEnumerable<Record> originalCollection, List<Record> newCollection) { return originalCollection.Count() == 1 && newCollection.Count() …

3
巨大な配列をいっぱいにすることなく大きな問題を生成するプロフェッショナルな方法:C ++、配列の一部からメモリを解放
私は物理シミュレーションを開発していますが、プログラミングが初めてなので、大規模なプログラムを作成するときに問題が発生し続けます(主にメモリの問題)。動的メモリの割り当てと削除(新規/削除など)については知っていますが、プログラムをどのように構成するかについて、より良いアプローチが必要です。 非常に大きなサンプリングレートで、数日間実行されている実験をシミュレートしているとしましょう。10億個のサンプルをシミュレートし、それらを実行する必要があります。 非常に単純化されたバージョンとして、プログラムは電圧V [i]を取り、それらを5で合計すると言います。 すなわち、NewV [0] = V [0] + V [1] + V [2] + V [3] + V [4] NewV [1] = V [1] + V [2] + V [3] + V [4] + V [5] 次に、NewV [2] = V [2] + V [3] + V [4] + …
20 c++  data  memory  array  dynamic 

3
ソースコードアクセスを使用した社内NuGetパッケージの管理
社内のプロジェクトを共有したい社内ライブラリがたくさんあります。これらはいくつかの要件です: ライブラリソースは、エンドプロジェクトから分離されたリポジトリに保存されます 終了プロジェクトには、NuGetを介したライブラリが含まれます エンドプロジェクトでの作業中に、任意のライブラリのソースコードを簡単に検査できる必要があります プライベートNuGetリポジトリの設定は問題ではありませんが、ソースの管理は問題です。私たちは、ソースサーバを経由してソースを公開しようとしましたが、それはちょっとあなたが定義/実装に移動しようとすると、外部コードのデバッグ中にVSは、ソースをダウンロードし、ではない:作品ではなく、かなり。基本的に、デバッグ時にのみソースコードにアクセスできますが、これは必要なものではありません。 したがって、質問は次のとおりです。 同じレポ/ソリューションにコードを入れる必要なく、内部ライブラリのソースコードへのアクセスを提供する方法が存在します VSがデバッグだけでなくナビゲーションにもシンボルを使用するように、Symbolサーバー/ NuGetフィードコンボを設定する方法はありますか? ReSharper /その他のアドインの使用はオプションです。

4
関数をパラメーターとして取る関数は、それらの関数へのパラメーターもパラメーターとして取る必要がありますか?
多くの場合、データアクセスを簡単にモックでき、アクセスするデータを決定するパラメーターを受け入れる署名を提供するため、このような関数を作成していることに気付きます。 public static string GetFormattedRate( Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = rate.DollarsPerMonth.ToString("C0"); return formattedRate; } または public static string GetFormattedRate( Func<RateType, string> formatRate, Func<string, RateType>> getRate, string rateKey) { var rate = getRate(rateKey); var formattedRate = formatRate(rate); return formattedRate; } 次に、私はそれを次のように使用します: using FormatterModule; …

5
ソフトウェアシステムをモデル化することと、すべてをコードで実行することの利点は何ですか?
私が知っているすべてのIT担当者ではないにしても、ほとんどの場合、コーディングの前にUMLまたは他のタイプのダイアグラムでソフトウェアをモデル化することが有益であると考えています。(私の質問は、特にUMLに関するものではなく、ソフトウェア設計のグラフィックまたはテキストによる説明です。) 私はそれについてはよくわかりません。主な理由は次のとおりです。コードは嘘をつかない。コンパイラーまたはインタープリターによってチェックされます。自動化されたテストがあり、静的コード分析に合格する必要があります。モジュールが別のモジュールと正しくインターフェイスしていない場合、エラーメッセージが表示されるため、通常はコードで明らかです。 このすべてを図や他のドキュメントで行うことはできません。はい、UMLをチェックするツールはありますが、これまで見てきたことはすべて非常に限られています。したがって、これらのドキュメントは不完全、一貫性のない、または単純な偽である傾向があります。 ダイアグラム自体が一貫していても、コードが実際にそれらを実装していることを確認することはできません。はい、コードジェネレーターはありますが、すべてのコードを生成することはありません。 モデリングの強迫観念は、コードが不可解に不可解な混乱であり、建築家、デザイナー、または全体像をつかむ他の有給の人々が対処する必要がないという前提から生じることに執着するように感じることがあります。そうでなければ、あまりにも高価になってしまいます。したがって、設計上のすべての決定は、コードから移動する必要があります。コード自体は、それを書くことができる(そしておそらく読むことができる)専門家(コードモンキー)に任せるべきですが、他に何も処理する必要はありません。これはおそらくアセンブラが唯一のオプションであったときに意味をなしましたが、最新の言語では非常に高いレベルの抽象化でコーディングできます。したがって、モデリングの必要性は実際にはありません。 ソフトウェアシステムをモデル化するための引数がありません。 ところで、図はソフトウェア設計の特定の側面を文書化して伝達するのに最適な方法であると考えていますが、それはソフトウェア設計をそれらに基づいて行うべきではないということです。 明確化: この質問は不明確であるとして保留されています。したがって、いくつかの説明を追加しましょう。 私は、ソフトウェア設計に関する真実の主要な情報源としてソフトウェアをモデル化する(コードではない)ドキュメントを使用することが理にかなっているかどうかを尋ねています。コードの大部分がこれらのドキュメントから自動的に生成されることを念頭に置いていません。この場合、ドキュメント自体をモデルではなくソースコードと見なします。 この手順の欠点をいくつか挙げたので、(私の経験では)なぜ多くの人がこの手順をソフトウェア設計の好ましい方法と考えているのか疑問に思います。

3
Pyqt / QtアプリのロジックからUIを適切に分離する方法は?
私は過去にこの主題について多くのことを読み、ボブおじさんのこのような興味深い講演をいくつか見てきました。それでも、デスクトップアプリケーションを適切に設計し、UI側の責任とロジック側の責任を区別することは常に非常に難しいと感じています。 優れた実践の非常に短い要約は、このようなものです。UIから切り離したロジックを設計する必要があります。これにより、どの種類のバックエンド/ UIフレームワークに関係なく(理論的に)ライブラリを使用できるようになります。これが意味することは、基本的にUIは可能な限りダミーであるべきであり、重い処理はロジック側で行われるべきだということです。別の言い方をすれば、文字通り、コンソールアプリケーション、Webアプリケーション、またはデスクトップアプリケーションで素敵なライブラリを使用できます。 また、ボブおじさんは、どのテクノロジーを使用するとさまざまなメリットが得られるか(良いインターフェース)を議論することを提案します。 ですから、この質問は非常に広範な質問であり、インターネット全体で何度も議論されてきました。そこで、何か良いものを得るために、pyqtでMCVを使用しようとする非常に小さなダミーの例を投稿します。 import sys import os import random from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtCore random.seed(1) class Model(QtCore.QObject): item_added = QtCore.pyqtSignal(int) item_removed = QtCore.pyqtSignal(int) def __init__(self): super().__init__() self.items = {} def add_item(self): guid = random.randint(0, 10000) new_item = { "pos": [random.randint(50, 100), …
20 design  python  mvc  gui  coupling 

3
git stashを使用してプロジェクトの進行中の変更を保存し、それをgithubにプッシュして他のコンピューターにアクセスする必要がありますか?
私は非常に頻繁にプロジェクトのいくつかの機能に取り組んでおり、コミットするのに十分である前に休憩を取る必要があります。しかし、私は毎日2台の異なるコンピューターを使用してコーディングしています(ラップトップと研究室のデスクトップ)。例:自宅で機能の作業をしているときに、停止してラボに移動します。 クラウドの同期(Dropboxなど)とGitHubリモートトラッキングを混在させたくありません。 作業を続行するために他のコンピューターにコードを引っ張る目的でのみ、以前にコードの未完成(および乱雑な)状態をコミット(およびプッシュ)しました。これは悪い習慣だと確信しています。 しかし、今日は、git stashグーグルで少し見つけました。それは私が必要なものに対する完璧な解決策のようです。 ただし、ドキュメントに、変更をプッシュした後にgithubに移動するかどうかは記載されていません。それに加えて、必要なモビリティを達成するためのより効率的な方法があるかどうかを知りたいです。 前もって感謝します!
20 git  github  gitflow 

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