<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>設計</title><link>http://blogs.wankuma.com/nakamura/category/1890.aspx</link><description>主に PofEAA を扱います。</description><managingEditor>なかむら</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>なかむら</dc:creator><title>RIA+クラウドでの設計について妄想</title><link>http://blogs.wankuma.com/nakamura/archive/2010/06/03/189712.aspx</link><pubDate>Thu, 03 Jun 2010 20:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/nakamura/archive/2010/06/03/189712.aspx</guid><wfw:comment>http://blogs.wankuma.com/nakamura/comments/189712.aspx</wfw:comment><comments>http://blogs.wankuma.com/nakamura/archive/2010/06/03/189712.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nakamura/comments/commentRss/189712.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nakamura/services/trackbacks/189712.aspx</trackback:ping><description>&lt;p&gt;Silverlight ってサクサク動く。 かなり高速。&lt;/p&gt;&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/griefworker/20100603/ria_cloud_architecture" target="_blank"&gt;続きを読む&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nakamura/aggbug/189712.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>なかむら</dc:creator><title>テスト駆動開発でホワイトボックステストは必要？</title><link>http://blogs.wankuma.com/nakamura/archive/2009/10/07/181949.aspx</link><pubDate>Wed, 07 Oct 2009 14:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/nakamura/archive/2009/10/07/181949.aspx</guid><wfw:comment>http://blogs.wankuma.com/nakamura/comments/181949.aspx</wfw:comment><comments>http://blogs.wankuma.com/nakamura/archive/2009/10/07/181949.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nakamura/comments/commentRss/181949.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nakamura/services/trackbacks/181949.aspx</trackback:ping><description>&lt;p&gt;
仕事でテスト駆動開発(以下 TDD)を行っていますが、テストにホワイトボックステストが含まれているため、メソッドを修正したらテストも修正することが多いです。
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;a href="http://d.hatena.ne.jp/griefworker/20091007/whitebox_test" target="_blank"&gt;続きを読む&lt;/a&gt;
&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nakamura/aggbug/181949.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>なかむら</dc:creator><title>.NET 用のオープンソースのフレームワーク</title><link>http://blogs.wankuma.com/nakamura/archive/2008/10/05/158205.aspx</link><pubDate>Sun, 05 Oct 2008 18:54:00 GMT</pubDate><guid>http://blogs.wankuma.com/nakamura/archive/2008/10/05/158205.aspx</guid><wfw:comment>http://blogs.wankuma.com/nakamura/comments/158205.aspx</wfw:comment><comments>http://blogs.wankuma.com/nakamura/archive/2008/10/05/158205.aspx#Feedback</comments><slash:comments>39</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nakamura/comments/commentRss/158205.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nakamura/services/trackbacks/158205.aspx</trackback:ping><description>&lt;p&gt;フレームワーク設計の勉強のため、.NET 用のオープンソースのフレームワークを探してる最中です。見つけたものは次の通り。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://terasoluna.sourceforge.jp/" target="_blank"&gt;TERASOLNA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://s2container.net.seasar.org/ja/seasarnet.html" target="_blank"&gt;Seasar.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://spring-net.jp/" target="_blank"&gt;Spring.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hp.vector.co.jp/authors/VA027994/blanco/blanco.ja.html" target="_blank"&gt;blanco Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/entlib" target="_blank"&gt;Enterprise Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/CompositeWPF" target="_blank"&gt;Prism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sourceforge.jp/projects/benkei/" target="_blank"&gt;弁慶フレームワーク&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
情報を頂いた、非オープンソースのフレームワークも記載します。
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.unisys.co.jp/dotnet/tech.html"&gt;LUCINA.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jp.fujitsu.com/group/fks/services/eproad/"&gt;eProad&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;まだまだあるハズ。見つけたらこのエントリに追加していきます。&lt;/p&gt; &lt;p&gt;&lt;font color="#c0c0c0"&gt;「こんなものがあるよ！」って教えて頂けたら助かります＞＜&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nakamura/aggbug/158205.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>なかむら</dc:creator><title>テーブルデータゲートウェイ</title><link>http://blogs.wankuma.com/nakamura/archive/2008/08/15/153125.aspx</link><pubDate>Fri, 15 Aug 2008 15:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/nakamura/archive/2008/08/15/153125.aspx</guid><wfw:comment>http://blogs.wankuma.com/nakamura/comments/153125.aspx</wfw:comment><comments>http://blogs.wankuma.com/nakamura/archive/2008/08/15/153125.aspx#Feedback</comments><slash:comments>45</slash:comments><wfw:commentRss>http://blogs.wankuma.com/nakamura/comments/commentRss/153125.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/nakamura/services/trackbacks/153125.aspx</trackback:ping><description>&lt;h4&gt;ただ今 PofEAA の勉強中&lt;/h4&gt; &lt;p&gt;まずはテーブルデータゲートウェイに挑戦。つっこみ歓迎です。&lt;/p&gt;
&lt;h4&gt;テーブルデータゲートウェイって？&lt;/h4&gt; &lt;p&gt;「エンタープライズアプリケーションアーキテクチャパターン」によると&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;データベーステーブルに対して「ゲートウェイ」の役割を果たすオブジェクト。１つのインスタンスがテーブル内のすべての行を処理する。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;というもの。&lt;/p&gt; &lt;p&gt;開発者みんなが SQL に精通しているとは限らないから、テーブルやビューにアクセス（選択・挿入・更新・削除）するための SQL をテーブルデータゲートウェイがラップして、それらの機能をメソッドで提供する・・・と。&lt;/p&gt; &lt;p&gt;複雑なパターンではないので、サンプルコードを書いた方が理解しやすいかも。&lt;/p&gt;
&lt;h4&gt;例えばこんなテーブルがあります&lt;/h4&gt; &lt;h5&gt;items テーブル&lt;/h5&gt; &lt;table cellspacing="0" cellpadding="2" width="494" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="133"&gt;列名&lt;/td&gt; &lt;td valign="top" width="132"&gt;型&lt;/td&gt; &lt;td valign="top" width="227"&gt;説明など&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="133"&gt;id&lt;/td&gt; &lt;td valign="top" width="132"&gt;INTEGER&lt;/td&gt; &lt;td valign="top" width="227"&gt;主キー, UNSIGNED, AUTO INC&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="133"&gt;title&lt;/td&gt; &lt;td valign="top" width="132"&gt;VARCHAR&lt;/td&gt; &lt;td valign="top" width="227"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="133"&gt;description&lt;/td&gt; &lt;td valign="top" width="132"&gt;TEXT&lt;/td&gt; &lt;td valign="top" width="227"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;このテーブルにパターンを適用します&lt;/h4&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ba401b64-61f3-4c14-8605-ac00ea842254" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public class ItemsGateway
{
    public IDataReader Find(uint id)
    {
        using (DbConnection connection = CreateConnection())
        {
            connection.Open();
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = @"select * from items where id = ?id";
                AddInParameter(command, "?id", DbType.UInt32, id);
                return command.ExecuteReader();
            }
        }
    }

    public void Insert(string title, string description)
    {
        using (DbConnection connection = CreateConnection())
        {
            connection.Open();
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = @"insert into items (title, description) values (?title, ?description)";
                AddInParameter(command, "?title", DbType.String, title);
                AddInParameter(command, "?description", DbType.String, description);
                command.ExecuteNonQuery();
            }
        }
    }

    public void Update(uint id, string title, string description)
    {
        using (DbConnection connection = CreateConnection())
        {
            connection.Open();
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = @"update items set title = ?title, description = ?description where id = ?id";
                AddInParameter(command, "?id", DbType.UInt32, id);
                AddInParameter(command, "?title", DbType.String, title);
                AddInParameter(command, "?description", DbType.String, description);
                command.ExecuteNonQuery();
            }
        }
    }

    public void Delete(uint id)
    {
        using (DbConnection connection = CreateConnection())
        {
            connection.Open();
            using (DbCommand command = connection.CreateCommand())
            {
                command.CommandText = @"delete from items where id = ?id";
                AddInParameter(command, "?id", DbType.UInt32, id);
                command.ExecuteNonQuery();
            }
        }
    }

    private void AddInParameter(DbCommand command, string name, DbType type, object value)
    {
        DbParameter parameter = command.CreateParameter();
        parameter.DbType = type;
        parameter.ParameterName = name;
        parameter.Value = value;
        command.Parameters.Add(parameter);
    }

    // 接続文字列は環境に合わせて変更する必要アリ！！
    private const string CONNECTION_STRING = @"Persist Security Info=False;database=test;server=MySqlServer;user id=myUser;Password=myPass";

    private DbConnection CreateConnection()
    {
        return new MySqlConnection(CONNECTION_STRING);
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;これって・・・&lt;/h4&gt;
&lt;p&gt;普段データアクセスするクラスを作るときに使っている方法だ！「テーブルデータゲートウェイ」っていう名前が付いてたのかぁ。&lt;/p&gt;
&lt;p&gt;あと今回は id で絞り込む Find メソッドだけ書いたけど、実際にこのパターンを使う場合は、title で絞り込むものや description で絞り込むものなど、複数用意するほうが便利。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/nakamura/aggbug/153125.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>