技術者派遣の技術日誌ブログ

November 29, 2008

Adapterパターン (継承版) -機能の階層と実装の階層を分ける-

Filed under: .NET Framework, Asp.Net — Tags: , , — Sayuri @ 7:23 pm

現状のアプリケーションのアーキテクチャをアプリケーションの形態毎にまとめた資料(でいいのかな?)がcodeplexで公開されています。
Pocket Guideといいつつ150ページぐらいのものが多いですが。。。

アプリケーションを構築する上で、どういう技術要素を選択するか、といった時点で参考になることも多そうです。
ざっとでも見ておきたいとこですが、、、分量がなぁ(w

Builderパターン -複雑なインスタンスを組み立てる

Filed under: .NET Framework, C# — Tags: , , — Sayuri @ 7:19 pm

なお、当ソースは、Visual C# 2005 Express Editionで動作を確認しています。


Builder

using System;
namespace Gushwell.DesignPatterns {
public abstract class Builder {
public abstract void MakeTitle(string title);
public abstract void MakeString(string str);
public abstract void MakeItems(string[] items);
public abstract void Close();
}
}

TextBuilder

using System;
using System.Text;
namespace Gushwell.DesignPatterns {
public class TextBuilder : Builder {
// このフィールドに文書を構築していく
private StringBuilder buffer = new StringBuilder();
// 完成した文書
virtual public string Result {
get { return buffer.ToString(); }
}
// プレーンテキストでのタイトル
public override void MakeTitle(string title) {
buffer.Append("==============================\n"); // 飾り線
buffer.Append("『" + title + "』\n");           // 『』つきのタイトル
buffer.Append("\n");                            // 空行
}
// プレーンテキストでの文字列
public override void MakeString(string str) {
buffer.Append('■' + str + "\n");               // ■つきの文字列
buffer.Append("\n");                            // 空行
}
// プレーンテキストでの箇条書き
public override void MakeItems(string[] items) {
for (int i = 0; i < items.Length; i++) {
buffer.Append(" ・" + items[i] + "\n");    // ・つきの項目
}
buffer.Append("\n");                            // 空行
}
// 文書の完成
public override void Close() {
buffer.Append("==============================\n"); // 飾り線
}
}
}

HTMLBuilder

using System;
using System.IO;
namespace Gushwell.DesignPatterns {
public class HTMLBuilder : Builder {
private string filename;        // 作成するファイル名
private StreamWriter writer;    // ファイルに書き込む
// 完成した文書
public virtual string Result {
get { return filename; }    // ファイル名を返す
}
// HTMLファイルでのタイトル
public override void MakeTitle(string title) {
filename = title + ".html"; // タイトルを元にファイル名決定
try {
writer = new StreamWriter(filename, false);
} catch (System.IO.IOException e) {
Console.WriteLine(e.StackTrace);
}
// タイトルを出力
writer.WriteLine("");
writer.WriteLine("");
writer.WriteLine("

" + title + "

"); } // HTMLファイルでの文字列 public override void MakeString(string str) { writer.WriteLine(" " + str + " "); // タグで出力 } // HTMLファイルでの箇条書き public override void MakeItems(string[] items) { writer.WriteLine("
    "); //
    • で出力 for (int i = 0; i < items.Length; i++) { writer.WriteLine("
    • " + items[i] + "
    • "); } writer.WriteLine("
    "); } // 文書の完成 public override void Close() { writer.WriteLine(""); // タグを閉じる writer.Close(); // ファイルをクローズ } } }

Director

using System;
namespace Gushwell.DesignPatterns {
public class Director {
private Builder builder;
public Director(Builder builder) {
// Builderのサブクラスのインスタンスが与えられるので、
// builderフィールドに保持しておく。
this.builder = builder;
}
public virtual void Construct() {
// 文書構築
builder.MakeTitle("Greeting");              // タイトル
builder.MakeString("朝から昼にかけて");     // 文字列
builder.MakeItems(new string[]
{ "おはようございます。", "こんにちは。" });
builder.MakeString("夜に");                 // 別の文字列
builder.MakeItems(new string[]
{ "こんばんは。", "おやすみなさい。", "さようなら。" });
builder.Close();                            // 文書を完成させる
}
}
}

Program

using System;
namespace Gushwell.DesignPatterns {
public class Program {
public static void Main(string[] args) {
if (args.Length != 1) {
Usage();
return;
}
if (args[0].Equals("plain")) {
TextBuilder textbuilder = new TextBuilder();
Director director = new Director(textbuilder);
director.Construct();
string result = textbuilder.Result;
Console.WriteLine(result);
} else if (args[0].Equals("html")) {
HTMLBuilder htmlbuilder = new HTMLBuilder();
Director director = new Director(htmlbuilder);
director.Construct();
string filename = htmlbuilder.Result;
Console.WriteLine(filename + "が作成されました。");
} else {
Usage();
return;
}
}
public static void Usage() {
Console.WriteLine("Usage: BuilderSample plain プレーンテキストで文書作成");
Console.WriteLine("Usage: BuilderSample html  HTMLファイルで文書作成");
}
}
}

Windows Server 2008 に SharePoint Server 2007 をインストールする際の注意点

Filed under: .NET Framework, ALL, IIS — Tags: , — citiszo @ 7:10 pm

デモ環境を作っていて確認したことですが、

WIndows Server 2008 の環境に SharePoint Server 2007 をそのまま、インストールしてもエラーが出てインストールできません。

これは、初期版の SharePoint Server 2007 が Windows Server 2008 に対応していないためです。

なので、インストールメディアの Updates フォルダ(更新プログラムを放り込むフォルダですね。)に SP1 を適用してから、インストールする必要があるとのことです。

また、テスト環境での確認であれば、MSDN サブスクリプションから、SP1 適用済みのメディアがダウンロードできますので、それを利用してもインストールすることはできます。

情報が公開されていても分かりづらいようなので、この場でご紹介させていただきました。

正式な情報は以下です。

Windows Server 2008 で Office SharePoint Server 2007 のスタンドアロン インストールを実行する

http://technet.microsoft.com/ja-jp/library/cc262177.aspx

November 28, 2008

ASP.NET AJAX – MVP Factor – Site Home – MSDN Blogs

NET AJAX . Rate This.

NET AJAX. Rate This. ferglo. 28 Nov 2008 1:58 PM. Comments 1. Esta vez quiero compartir con ustedes este excelente recurso, son 71 videos cortos que te llevan desde cero a crear los componentes de aplicación muy completa, pudes decargas …

More here:
ASP.NET AJAX – MVP Factor – Site Home – MSDN Blogs

November 25, 2008

Azure上でMembershipを利用する

Filed under: .NET Framework, ADO.NET, Asp.Net, MS SQL Server — Tags: , — citiszo @ 8:37 am

Cloudship: Membership Provider for the Cloud

ASP.NETに組み込まれているMembershipの各コントロールは、標準だとMembershipProviderを通してSQL Server上のデータベースに格納されているユーザ情報を利用するようになっています。
Azureではデータはクラウド上の専用のストレージに格納することになりますが、そこにユーザ情報を格納して利用できるようなMembershipProviderを作成する方法が例示されています。

この手のプロバイダは標準で提供されるようになるような気もしますが、知っておいて損はないかと。

#あれ、SDKに含まれるサンプルにMembership使ってるものなかったかな。。。

November 24, 2008

100 + 1 FREE photo/image galleries (AJAX, Flash, PHP) « Web-kreation

Filed under: ALL, Ajax, Javascript/Xhtml/Css, PHP — Tags: , , , , , , , — SixYo @ 6:03 am

This post is an attempt to collect all the major Flash/ AJAX /PHP photo galleries in jut one place. Most of them are entirely free of charge.

This post is an attempt to collect all the major Flash/AJAX/PHP photo galleries in jut one place. Most of them are entirely free of charge. Some, however, have some limitations to their free versions but is should not stop you from …

Continue reading here:
100 + 1 FREE photo/image galleries (AJAX, Flash, PHP) « Web-kreation

Seadragon AJAX and Deep Zoom – A Deep Zoom Blog – Site Home – MSDN …

It’s been a while since my last post, but that’s because I’ve been also helping out with the Seadragon AJAX release.

It’s been a while since my last post, but that’s because I’ve been also helping out with the Seadragon AJAX release. You have to check out what we did there. You can now browse single images in web browsers where Silverlight is either …

Read more from the original source:
Seadragon AJAX and Deep Zoom – A Deep Zoom Blog – Site Home – MSDN …

November 21, 2008

FactoryMethod ― インスタンス作成をサブクラスにまかせる

Filed under: .NET Framework, ADO.NET, ALL, C# — Tags: , , , , , — Sayuri @ 11:14 am

なお、当ソースは、Visual C# 2005 Express Editionで動作を確認しています。

Productクラス

using System;namespace Gushwell.DesignPatterns.Framework
{
public abstract class Product {
public abstract void Use();}
}

Factoryクラス

using System;namespace Gushwell.DesignPatterns.Framework
 {
public abstract class Factory {public Product Create(string owner)
{
Product p = CreateProduct(owner);RegisterProduct(p);return p;}
protected abstract Product CreateProduct(string owner);
protected abstract void RegisterProduct(Product product);
}
}

IDCardクラス

using System;
using Gushwell.DesignPatterns.Framework;
namespace Gushwell.DesignPatterns.IDCard {
public class IDCard : Product {
private string owner;public IDCard(string owner) {
Console.WriteLine(owner + "のカードを作ります。");
this.owner = owner;}
public override void Use() {
Console.WriteLine(owner + "のカードを使います。");
}public virtual string Owner {
get {
return owner; }
}
}
}

IDCardFactoryクラス

using System;
using System.Collections.Generic;
using Gushwell.DesignPatterns.Framework;
namespace Gushwell.DesignPatterns.IDCard {
public class IDCardFactory : Factory {
private List owners = new List();
protected override Product CreateProduct(string owner) {
return new IDCard(owner);}
protected override void RegisterProduct(Product product) {
owners.Add(((IDCard)product).Owner);}public virtual List Owners {
get {
return owners; }
}
}
}

Programクラス

using System;
using Gushwell.DesignPatterns.Framework;
using Gushwell.DesignPatterns.IDCard;
namespace Gushwell.DesignPatterns {
public class Program {
[STAThread]public static void Main(string[] args) {
Factory factory = new IDCardFactory();
Product card1 = factory.Create("結城浩");
Product card2 = factory.Create("とむら");
Product card3 = factory.Create("佐藤花子");
card1.Use();card2.Use();card3.Use();}
}
}

November 16, 2008

AbstractFactoryパターン -関連する部品を組み合わせて製品を作る

Filed under: C# — Tags: , , — Sayuri @ 7:19 pm

なお、当ソースは、Visual C# 2005 Express Editionで動作を確認しています。

Factoryクラス

using System;
namespace Gushwell.DesignPatterns.BaseFactory {
public abstract class Factory {
public static Factory GetFactory(string classname) {
Factory factory = null;
try {
factory = (Factory)Activator.CreateInstance(Type.GetType(classname));
} catch (System.TypeLoadException) {
Console.Error.WriteLine("クラス " + classname + " が見つかりません。");
} catch (System.Exception e) {
Console.Error.WriteLine(e.StackTrace);
}
return factory;
}
public abstract Link CreateLink(string caption, string url);
public abstract Tray CreateTray(string caption);
public abstract Page CreatePage(string title, string author);
}
}

Pageクラス

using System;
using System.Text;
using System.Collections.Generic;
using System.IO;
namespace Gushwell.DesignPatterns.BaseFactory {
public abstract class Page {
protected string title;
protected string author;
protected List content = new List();
public Page(string title, string author) {
this.title = title;
this.author = author;
}
public virtual void Add(Item item) {
content.Add(item);
}
public virtual void Output() {
try {
string filename = title + ".html";
StreamWriter writer = new StreamWriter(filename, false, Encoding.Default);
writer.Write(this.MakeHTML());
writer.Close();
Console.WriteLine(filename + " を作成しました。");
} catch (System.IO.IOException e) {
Console.Error.WriteLine(e.StackTrace);
}
}
public abstract string MakeHTML();
}
}

Trayクラス

using System;
using System.Collections.Generic;
namespace Gushwell.DesignPatterns.BaseFactory {
public abstract class Tray : Item {
protected List tray = new List();
public Tray(string caption)
: base(caption) {
}
public virtual void Add(Item item) {
tray.Add(item);
}
}
}

Itemクラス

using System;
namespace Gushwell.DesignPatterns.BaseFactory {
public abstract class Item {
protected string caption;
public Item(string caption) {
this.caption = caption;
}
public abstract string MakeHTML();
}
}

Linkクラス

using System;
namespace Gushwell.DesignPatterns.BaseFactory {
public abstract class Link : Item {
protected string url;
public Link(string caption, string url)
: base(caption) {
this.url = url;
}
}
}

Singletonパターン -たった1つのインスタンス

Filed under: .NET Framework — Tags: , , , , , — Sayuri @ 10:16 am

なお、当ソースは、Visual C# 2005 Express Editionで動作を確認しています。

Singletonクラス

using System;
namespace Gushwell.DesignPatterns {
public sealed class Singleton {
public static Singleton Instance {
get { return singleton; }
}
private static readonly Singleton singleton = new Singleton();
private Singleton() {
Console.WriteLine("インスタンスを生成しました。");
}
}
}

Programクラス

using System;
namespace Gushwell.DesignPatterns {
public class Program {
[STAThread]
public static void Main(System.String[] args) {
Console.WriteLine("Start.");
Singleton obj1 = Singleton.Instance;
Singleton obj2 = Singleton.Instance;
if (obj1 == obj2) {
Console.WriteLine("obj1とobj2は同じインスタンスです。");
} else {
Console.WriteLine("obj1とobj2は同じインスタンスではありません。");
}
Console.WriteLine("End.");
Console.ReadLine();
}
}
}

Older Posts »

このページの上部に戻る

Powered by WordPress