SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
保守性の高いアプリケー
ション設計について
株式会社SAKURUG
エンジニアリングユニット
草場 友光
.NET ラボ 2022年1月
自己紹介
• 普段は主にWebFormsアプリ
の保守のお仕事をしてます。
• 古めのシステムが多いので時
代に取り残されぬよう新しい技
術を一つでも入れるよう日々努
力しています。
• tomo_kusaba
宣伝
【VISION】ひとの可能性を開花させる企業であり続ける
VISIONに共感できる仲間募集中。
注意
• 個人の見解・解釈が多分に入っています。
• 見解の相違・事実誤認などありましたらご指摘ください。
• #dotnetlabでtweetすると右側に表示されます
今日の目的
• 注意)今回は最低ラインのところで考えています
• よりよいところを目指すためにはクリーンアーキテクチャなど
を参照してください
• アプリケーション保守目線で保守性のよいアプリケーションを
作るにはどのようなデータのやりとりをすべきか考える
• バッドノウハウを共有し誤りを繰り返さないようにする
主なトピック
• バッドノウハウ
• データオブジェクトの流れについて
• 命名規則について
バッドノウハウその1
• DBから取得された値が2次元配列に格納されている
• 画面(aspx)はその2次元配列を直接みてる。。。。
• 配列の何番目に何の項目が入ってるのか設計書もない!
• SQLのSELECT句の何番目はどのカラムかをひたすら確認する
不毛な作業!!
• SELECT句の途中に追加するのはダメ!絶対!
バッドノウハウその1図解
select col1,col2,col3,col4 from
table1 where …
col1_1 col2_1 col3_1 col4_1
col1_2
col1_3
col1_4 col4_4
A B C D
col4_1 col2_1 col1_1 col3_1
col4_2
col4_3
col4_4
配列
画面
実際には100カラム近く!
バッドノウハウその2
• DBから取得された値が2次元配列に格納されている(複数)
• ロジックで(aspx.cs)別の2次元配列に格納し直して画面に渡し
てる(一つ)
• ??その1より難読化が進んでないか??
その1,その2まとめ
• データをいれるのに配列を使うとその添字だけでデータを管理
しなくてはいけないのでとても人間でない。
• 何かの連続データ以外を配列に入れるのはやめよう
• Stream以外の可変長のデータも配列に入れるのはやめよう。
• →List<T>を使おう。
バッドノウハウその3
• DBアクセスメソッドの引数としてDictionary<string, string>
を使用
• 呼び出し元でKeyの設定が不十分だと例外発生!
• 保守開発時のみならず新規開発時でもこの作りすると大変だよ
ねえ。。。実行時にしか検出できなくて。
• SELECTのWhere句にあたる部分だけならまだしも、Insertだ
と大変!
• なぜ、全カラムをプロパティとするクラスを作らないのか
バッドノウハウその3続き
• Dictionary<string, string>のKey側にEnum.ToString()した
ものを設定する仕様??
• メソッドの中ではEnum.ToString()して読んでいるがそもそも
引数がstringなのだから同じ文字列を引数にしてあげれば
Enumいらない。
ノウハウ1
• DBのテーブルごとにテーブルを表すクラスを作る
• クラス名はテーブル名
• プレフィックスをつけておくと区別がつきやすい
• プロパティはカラム
カラム 型
1 col1 number(3)
2 col2 varchar2(10)
3 col3 date
public int col1 {get; set;}
public string col2 {get; set;}
public DateTime col3 {get; set;}
ノウハウ2
• 画面を表すクラスを作る
• クラス名は基本画面名(英語名)
• プレフィックスをつけておくとわかりやすい
• プロパティは画面項目に対応(英語名 or 日本語)
• 英語名称をつける場合は一貫性を保つために辞書を作るとよい
• 専門用語など英語名をつけるのが困難な場合日本語プロパティも考慮
• 日本語でプロパティを作っても使うときはVisualStudioのサジェス
トが効くのでどうということはない。
• むしろ、日本人にとってわかりやすい!
• とはいえ、S-JIS範囲程度にしておいた方が無難
ノウハウ3
• DBのテーブルを表すオブジェクトと画面を表すオブジェクト
を移し替えるポイントが大抵改修点になる
DB
値の移し替
え 画面
DBオ
ブジェ
クト
画面
オブ
ジェ
クト
データア
クセス
DBオ
ブジェ
クト
バッチも同じ
• バッチも考え方は全く同じ
値の移し替
え
DBオ
ブジェ
クト
出力オ
ブジェ
クト
オブジェ
クト化
入力オ
ブジェ
クト
入力
DB
出力
なぜこうするか?
• 変更の影響範囲を小さくしたい。
• 一つのオブジェクトの範囲を小さくしたい
• 画面の変更を下の層に持ち込ませたくない
画面
ロジック
データアクセス
データベース
変更頻度 大
変更頻度 小 変更難易度 大
変更難易度 小
効果
• たいていの場合ロジック部分までの改修で納まることが多い
画面
ロジック
データアクセス
データベース
変更頻度 大
変更頻度 小 変更難易度 大
変更難易度 小
効果2
• この図でいくとこの部分
DB
値の移し替
え 画面
DBオ
ブジェ
クト
画面
オブ
ジェ
クト
データア
クセス
DBオ
ブジェ
クト
ノウハウ4 命名規則について
• プロジェクトごと命名規則を作ろう!
• 日本語名⇔英語名の対比辞書を作る
• 同じものを表すオブジェクトは同じ名前で
• 似たような意味だけども違うものは違う名前で
名は体を表すように命名しよう
ノウハウ4その2
• メソッドの命名について
• プロジェクトで統一感を持たせる
例)
データベースレコードを選択するメソッド:Select[代表テーブル名][機能名]
データベースレコードを更新するメソッド:Update[代表テーブル名][機能名]
データベースレコードを挿入するメソッド:Insert[テーブル名]
データベースレコードを削除するメソッド:Delete[テーブル名]
命名で迷ったら
3章を読みましょう
よい本なので通読をおすすめします
おしまい
おしまい

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Azure Cloud Shell
Azure Cloud ShellAzure Cloud Shell
Azure Cloud Shell
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learn
 
Windows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデートWindows serverとインフラ関連アップデート
Windows serverとインフラ関連アップデート
 
Microsoft learnご紹介vol2
Microsoft learnご紹介vol2Microsoft learnご紹介vol2
Microsoft learnご紹介vol2
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
 
Azure Searchで作る検索サービス
Azure Searchで作る検索サービスAzure Searchで作る検索サービス
Azure Searchで作る検索サービス
 
Database tools for .NET Core
Database tools for .NET CoreDatabase tools for .NET Core
Database tools for .NET Core
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
 
新登場!Surface Laptop 4
新登場!Surface Laptop 4新登場!Surface Laptop 4
新登場!Surface Laptop 4
 
Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう! Docker on azure!進化していくcontainerを覗いてみよう!
Docker on azure!進化していくcontainerを覗いてみよう!
 
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
 
13-E-7 クラウドサービスとゲーミフィケーション: 「TwilioQuest 3」を用いた開発者オンボーディング
13-E-7 クラウドサービスとゲーミフィケーション: 「TwilioQuest 3」を用いた開発者オンボーディング13-E-7 クラウドサービスとゲーミフィケーション: 「TwilioQuest 3」を用いた開発者オンボーディング
13-E-7 クラウドサービスとゲーミフィケーション: 「TwilioQuest 3」を用いた開発者オンボーディング
 
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
 
TECH Streetますます機能拡充するPower Automate for desktopの概要と最新情報
TECH Streetますます機能拡充するPower Automate for desktopの概要と最新情報TECH Streetますます機能拡充するPower Automate for desktopの概要と最新情報
TECH Streetますます機能拡充するPower Automate for desktopの概要と最新情報
 
.NET開発者のためのMicrosoft Learn入門
.NET開発者のためのMicrosoft Learn入門.NET開発者のためのMicrosoft Learn入門
.NET開発者のためのMicrosoft Learn入門
 
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
[DO09] 獲れたて OSS x DevOps!自動化三昧を満喫セヨ
 
Xamarinでも有能な .NET Core
 Xamarinでも有能な .NET Core  Xamarinでも有能な .NET Core
Xamarinでも有能な .NET Core
 
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
 
これさえあれば大丈夫!Visual Studio Code 徹底解説
これさえあれば大丈夫!Visual Studio Code 徹底解説これさえあれば大丈夫!Visual Studio Code 徹底解説
これさえあれば大丈夫!Visual Studio Code 徹底解説
 
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
 

Ähnlich wie 保守性の高いアプリケーション設計について

楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
Rakuten Group, Inc.
 
第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料
Tae Yoshida
 
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
naoki ando
 

Ähnlich wie 保守性の高いアプリケーション設計について (20)

Web開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor AppWeb開発者が始める .NET MAUI Blazor App
Web開発者が始める .NET MAUI Blazor App
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
BlazorにSwaggerを導入してみよう
BlazorにSwaggerを導入してみようBlazorにSwaggerを導入してみよう
BlazorにSwaggerを導入してみよう
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
 
.NET6新機能の振り返り
.NET6新機能の振り返り.NET6新機能の振り返り
.NET6新機能の振り返り
 
浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621浪江町ハッカソンインプットセミナー20140621
浪江町ハッカソンインプットセミナー20140621
 
Web開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor AppWeb開発者にお勧め .NET MAUI Blazor App
Web開発者にお勧め .NET MAUI Blazor App
 
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
 
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
上司が信用できない会社の内部統制~第32回WebSig会議「便利さと、怖さと、心強さと〜戦う会社のための社内セキュリティ 2013年のスタンダードとは?!...
 
「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来
 
第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料
 
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
Microsoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめMicrosoft MVPとは?コミュニティ活動のすすめ
Microsoft MVPとは?コミュニティ活動のすすめ
 
20180920_【ヒカ☆ラボ】【データサイエンティストが教える 】 機械学習、人工知能を使った「ビジネスになる」アプリケーションの作り方
20180920_【ヒカ☆ラボ】【データサイエンティストが教える 】 機械学習、人工知能を使った「ビジネスになる」アプリケーションの作り方20180920_【ヒカ☆ラボ】【データサイエンティストが教える 】 機械学習、人工知能を使った「ビジネスになる」アプリケーションの作り方
20180920_【ヒカ☆ラボ】【データサイエンティストが教える 】 機械学習、人工知能を使った「ビジネスになる」アプリケーションの作り方
 
スカイアーチセミナー:[スカイアーチNTTCom共催セミナー]事例で学ぶ賢いクラウド活用法 ~コンテンツ配信編~(事例セッション):150522
スカイアーチセミナー:[スカイアーチNTTCom共催セミナー]事例で学ぶ賢いクラウド活用法 ~コンテンツ配信編~(事例セッション):150522スカイアーチセミナー:[スカイアーチNTTCom共催セミナー]事例で学ぶ賢いクラウド活用法 ~コンテンツ配信編~(事例セッション):150522
スカイアーチセミナー:[スカイアーチNTTCom共催セミナー]事例で学ぶ賢いクラウド活用法 ~コンテンツ配信編~(事例セッション):150522
 

Mehr von TomomitsuKusaba (7)

ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要ASP. NET Core 汎用ホスト概要
ASP. NET Core 汎用ホスト概要
 
NET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ APINET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ API
 
MuseLoid規格の音源自作について
MuseLoid規格の音源自作についてMuseLoid規格の音源自作について
MuseLoid規格の音源自作について
 
Entity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼうEntity Framework(Core)についての概要を学ぼう
Entity Framework(Core)についての概要を学ぼう
 
リモートワークで買ってよかったもの
リモートワークで買ってよかったものリモートワークで買ってよかったもの
リモートワークで買ってよかったもの
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
 

保守性の高いアプリケーション設計について