- 1. RESTful 型設計 vs RPC 型設計
- 2. JSON vs XML
{"result":"Hello World Nobuyuki"}
簡単なデータならよいが、
日付型や byte[] 型などの
扱いは面倒
- 2. JSON vs XML
string apiUrl = "http://decode2015webapi.azurewebsites.net/BizB/ListAuthors/GetAllAuthors";
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("text/xml"));
HttpResponseMessage response = await httpClient.GetAsync(apiUrl);
string responseString = await response.Content.ReadAsStringAsync();
C#
- WCF vs ASP.NET Web API
WCF ASP.NET Web API
API 設計スタイル RPC 型のみ 自由
( RPC 型、 RESTful 型など)
メッセージフォー
マット SOAP のみ 自由
( XML 、 JSON など)
通信プロトコル 自由
( HTTP 、 TCP/IP など) HTTP のみ
- WCF vs ASP.NET Web API
Web サーバ
業務データDB サーバ クライアント
ツールベースの開発
通信手法 サービス参照
(プロキシクラス) SOAP (または WCF *.asmx ) スクラッチでの開発 HttpClient XML または
JSON ASP.NET Web API
要
設計
- ASP.NET Web API + EF で開発する場合のテクニック
本日のランチセッションにて開催!
1. WinRT と Xamarin.Forms XAML の主な相違点
2. ASP.NET Web API + EF の開発テクニック
-レイアウト部品の名称の違い
Xamarin.Forms WinRT
積み重ね StackLayout StackPanel
絶対座標 AbsoluteLayout Canvas
格子状 GridLayout Grid
相対座標 RelativeLayout (なし)
スクロール ScrollView ScrollViewer
枠線 Frame Border
サイズフィット (なし) Viewbox
- StackLayout の活用テクニック
Xamarin.Forms XAML
<ContentPage ...>
<StackLayout>
<Frame OutlineColor="Accent"> ... </Frame>
<ScrollView Orientation="Vertical" VerticalOptions="FillAndExpand">
<StackLayout>
... (表示する内容) ...
</StackLayout>
</ScrollView>
<Button x:Name="btnUpdate" Text="更新" BorderWidth="2" />
<Button x:Name="btnGoBack" Text="前の画面に戻る" BorderWidth="2" />
</StackLayout>
</ContentPage>
FillAndExpand
余白いっぱいに
引き伸ばす
- UI 部品の名前の違い
Xamarin.Forms WinRT の場合は...
ActivityIndicator ProgressRing BoxView Rectangle
Button Button
DatePicker DatePicker
Editor TextBox
Entry TextBox
Image Image
Label TextBlock
ListView ListView
Xamarin.Forms WinRT の場合は...
Map BingMaps
Picker ComboBox
ProgressBar ProgressBar
Slider Slider
Switch ToggleButton TimePicker TimePicker WebView WebView
- CheckBox
- GridView
-主要プロパティの名前の違い
WinRT Xamarin.Forms
余白制御 Margin Padding
位置制御 VerticalAlignment/HorizontalAlignment VerticalOptions/HorizontalOptions
前景色 Foreground TextColor など
背景色 Background BackgroundColor/BackgroundImage など
データバインド DataContext BindingContext
- データアノテーションを利用した単体入力エラーチェック
[DataContract]
public class FindAuthorRequestDTO {
[DataMember]
[Required]
[RegularExpression(@"^[0-9]{3}-[0-9]{2}-[0-9]{4}$")]
public string AuthorId { get; set; } }
C#
[HttpPost]
public AuthorDetailDTO
FindAuthor(FindAuthorRequestDTO request) {
if (ModelState.IsValid == false) throw new
HttpResponseException(HttpStatusCode.BadRe quest);
....
}
C#
- EF エンティティデータモデルのシリアル化
- EF エンティティデータモデルのシリアル化
public string Property(EdmProperty edmProperty) {
return string.Format(...,
"[System.Runtime.Serialization.DataMember]¥r¥n{0} {1} {2} {{ {3}get; {4}set; }}", ...);
}
public string NavigationProperty(NavigationProperty navProp) {
...
return string.Format( ..,
"[System.Runtime.Serialization.DataMember]¥r¥n{0} {1} {2} {{ {3}get; {4}set; }}", ...);
}
public string EntityClassOpening(EntityType entity) {
return string.Format(...,
"[System.Runtime.Serialization.DataContract(IsReference = true)]¥r¥n {0} {1}partial class {2}{3}", ...);
}
Pubs.tt
i. ii.
iii.
- 3 種類の POCO オブジェクトの使い分け
DAC
データベース
*.edmx
SI + BC
ASP.NET Web API API Controller
POCO
(エンティティ)
BEC
ADO.NET Entity Framework POCO
(DTO)
BEC SA
HttpClient
BC
サーバ呼び出し ロジック Xamarin
.Forms
*.xaml
*.xaml.cs コードビハインド
POCO
(ViewModel)
UI
- 3 種類の POCO オブジェクトの使い分け
ViewModel DTO エンティティモデル
内容 • 双方向データバインドの実装に利用する • データの転送に利用する
• 上り電文と下り電文とで別の DTO が利用 される
• Entity Framework によるデータベースから のデータ取得に利用する
特徴 • UI に併せて最適化されて定義される
• 入力で期待するデータの型と、POCO 上に 定義されるデータ型がずれることがある
• データ入力チェックのために、データアノ テーションが利用される
• エラー検証などのために、特定の基底クラ スから派生して作られることが多い
• シリアル化のために、[DataContract] 属性 が利用される
• サーバ側でのデータ入力チェックのために、
データアノテーションが利用される
• データベース構造に併せて定義される
• 遅延ローディング機能などを有効にするた めに、多くのプロパティが virtual 定義され ている
• EF から読み取ったデータはそのままではシ リアル化できない
• データベースからリバースして作った場合 には、データアノテーション定義がない
データ構造 UI に最適化 通信に最適化 DB 構造に最適化
データアノ テーション
○ (UIに最適化) ○ (上り電文のみ) △ (DB構造に最適化)
シリアル化 × (不要なことが多い) ○ (必須) × (既定ではシリアル化不可)