FC2ブログ
Null伝搬演算ってのが実装されるのね
時期バージョンのC#ではいろいろと機能が追加されるのね。
ttp://blog.xin9le.net/entry/2014/07/06/230847
こちらの方の纏めが素晴らしいです。

とりあえずネタがないので、Null伝搬演算を今の実装で再現するとこんなかんじじゃね?という事で書いてみる。
ジェネリック+拡張メソッドを使って、似たようなことをやってるだけ。
すごい単純で、自身がNULLだったら戻り値を返さないと駄目なので、defaultを使って初期値を返す。
自身がNULL以外なら、匿名メソッドを呼び出す。これだけ。

public
 static class NullObjectExtension
{
    public static TResult _<TSrouce, TResult>(this TSrouce self, Func<TSrouce, TResult> func)
    {
        return self == null ? default(TResult) : func(self);
    }
}

public class Test
{
    public string Name { getset; }

    public int? Num { getset; }

    public Test()
    {
        Name = "('A`)";
        Num = 1;
    }

    public static void NullTest()
    {
        var obj = new Test();

        var j1 = obj._(m => m.Num) ?? 0;
        var k1 = obj._(m => m.Name) ?? "うぇうぇ";

        obj = null;
        var j2 = obj._(m => m.Num) ?? 0;
        var k2 = obj._(m => m.Name) ?? "うぇうぇ";
    }
}
スポンサーサイト
プログラム関係
なんとなく思ったことを…

正直、アプリケーションの開発モデルとかあまり勉強してない、というか独学なので適当です。
個人の性格的に動けばいいじゃんって考えがすごい強いな。まぁ、あとあと困らない程度に
綺麗に設計はしてるつもりですよwwww


・ビジネスロジックはどこで実装すべきか
 よくある、WEBアプリ開発での話で、RDBSとアプリ側?という単純に2つに絞った場合ね。
 ※アプリ側ではMVCだの、MVVMだのと色々あるけど、ここではその話はなしで('A`)y~~~

 RDBSではストアドプロシージャだったり、ビューで複雑な処理が実装できたりする。
 個人的にこれってすごく便利だと思うのよ。アプリ側の人間がクエリを知らなくても、関数を呼び出す感じで
 実行結果を受け取る事が出来る。たぶん、実行結果の取得までも早いだろうし。
 ※クエリの組み方次第だろうが…
 それとアプリが得意な人とRDBSが得意な人で担当者を分けることもできるし。

 でも、アクセス数が少ない時はいいが、アクセスが激しく増えてきた時って厄介だなと思う。
 ビジネスロジックがDBに集中してるわけだから、そこに負荷がすごいかかる。
 ※レプリケーションとかでDBを分散すればいいじゃないかという考えもあるが…。安いDBだったらいいよねー。
  でも、高価なRDBSだったら('A`)

 ってな事を考えると、ビジネスロジックはアプリ側で実装したほうがいいんだろうな。
 んで、RDBSはデータストア的な位置づけで使うと。でも、それだともったいないなぁと思うところもある。

 かといって、アプリとRDBSの両方にビジネスロジックを書くと、仕様変更などで処理を変更したい時に、あっちこっちに、散らばったビジネスロジックを修正するのは骨が折れるだろうし…。
 ※このあたりも設計次第だとは思うが('A`)それでも煩雑だなと思う

 自分的には、動けばいいんじゃね?となるのだが、大人数の開発になったらそんなこと言ってられないんだろうなと思ってみる。大人数の開発なんてしたことねーから知らねーけど。
IIS6.0 のASP でレコードセット内容の出力が途中で止まる
あるテーブルの内容をADOで取得し、その内容をを1行1行 Response.Write で出力するコードを書いたわけだ。

コンテンツタイプには application/force-download を設定し、
バッファリングを Response.Buffer = false でやってた。

まぁ、行数が少ないときは問題なかったわけだが、とあるテーブルの内容が10万件以上という量になった。
これを出力しようとするとダウンロードが途中で止まるプラス、メモリを馬鹿食いするという事が
発生した。

どうも、 Response.Write でちまちま出力していると挙動があやしくなるらしい。処理が途中で止まる
のでメモリも解放されないという…。
ちなみに、 Response.Buffer = true でやっても同じ。ある程度バッファに溜めてフラッシュしても
同じ現象が発生した。

んで、仕方がないので一度ファイルに落とし、ファイル化した結果を Response.WriteBinary で出力する
ことにした。こっちは大成功。
Visual Studio 2005 + Windows SDK for Windows 7 and .NET Framework 3.5 SP1
タイトルの組み合わせで、今まで作った DirectShow のフィルタをコンパイルしてみた。

そしたら激しくエラーが出る…。んで、基底ライブラリ(baseclasses)のソースを確認したら以前のライブラリと違う箇所が見つかった。

schedule.h

このヘッダーだ…。このファイルは以前、次のようなファイル名だった。

dsschedule.h

んで、プラットフォームSDKのインクルードファイルを調べてみると、 schedule.h というファイルがすでに存在していることが分かった。
これが原因だ。最初にプラットフォームSDKのこのファイルをインクルードするからおかしくなるんだ。んで、仕方ないので、ファイル名を dsschedule.h に変更してコンパイルしたら動いたというわけだ。

やれやれだぜ…

            / ̄ ̄ ̄\
          /─    ─  \
         / (●)  (●)   \    
        |   (__人__)      |      
        \   ` ⌒´     /
       ▼/ ̄      ̄ ̄)____
     〃(⊥) ´/    / ̄/ /   〃 ⌒i
  __i /⌒\./    /   し' __|;;;;;;;;;;i


と、これで解決だとおもったら、uuid.libのデバッグ情報が破損してるとか出てきた。何これ…。ちゃんとコンパイラも新しいものを使うようにパスを通したのに…

2005との組み合わせは面倒っぽいのかな?
Visual Studio 2005 の初期化命令
Visual Studio 2005 の初期化命令

devenv /resetuserdata

Windows SDK for Windows 7 and .NET Framework 3.5 SP1 のSDKをいれてVisual Studio の環境設定ツールをつかったらまともにコンパイルが通らなくなった…

色々と変更が多そうなので一度初期の状態に戻すときに使ったわけだ。

     ____
   /      \ ( ;;;;(
  /  _ノ  ヽ__\) ;;;;)
/    (─)  (─ /;;/
|       (__人__) l;;,´ むうう…
/      ∩ ノ)━・'/
(  \ / _ノ´.|  |
.\  "  /__|  |
  \ /___ /
TOP
プロフィール

hssamurai

Author:hssamurai
FC2ブログへようこそ!

最新記事
最新コメント

最新トラックバック

月別アーカイブ
カテゴリ