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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MVP

MVP(Minimum Viable Product)とは、「必要最低限の機能を兼ね備えた製品」を指します。企画書などを完成させる前に、とりあえず製品を形にする方法です。プロトタイプなどで一旦アウトプットさせることにより、無駄なコストや時間を削減できます。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Java

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

Q&A

解決済

1回答

498閲覧

クライアントアプリケーションにおけるインメモリモデルインスタンスの管理手法について教えてください

koban

総合スコア12

MVP

MVP(Minimum Viable Product)とは、「必要最低限の機能を兼ね備えた製品」を指します。企画書などを完成させる前に、とりあえず製品を形にする方法です。プロトタイプなどで一旦アウトプットさせることにより、無駄なコストや時間を削減できます。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

Java

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

0グッド

2クリップ

投稿2018/04/25 12:39

編集2018/04/26 13:56

Java + swt で 簡単なSQLエディターデスクトップアプリケーションを作成しています。
ライブラリとしてGuice,EventBusを利用しています。

編集対象を、以下のClassで表現しています。

public class Target { public TargetKey key; public HeaderProperties headerProperties; public EditOptionProperties editOptionProperties; public SqlFileProperties sqlFileProperties; public String memo1; public String memo2; }

Target クラスはメモリ内に保持し、また複数保持する事を考えています。
(例えばタブごとにそれぞれのTargetを編集できるように)

上記のようなモデルをView + Controlerで参照する際、モデルインスタンスはどのように管理するのでしょうか?

よくあるWebアプリケーションはメモリ内にモデルのインスタンスを保持する考え方ではなく
controlerにServiceクラスを用意して、その都度、モデルを生成しているようなイメージです。

例えばスコープ毎にGuiceのAbstractModuleを継承した自作クラスを作成していく考え方であってるのであれば、Contorolerに参照させるモデルの粒度でまた迷っています。

自分なりに2つの考え方があり、どっちに舵を切って開発していくか迷ってます。

■考え方1
view controlerはなるべく利用するモデルの範囲を限定した方が良い。

public class OptionAndMemoEditDialogControler { final EditOptionProperties editOptionProperties; final String memo1; final String memo2; @Inject public OptionAndMemoEditDialogControler( EditOptionProperties editOptionProperties, @Named("memo1") memo1, @Named("memo2")String memo2) { this.editOptionProperties = editOptionProperties; this.memo1 = memo1; this.memo2 = memo2; }

■考え方2
どういったモデルの何のプロパティを扱うのかをわかるようにする

public class OptionAndMemoEditDialogControler { final EditOptionProperties editOptionProperties; final String memo1; final String memo2; @Inject public OptionAndMemoEditDialogControler(Target target) { super(); this.editOptionProperties = target.editOptionProperties; this.memo1 = target.memo1; this.memo2 = target.memo2; } }

考え方1では、controlerのコーディング・後からの変更はし易い分、どのモデルを注入するか
のコーディングが複雑になります。
考え方2では、controlerのコーディング・後からの変更が難しくなりそうな分、どのモデルを注入するかのコーディングはし易いです。

MVPやMVC等のアーキテクチャなど勉強しているのですが、controlerクラスにどのようにモデルを割り当てていくか良くわかりません。ご教授の程よろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

controlerへのモデルの代入粒度に関してはいまだに悩ましく思ってますが、
モデルインスタンスの管理について、下記OSSプロジェクトが求めていた考え方だと理解しました。

scope tree based Dependency Injection

https://github.com/stephanenicolas/toothpick

投稿2018/06/01 10:12

koban

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問