じょーログ(C#,Xamarin,Unity)

主はC#,Xamarin,Unity、後は思った事を綴る

MVCのHTMLヘルパーでえらい悩んだ

VisualStudio2013 Update5を使用している。


プロジェクト構成としては、

xxx.Infrastructure(クラスライブラリプロジェクト)
xxx.Web(MVCプロジェクト)

xxx.Infrastructureには拡張メソッド群がある。
今回の例ではこちら。

        public static HtmlString Button(this HtmlHelper helper,
                                     string innerHtml,
                                     object htmlAttributes)
        {
            return Button(helper, innerHtml,
                          HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
            );
        }

xxx.Webではxxx.Infrastructureを参照設定しているにも関わらず、@Htmlを押しても
独自で追加した拡張メソッドが表示されない。意味不明。

解決方法としては、


xxx.Infrastructure
xxx.Web

プロジェクトを再読み込みしたらインテリセンスが出た。
意味不明だ。

ASP.net MVCでPostパラメーターの扱いについて(これクラス爆発するんじゃないの?)

Actorってあるけど、これは実際はブラウザなんだけども。

 

f:id:jo_0518:20160119014149p:plain

上の図で、Controllerに対してPostのリクエストを行ったとする。

 

この時、Postとして渡した値(TextBoxのTextとかCheckBoxのCheckedとか)をControllerのパラーメーターとしてバインドすることをどの書籍を見てもモデルバインドと記述してある。

このモデルバインドって上の図のBussinessLogicでごにょごにょ(DBアクセスして加工)とかした後、結果として収める箱がモデルではないのだろうか?

で、その箱をControllerに返却して、ControllerはViewに渡してViewはModelに基づいて結果を表示する。という流れだと思う。

 

ここで1つ問題がある。

 

せっかく番号を振ったので番号でいうが、「1」と「3」で使用するModelがどの書籍を見ても同一 なんだが。。。

 

これ俺の理解が遠く及ばないだけなのだろうか。

 

普通に「1」と「3」で違うケースがあると思うのだが。

(「3」では作成日時を扱うが、「1」では作成日時を絞りこむためにFromとToの範囲検索できるものがあるとか・・・この時点で「1」にはFromDateとToDateが必要なはず)

 

そこで、脊髄反射的に思いついたのは、「1」と「3」で扱うクラスを別にする。

これをすることで要件を満たせると思う(未検証)が、これってWebアプリの中でよくあるシチュエーションだと思うのだけど、みんなどのように対応しているんだろう。

.NetでのO/Rマッピングについて 型無しDataSetについて

そもそもO/Rマッピングってなんだってことだけども、

要約するとDBの項目と.netのオブジェクトをマッピングすること。
.netが持っている型とDBが持っている型をあわせよー!みたいな発想を偉い人がした。
これ毎度するのだるくね。。。機械的にしちゃおーぜ!
って事で昔から行われてきた。

で、めんどくさいことにそのO/Rマッピングについて、.netではバージョンアップするにつれて色々方法が変わってきた。

.Net1.1時代ではまずDataSetという概念が出てきた。
DataSetは.net上で扱うデータベースとイメージするとわかりやすい。
保存方法としては、DBはハードディスクに対し、DataSetはメモリ上に展開される。

Datasetの中にはTablesというプロパティがある。
TablesにはDataTableの配列が含まれており、これはDB上でのテーブルに該当する。
またTablesという事でテーブル群の取得となるため、指定したテーブルを取得するにはDataSet.Tables[0]といった形で取得する。
取得できる型はDataTable型。

次にTableの中にはRowsがある。これもTablesと同様であり、DataSet.Tables[0].Rows[0]という形で取得することができる。
取得できる型はDataRow型。

最後に、行を特定したので列を指定すれば目的の値を取得できるわけだが、方法としては、Rows[0]["Coulum1"]と文字列指定かRows[0][0]のIndex指定で値を取得できる。
取得した値の型は一律String型となる。

見るからにだるいね。

そこで型ありDataSetってのが.net2.0から出てきた。
かるーく説明すると、、、


SampleDataTable
SampleDataRow

いきなり変なのが出てきたけど、上記が型ありDataSetと呼ばれているもの。
SampleDataTableはDataTableを継承し、SampleDataRowはDataRowを継承してる。

すると値を取得しようとした時、SampleDataRow.Sampleみたいな感じで値を取得することができる。
しかも、取得した値の型はDB定義した際の方と同じである。

そもそも、
SampleDataTable
SampleDataRow
をどうやって作るの?って話なんだけども、それはまた長くなるので機会があるときに説明するかなぁ。

SVNとGitってどっちがいいんだろう。

久しぶりの更新だ。社内から更新できるようになったからこれからどんどん更新できれば良いと思う。

 

で、本題。

 

社内のソース管理ツールとして、SubversionとGitが主に使用されているツールだとは思う。

今まで長くこの業界で仕事をしてきているが、数年前は圧倒的にSubversionが多かったような気がする。

(僕は.netの開発者だからその他の環境では全然違うかも知れない。)

 

SubVesionのクライアントツールでよく使われているツールとして、TortoiseSVNが有名ではある、今の職場でも採用している。

 

感覚ベースの話にはなるけど、今ホットなのは圧倒的にGitなんだろうなぁ

何をするにもGitGitって感じがする。自宅で適当なアプリを作る際にソース管理周りを調べるとGitホスティングサービス!てのをGoogle先生で多くを見た。

そして、採用した。

一番有名なのはGitHubよね。

で、使用しているホスティングサービスは、BitBucketです。

プライベートリポジトリの作成と5人までの並行開発が無料でできる!ってことで採用。

 

そういえば、GitHubでプライベートリポジトリ使用する場合はお金がかかるんだった。

 

Gitの魅力ってなんなんだろうか?

ホスティングサービスの魅力が偉大すぎてそれに伴いGIT!GIT!みたいなノリになっている?

ホスティングサービスではなく純粋なソース管理と見た場合、Subversionにはない大きなメリットってあるのかな?

XPからPCを使い出したUI大好きマンである僕にはイマイチぴんと来ない。

 

謎は深まる。これからGitを触っていく機会はおのずと増えていくだろうから

その違いを意識したいとおもふ。

xamarinとmvvmcross FindViewByIdの結果がキャストとジェネリックで違う理由がわからん

タイトルの通り

 

環境

xamarin4.2

Android

後なにかいるっけ?

 

初めにやりたいことはMvxListViewで行ごとに配置されるラジオボタンのグループ化を行いたいということ。

 

同じ行内にある2つのラジオボタンのグループ化はRadioGroupを用いれば容易だった。

しかし、行ごとに違うRadioボタンのGroup化の方法がわからなかった。

そこでxxxxView.cs内でMvxListViewをFindViewByIdしてそこでごにょごにょしようと思った。

 

しかし、

 

1,

 var listView = (MvxListView)FindViewById(Resource.Id.listView);

2,

 var listView = FindViewById<MvxListView>(Resource.Id.listView);

 

で結果が違う。

1だとMvxListViewがとれるけど2だと取れん。

なぜかわからん。

知っているかたいたら誰か教えてくんろ~