ソフトウェア工学

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

2
静的クラスと静的メンバーの考え方とベストプラクティス[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私は、静的メンバーまたは静的クラス全体に関する考え方と業界のベストプラクティスについて非常に興味があります。これには欠点がありますか、それともアンチパターンに参加していますか? これらのエンティティは、機能を提供するためにクラスをインスタンス化することを要求または要求しないという意味で、「ユーティリティクラス/メンバー」と見なされます。 これに関する一般的な考えと業界のベストプラクティスは何ですか? 以下のクラスとメンバーの例を参照して、私が参照しているものを説明してください。 // non-static class with static members // public class Class1 { // ... other non-static members ... public static string GetSomeString() { // do something } } // static class // public static class Class2 { // ... other static members ... public …
11 c#  class-design 

5
Javaのブールクラス-列挙型ではないのはなぜですか?
ブールクラスは列挙型として実装するのに理想的な候補であるように思えます。 ソースコードを見ると、ほとんどのクラスは静的メソッドであり、変更せずに列挙型に移動できますが、残りは列挙型としてはるかに単純になります。オリジナルを比較(コメントと静的メソッドは削除): public final class Boolean implements java.io.Serializable, Comparable<Boolean> { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); private final boolean value; public Boolean(boolean value) { this.value = value; } public Boolean(String s) { this(toBoolean(s)); } public boolean booleanValue() { return value; …
11 java  api  source-code 

6
複数の「姓」をモデル化する方法は?
スペイン語圏の国では、次のような複数の姓を使用します。 名↘↙姓 ペドロアルトゥーロロドリゲスロヨラ ミドルネーム↗↖(?) 患者名のデータをモデル化しようとしています。私たちの国では重要なので、2番目の姓を無視することはできませんが、他の開発者、特に英語圏の開発者にとって意味のあるアプリケーションを構築したいと思います。 English.SEで同様の質問を作成しましたが、なぜ両方の値を保持することが重要なのかについての洞察があります。

1
CQRS + Event SourcingアーキテクチャでのAdd / Create *コマンドの処理方法
イベントソーシングと一緒にCQRSパターンを使用して、最初のアプリケーションを実装します。集約ルートの作成を適切に処理する方法について疑問に思っています。誰かがCreateItemコマンドを送信したとしましょう。どのように処理する必要がありますか?イベントItemCreatedを保存​​する場所 新しいアイテムの最初のイベントとして?または、すべてのアイテムを集約し、そのイベントリストがItemCreatedイベントのみで構成される、何らかの種類のItemListエンティティが必要ですか? Udi Dahan は、集約ルートを作成せず、常に何らかのフェッチメソッドを常に使用することを提案しています。しかし、新しいもので、IDが割り当てられていないものを取得する方法。私は背後にある考え方を理解しており、新しいオブジェクトは、それに応答するイベントがゼロで構成される状態を持つオブジェクトであると考えるのはかなり合理的です。しかし、どのように使用すればよいですか?私のような私のリポジトリに明確な方法を持っていなければならないgetNewItem()か、私の作るget(id)方法を受け入れてOptional<ItemId>代わりに? 編集:しばらく掘り下げた後、アクターを使用した前述のパターンの非常に興味深い実装を見つけました。作成者は、集計を作成する代わりに、新しく作成されたUUIDを使用して、何らかの種類のリポジトリからそれを取得します。このアプローチの欠点は、一時的な不整合状態を許容することです。またdelete、このようなアプローチでメソッドを実装する方法を疑問に思っています。削除済みイベントを集約のイベントリストに追加するだけですか?

2
パブリッシュ/サブスクライブパターンは、gotoとどのように異なりますか?
私の理解では、後藤声明は一般的に眉をひそめているということです。しかし、パブリッシュ/サブスクライブパターンは、コードの一部がメッセージをパブリッシュすると、一方向の制御の転送を実行するという点で概念的に類似しているようです。プログラマは、プログラムのどの部分がこのメッセージにサブスクライブしているかわからない場合があります。 イベントを使用してモジュール間を便利に「ホップ」するJavaScriptプログラムの多くで、似たようなものを見てきました。パブリッシュ/サブスクライブまたはイベント駆動型のパターンについて何かが欠けていますか?

3
電子メールサーバーを使用せずに電子メールを送信する
JavaMailは、通常は電子メールプロバイダーのSMTPインターフェイスを介して、電子メールサーバーを使用して電子メールを送信します。電子メールを送信するために電子メールサーバーを使用する必要がありますか? 電子メールを送信するWebサイトがあり、可能であれば、電子メールサーバーを使用せずに、Webサイトコードから直接電子メールを送信したいと思います。JavaMail FAQには、電子メールサーバーが必要であると書かれています。 JavaMailまたは別のAPIを使用して、電子メールサーバーを使用せずに電子メールを送信する方法はありますか?
11 java  email 

2
メッセージがコマンドメッセージかイベントメッセージかを判断する方法
2つのエンタープライズ統合パターンは、コマンドメッセージとイベントメッセージです。私は、他のシステムとの統合だけでなく、サービス間の内部通信にもメッセージングを使用するシステムに取り組んでいます。ことになって最終的に一貫性のあるシステム、およびサービスは、(カップル専用のサービスへの例外を除いて)お互いの無知ことになっています。そのため、リモートプロシージャコール(RPCまたはRPI)のように感じることは避けようとします。バスとメッセージ指向のミドルウェアシステムがあり、すべてのメッセージがブロードキャストされます。 私たちは、過去完了でフレーズとして、あるイベント、例えば、として私たちのメッセージに名前を付ける傾向がありますPurchaseOrderShipped。ただし、多くの場合、イベントは他のサービスがイベントについて知る必要がある場合にのみ追加され、最初は多くの場合1つのサービスのみが重要です。さらに、そのサービスは結果としてイベントを発行することがあり、そのイベントは最初のサービスでリッスンされます。したがって、相互作用を図にすると、イベントメッセージの図よりも上のリンクのコマンドメッセージの図(またはRPC図)のように見えますが、これは実際には実装されていませんダイレクトメッセージングですが、バスでブロードキャストします。それに加えて、コマンドとして名前が付けられたいくつかのメッセージが追加されたことを最近見たという事実、つまり、命令のフレーズ、例えばBillShippedPurchaseOrder。 奇妙なことに、メッセージの名前とその流れは、イベントとして命名されたかコマンドとして命名されたかによって変わりません。では、何かがコマンドメッセージかイベントかをどのように判断するのでしょうか?これはセマンティクスと命名の単なる違いですか、それともコマンドとイベントメッセージの実際の実装の違いはありますか?すべてのメッセージがブロードキャストされていることを考えると、それらのどれもが本当にコマンドメッセージではないということですか?

5
関数型プログラミングでは、数学の法則によってモジュール性をどのように実現しますか?
私はこの質問で、関数型プログラマーは数学的な証明を使用して、プログラムが正しく機能していることを確認する傾向があることを読みました。これは、単体テストよりもずっと簡単で高速に聞こえますが、OOP /単体テストのバックグラウンドから来たので、一度も見たことがないです。 それを私に説明し、例を挙げてもらえますか?

2
AppleがiOSで静的フレームワークのみを許可するのはなぜですか?
Appleは、iOS用に動的にロードされるライブラリ(フレームワークと呼ばれる)を作成する機能を持っていることは明らかです。アプリ開発者は静的ライブラリを作成する機能しか持っていないか、せいぜい、実際に静的ライブラリをロードしているときにフレームワークをロードしているとXcodeをだまします。これは、偽のフレームワークの作成として知られています。しかし、動的ローディングの利点はありません。 アプリ開発者からの動的なフレームワークを保持するためのAppleの理由は何ですか?開発者は繊細なリンカーフラグやオープンソースライブラリの依存関係チェーンに依存する必要がないため、外部ライブラリの使用がかなり容易になるようです。 一般的な理由はセキュリティだと思います。なぜAppleはiOSではなくOSXでそれを許可するのですか?セキュリティも要件ではありませんか? 編集:これはiOS 8からは関係なくなりました。Appleは動的フレームワークのサポートを追加しました。

6
Javaで静的コンストラクターを使用する
Javaの静的コンストラクターを完全に理解できませんでした。許可されている場合、なぜ許可されているのですか?どのシナリオで使用しますか?それはどのような目的に役立つでしょうか?誰か簡単な例を教えてもらえますか?
11 java 

2
単一のメソッド内で同期メソッドと非同期メソッドを効率的に混合しますか?
さて、奇妙に聞こえますが、コードは非常にシンプルで、状況をうまく説明しています。 public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role) { AssertNotDisposed(); var roles = await GetRolesForUser(user); roles.Roles = RemoveRoles(roles.Roles, role); await Run(TableOperation.Replace(roles)); } (私は以下の要約で話していることを知っていますが、上記は私がここで尋ねていることを実際に実行している実際の生産コードになるものからの実際の方法であり、実際にレビューすることに興味があります非同期/待機パターンに対する正確さのため) async/ を使用しているため、このパターンに頻繁に遭遇していawaitます。このパターンは、次の一連のイベントで構成されています。 作業に必要な情報を取得する最初の電話を待つ その情報を同期的に処理する 更新された作業を保存する最後の呼び出しを待つ 通常、上記のコードブロックは、これらのメソッドの処理方法です。私awaitは最初の呼び出しです。非同期であるためです。次に、IOまたはリソースにバインドされていないため、非同期ではない、必要な作業を実行します。最後に、私はまた、ある私の仕事、保存async、および貨物カルトIのうち呼び出しawait、それを。 しかし、これはこのパターンを処理する最も効率的で正しい方法ですか?私awaitは最後の呼び出しをスキップすることができたようですが、それが失敗したらどうなりますか?また、同期作業を元の呼び出しと連鎖さTaskせるなどの方法を使用する必要がありContinueWithますか?私はちょうど今これを正しく処理しているかどうかわからない時点にいます。 例のコードを考えると、この非同期/同期/非同期メソッド呼び出しチェーンを処理するより良い方法はありますか?

3
かんばん:作業項目サイズの選択方法
かんばんから始めて、作業項目がどれくらいきめ細かくなければならないかわかりません。WIPの選択方法に関する具体的な推奨事項はたくさんありますが、私が読んだカンバンチュートリアルのほとんどは、ワークアイテム(ボード上のカード)のサイズについてかなり曖昧なままです。 以下のための計画と見積もり、人々は多くの場合、アイテムの小型のサイズを維持することをお勧めします2-16時間を言います。同じことがかんばんにも当てはまりますか?私の計画から取締役会への1対1のマッピングは常にありますか? ベストプラクティスや一般的な推奨事項がない場合、どの要素が作業項目の粒度の選択に影響しますか?
11 kanban 

10
テストvs自分自身を繰り返さない(DRY)
テストを書くことで自分自身を繰り返すことがなぜ非常に奨励されるのですか テストは基本的にコードと同じことを表しているため、コードの(概念ではなく、実装で)重複しているようです。DRYの最終的なターゲットには、すべてのテストコードの削除が含まれませんか?
11 testing  dry 

3
MVCサイト全体のグローバル定数値
My MVC(.NET)には、電話番号、物理アドレス、電子メールアドレスなど、サイト全体で一定の値があります。 この値を1回保存したいので、詳細を変更するときに将来の更新が簡単になります。 質問を簡単にするために、電話番号のみに注目しました。 私の質問は、この番号をどこにどのように保存するか、そして私が決定に直面している問題です。現時点では、Global.asaxファイルに静的メソッドとして保存することを選択しました。たとえば、 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { //logic } public static string GetPhoneNumber() { return "012345 678 910"; } } これは非常にうまく機能します。私のコントローラーでは、このメソッドへの参照を追加してViewBagに割り当てることができます public ActionResult Contact() { ViewBag.Phone = MvcApplication.GetPhoneNumber(); } 多くのサイトのように、電話番号はすべてのページの上部に表示されるため、その番号を_Layout.cshtml論理的に配置します。 私が持っている問題は、_Layout.cshtml用のコントローラがない(私にはわからない)ことであり、値を渡すことができる唯一の方法は、ViewBag.Phoneをすべてのビューに設定することです、EG public class HomeController : Controller { // // GET: /Home/ public …
11 mvc 

2
共同オープンソースプロジェクトでTDDが実行可能か
多くの人にパッチなどを提出してもらいたいと思う/期待するオープンソースプロジェクトを開始したいとしましょう。厳密なTDDアプローチをとることは実行可能ですか?共同作業者がパッチを提出するたびに品質テストを作成することを期待/信頼できるか? 私が考えていた1つのことは、個々のバグレポートと機能リクエスト用のテストスイートを作成し、すべてのパッチ/プルリクエストがテストに合格することを要求しますが、その時点で機能/バグ修正を書く方が良いようです自分。 私が知る限り、TDDを使用する(または少なくともテストを書く)主要なオープンソースプロジェクトのほとんどは、個人またはチームによって純粋に記述されているようで、TDDなどのプラクティスを実施するのは簡単です。

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