[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp/index.php?FrontPage]]

-[[戻る>SaaS設計のポイント]]

*目次 [#mbc7828c]
#contents

*概要 [#y7c0edfd]
[[OpenChangiExecEngine>https://github.com/NetDevInfraWGinOSSConsortium/OpenChangiExecEngine]]の開発で検討したこと。

*Tablet系 [#nbca81e3]
**専用端末化 [#ycea9e4e]
-Android/iOS両方で実現可能。
-ただし,OSバージョン縛りがあるので(特にAndroidは)要注意。

***Android [#o3c53495]
Android 5.0から追加された「画面の固定」機能を使えばアクティブなアプリを限定できる。

-Android 5.0(Lollipop)の機能紹介 :~
「画面の固定」を有効にすれば使えるアプリを一つに限定できる | juggly.cn~
http://juggly.cn/archives/131329.html

***iOS [#ffa619a1]
iOS6から追加された「Single App Mode」が使える。

-iOS6の最大の追加機能!? シングルアプリモードがすごい!~
http://matome.naver.jp/odai/2134814499673911401

*HTML系 [#kfbce0bf]

**オフライン [#le84b19c]
-オンライン環境でない場合に、オフラインで動作する方法を検討する。
-実装はHTML(HTML5)のWeb技術を使用する(スマホ・ネイティブ解らんので)。
-オフライン時にlocal-Storageに溜め込んでバッチ送信みたいなことを考えている。
-色々考え、処理系を切り替える必要があるので結構難しそうだと感じた。
-切り替えが面倒なので、一律、
--ローカルストレージに蓄積
--定期的な情報送信を行う。

>という方式が良いと考えた。

***チェック [#e0857895]
window.navigator.onLineでチェック可能。

-window.navigator.onLine - Web API インターフェイス | MDN~
https://developer.mozilla.org/ja/docs/Web/API/NavigatorOnLine/onLine

***[[ストレージ>HTML#l92a65cd]] [#l92a65cd]
ポピュラーな、Key-Valueの[[WebStorage>HTML#wb728540]]が良さそう。

**定期的な情報送信 [#y608fc90]
***[[バック・グラウンド処理>JavaScript#d6ac8bf9]] [#vd59a5ea]
setTimeoutやsetIntervalなどを用いることで実現できる。~
最新の「Web Workers」については、別に使用しなくていもイイかな。という感想。

***JSON処理 [#cbfea084]
-HTML側~
以下が参考になる。

--HTMLファイルからPOSTでJSONデータを送信する - Qiita~
http://qiita.com/kidatti/items/21cc5c5154dbbb1aa27f

-サーバー側(WCF)~
web.configの書き方が間違っていると動かないので注意。~
web.configの書き方は、下記のosscons.jpのマイクロソフト系技術情報 Wikiが参考になる。
--[[JSONを送受信するRESTサービスを作成する方法 - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?JSON%E3%82%92%E9%80%81%E5%8F%97%E4%BF%A1%E3%81%99%E3%82%8BREST%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95]]~

***成功と失敗 [#s0bd9e61]
-WebAPIの戻り値での判断は、二重登録の可能性があり、少々危険だと考える。
--トランザクションが成功した後にHTTPでエラーになると二重登録になる。
--HTTPで成功した後に、local-Storageのクリアに失敗した場合も、二重登録になる。

-上記の二重登録の問題を解決するために、レコードにIDを付与する。

--GUID
---長過ぎる。
---ライブラリが無い。

--店舗ID + 端末ID + 時間 ( yyyy/MM/dd HH:mm:ss SSS )
---店舗ID : ユーザアカウントから取得可能。
---端末ID : HTMLから取得する方法が無い。
---時間 : dateformat.jsを使用して取得可能。

**[[エフェクト>JavaScript#k0f136b5]] [#k0f136b5]

***[[効果音>JavaScript#cf0fca98]] [#cf0fca98]

***[[アニメーション>JavaScript#se421493]] [#se421493]

*スキーマ [#k2f8ea24]
マルチテナントを考慮したスキーマ設計

**マスタ・データ [#j2f66c9c]

***ユーザ情報 [#n884e7f5]

-企業テーブル
--&color(red){ID};
--企業情報
---・・・

-店舗テーブル
--&color(red){ID};
--&color(blue){分割キー(企業ID)};
--店舗情報
---・・・

-端末テーブル
--&color(red){ID};
--&color(blue){分割キー(企業ID)};
--店舗ID
--端末情報
---・・・

-ユーザ・テーブル
--&color(red){ID};
--ログイン・アカウント
---UID
---PWD~
DBには、[[SaltedPasswd>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Tools/Encryption/EncAndDecUtil/Form1.cs]]を保存する。

--ユーザ情報
---・・・

***画面表示情報 [#s3f64ef3]
画面の表示に必要になる情報。~
画面によって構造(スキーマ)が異なるので非構造化データに格納する。

-共通
--&color(red){ID};
--&color(blue){分割キー(企業ID)};
--画面ID(GUID)
--有効期限(履歴)
--画面タイトル
--追加の検索条件情報~
追加の検索条件情報として登録する、~
下記の非構造化データ(JSON)の~
値のキー情報を登録しておく。

--非構造化データ(JSON)~
例えば、

---メッセージ

---画像~
Uri、ID、キャプション

---ボタン~
画像、画像意味

-画像テーブル
--&color(red){ID};
--&color(blue){分割キー(企業ID)};
--店舗ID(オプション)
--端末ID(オプション)
--画像データ(バイナリ)

画面のテンプレートと、店舗ID・端末ID

**トランザクション・データ [#kd2388c7]

***結果 [#k208cb99]
-画面表示情報ID

-検索条件
--店舗ID
--端末ID
--日付
--ボタンID

-検索条件(追加)~
例えば、非構造化データ(JSON)中の、
--画像IDとか
--画像キャプションとか。

#DBMSスキーマ上にあれば、SQLの集計関数で集計が可能。

*画面 [#f2dcb4d0]
**コンテンツ画面 [#k28392bd]
[[HTML/CSS/JavaScript]]技術を中心に使用して開発する。

**カスタマイズ画面 [#kb755979]
-エンプラ寄りのWeb Forms技術を中心に使用して開発する。
-非構造化データ(JSONデータ)の編集処理の簡略化がキーポイント
--画面の自動生成も面倒なので、
--JSONの生データを編集する方式にする。

**条件検索画面 [#dd77a5e8]
エンプラ寄りのWeb Forms技術を中心に使用して開発する。

***条件検索と集計・グラフ表示機能 [#j429f1d0]
-通常の条件検索と集計・グラフ表示機能を実装する。
-グラフ表示は、[[ChartControl>https://techinfoofmicrosofttech.osscons.jp/index.php?plugin=related&page=Chart%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB]]を使用する。

***非構造化データの集計処理 [#aa15005d]
非構造化データ(JSONデータ)の集計処理の簡略化がキーポイント
-CSVエクスポートを行い、エクセルで集計できるようにする。
-JSONデータをフラットな二次元表に展開する。

*上記を踏まえた技術選定 [#x136456a]
Open棟梁はコミュニティ連携のため前提で(笑)。

**OS [#b1c9917b]
***Windows [#c4d33e36]
-特に、Linuxである必要を感じなかった。

**DBMS [#nbbf4879]
***PostgreSQL [#tb477489]
-スタートアップで人気。
-MosPで運用実績がある。

-データプロバイダ
--[[ADO.NETデータプロバイダ - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?ADO.NET%E3%83%87%E3%83%BC%E3%82%BF%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80]]
---[[PostgreSQL>https://techinfoofmicrosofttech.osscons.jp/index.php?ADO.NET%E3%83%87%E3%83%BC%E3%82%BF%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80#dad19e08]]

**WAS [#z59da5eb]
***IIS+ASP.NET [#w5d67b8c]
.NET開発基盤部会だけに。

**フレームワーク [#h7f39365]
***画面毎 [#kf6b5006]
-コンテンツ画面

--基本
---ASP.NET Web Forms ( [[HTML サーバー コントロール>https://msdn.microsoft.com/ja-jp/library/s37470tf.aspx]] )
---WCF ( DataContractJsonSerializer )
---Ajax( jQuery )
---ADO.NET.

--若しくは
---ASP.NET MVC
---ASP.NET Web API
---Ajax( jQuery )
---ADO.NET.

-その他の画面
--特徴
---エンプラチックな画面
---グラフ表示画面で[[ChartControl>https://techinfoofmicrosofttech.osscons.jp/index.php?plugin=related&page=Chart%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB]]を使用したい。
--フレームワーク
---ASP.NET Web Forms ( ASP.NET Web サーバー コントロール )
---ADO.NET.

-全体的に
--[[Entity Framework>https://techinfoofmicrosofttech.osscons.jp/index.php?Entity%20Framework]]は個人的に、パス。

***ASP.NET Web Forms [#u79bf4cb]
ASP.NET Web Formsを選択した。

-HTMLに準拠した実装がし易いように、[[HTML サーバー コントロール>https://msdn.microsoft.com/ja-jp/library/s37470tf.aspx]]を使用する。

-ASP.NET MVCであっても・なくても良かった。
--[[赤波線の件>GCEのSSDインスタンスで開発環境を作ってみた。#p8796459]]と、
--コントロールのキャプション置換がWeb Formsの方が楽だと思ったから。
--グラフ表示画面もあるので、[[ChartControl>https://techinfoofmicrosofttech.osscons.jp/index.php?plugin=related&page=Chart%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB]]を使いたいと思ったから。
--B・D層を別DLL化して、必要ならUIサブシステムだけMVCに切替えるのはアリだと思う。

***Ajax - REST ( JSON ) - WebAPI [#qa996927]
Web Formsだが、オフライン実装を考慮しPostBack無しのWebAPIで実装。

-フレームワーク
--Ajax ( jQuery )
--REST ( REST JSON )
--WebAPI ( WCF ( DataContractJsonSerializer ) )

***ADO.NET [#q7241937]
ADO.NETでイイと考えた。

-簡単なクエリのみ。
-一々、[[Entity Framework>https://techinfoofmicrosofttech.osscons.jp/index.php?Entity%20Framework]]使う程でもない。
-複雑なエンプラの方がハマらないのだっけ?
-あまりピンとこない、Beanを永続化するなら[[NoSQL]]でイイのでは。

**,etc. [#qa0009a2]


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS