アプリケーション開発者はシグネチャを見て、このルールに従っていると仮定します。例えば、ライブラリに同期メソッドがあれば、利用者側はスレッドプールを使って安全に並列化できると仮定できます。しかし、非同期であれば、スレッドを新しく生成するのは無駄で、シングルスレッドのループの中で非同期メソッドを実行するほうがいいと判断するでしょう。 このように考えると、さらに基本的な原則が生まれます。 “ライブラリ内でTask.Runを使わない” スレッド、特にスレッドプールのスレッドはグローバルに共有されているリソースで、アプリケーション開発者に属しています。ライブラリの作者はTask.Runを使ったり、スレッドを作るメソッドを作成するべきではありません。どのようなタイミングでスレッドを追加するか決めるのはアプリケーション開発者の権利と責任です。 次のコードは典型的なアンチパターンです。 public st
UIパターン 追記 この記事の一部を加筆・修正したものを「開発者が知っておくべき、6つのUIアーキテクチャ・パターン」として@ITに転載しています。 MVVMを追加した上で、アプリケーションモデルとMVVMをプレゼンテーションモデルのバリエーションとして位置づけました。 MVPの2つのスタイルとして、監視コントローラとパッシブ・ビューを説明しました。 まえがき Martin Fowlerの"GUI Architectures"を訳したので公開しようと思ったのだが、FAQページに「EAA developmentとかDSLなんかは商業出版するんで例外ってことで」と書いてある。面倒だったので翻訳の公開はやめて、「自分の理解を書く」というスタイルにしようと思う。 Fowler氏が説明しているのは 「フォームとコントロール」、「モデルビューコントローラー (MVC)」、「プレゼンテーションモデル」、
Singleton* Singleton::_instance = 0; Singleton* Singleton::Instance() { if (_instance == 0) { _instance = new Singleton; } return _instance; } GoF本の実装の問題 GoF本の実装例のコードが抱える問題点を列挙します。 コピーコンストラクタ、コピー代入演算子によってインスタンスの唯一性の保証が崩れる Singleton* s1 = Singleton::getInstace(); Singleton* s2 = new Singleton(*s1); Singleton s3 = *s2; とすれば、新しいSingletonクラスのインスタンスが生成されます。 インスタンスをdeleteされてしまうと、以後ダングリング参照問題が発生する Single
ここに掲載したコードは、『増補改訂版Java言語で学ぶデザインパターン入門 / 結城 浩(著)』に掲載されているサンプルコードをC#に移植したものです。移植後のコードの公開に関しては、結城氏の了解を得ています。 ※当ソースは、Visual C# 2005 Express Editionで動作を確認しています。 ParseExceptionインターフェース using System; namespace Gushwell.DesignPatterns { [Serializable] public class ParseException : System.Exception { public ParseException(string msg) : base(msg) { } } } Nodeクラス using System; namespace Gushwell.DesignPatter
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く