質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

3452閲覧

オフラインアプリ用の設計モデルを探しています

UhhoUho

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2016/06/14 23:44

編集2016/06/15 00:52

###質問内容
WebアプリではMVCモデルなどの設計モデルがありますが、オフラインアプリ(業務アプリ等)用の設計モデルはないのでしょうか。
言葉を変え色々ネット検索しても出てくるのはWebアプリの設計モデルばかりです。

###背景事情

当方Webアプリしか作れないかけだしSEです。
現在構築しているオフライン業務アプリにて、MVCモデルで無理矢理設計していたのですが、オフラインアプリでBeansインスタンスを永続化させてセッションスコープ・アプリケーションスコープのように使うのは無意味だと指摘され、
じゃあフィールドの集まりのクラスはどう管理すればいいんだ、staticクラスとグローバル変数使って手続き型っぽく設計するしかないのかと思い、質問させていただきました。

###回答を受けての追記
皆様ありがとうございます。

MVCモデルにオンラインオフラインもないとのことですが、ではWebアプリにおいてセッションスコープ・アプリケーションスコープを使いインスタンスを他クラスにまたがせる処理はオフラインアプリではどうなるでしょうか。

1.オフラインアプリでも普通にシリアライズしちゃえばいいじゃん。
2.オフラインアプリはセッション管理が必要ない。よって別の手段がある。
3.オフラインアプリはセッション管理が必要ない。よってインスタンスを他クラスにまたがせないよう設計しろ。
4.その他

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daive

2016/06/15 01:02

追記をしていますが、掲示されていない事柄 たぶんVS20XXを使って、C#、JAVAだと思いますが、 C#のプロジェクトの種類を掲示してください。 質問者さんの、オフライン業務アプリ なるものの オフラインの定義、要件を示してみて下さい。
ozwk

2016/06/15 01:17

オフラインアプリにおける「セッション」ってどういうものを想定していますか?
UhhoUho

2016/06/15 03:20

ドヤ顔の前に質問文を読みなさい。 話の咀嚼が十分であることはベストアンサーが証明しております。
guest

回答4

0

GUIアーキテクチャ(いわゆるMV○系)

  • MVC
  • MVP
  • MVVM

アプリケーション全体のアーキテクチャ

  • 3層アーキテクチャ
  • オニオンアーキテクチャ
  • ヘキサゴナルアーキテクチャ
  • クリーンアーキテクチャ

などなど個人や団体が思い思いに提唱してます。


MVCモデルで無理矢理設計

MVCってオフラインもオンラインも関係ない概念なはずなので
オフラインに無理やり適用と感じている時点で何かがおかしいと思います。


  • アプリケーションスコープ

アプリ再起動時にデータを引き継ぐこと(要は永続化)に相当すると考えると
引き継ぐデータをDBやファイルに読み書きすることになります。
もちろんデータはシリアライズ/デシリアライズすることになります。

  • セッションスコープ

画面遷移するアプリや複数画面を持つアプリで
画面間でのデータ受け渡しに相当するとして、

「アプリケーション」に相当するクラスのインスタンスを
各画面が操作して、こいつ経由でデータを受け渡しする形になります。

こいつのインスタンスは誰が持つのかはそれこそ設計次第なのですが、
(各アーキテクチャもそこまで規定してない)
例えばメイン画面が生成して子画面のコンストラクタで渡すとか、
シングルトンにしてFooApplication.Defaultみたいな感じで取得するとかします。

投稿2016/06/14 23:56

編集2016/06/15 05:03
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

MVCはWebアプリ専用ってわけじゃないスよ。
Webアプリ? の開発経験に則った開発以外が想像しにくい
ってのがそちらの現状ってとこでしょうか。
要件定義やUMLなど一般的な開発に関する書籍なり
ネット情報なり集めて勉強するとして、
それより社内のやり方ってのはあるんじゃないスかね?
その辺を先輩や上司と率直に話してみてはいかがでしょうか。

投稿2016/06/15 00:02

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

自分は素人なので的外れだったらごめんなさい・・・

恐らく、MVCのようなアプリケーションモデルとデータ永続化の方法とは、全く異なるカテゴリーの問題なのにあたかもセットであるかのように捉えているので混乱されているのではありませんか?

MVCにも欠点が有って最近ではMVVMを採用するケースも多い様ですが、いずれにしてもオフラインアプリにだってMVCモデルを採用しているものもたくさんあると思います。

直接の回答としては、下記ページの説明がご参考になるのではないでしょうか?今まで見た解説の中ではかなり分かりやすい方だと思います。

雑把の UI アーキテクチャー史(MVCからMVVMへ)

そして上記に出て来るキーワードで検索すると、より具体的な情報(詳しい解説や実装例など)が見つけられると思います。

「Beansインスタンスを永続化させて・・・」の部分については、同じWebアプリだって採用するインフラに応じて実装方法が全く異なって来るはずです。ましてやローカルPC上で稼働するアプリであればこれまでの実装方法と異なるのは当然なので、「データ永続化」をキーワードに調べてみてください。

手始めに、下記のような解説にサラッと目を通すとイメージがつかみやすいかもしれません。
第8回 入力されたデータを保存する

以上、ご参考になれば幸いです。

投稿2016/06/15 00:55

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UhhoUho

2016/06/15 01:25

おそらくあなたは質問文を全部読んでくれたのだと思います。とても参考になりました、ありがとうございます。
guest

0

むしろ、ASP.netのセッションって、ネイティブアプリのように、非表示な情報をHttpの中に隠す目的でできてるので、フォームなりアプリなりに直接持ってればいいですよ。永続化も何もそのまま保持できるので、すごく書きやすいはずです。

投稿2016/06/15 00:25

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問