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

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

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

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

3283閲覧

ViewとController間におけるformとDTOの使い分け

HelloWorld2

総合スコア32

MVC

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

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2019/08/27 05:55

編集2019/08/27 05:56

わからないこと

  • formとDTOをどう使い分けるかのルール(あるべき論)について、特にViewとController周りがわかりません。
  • View⇒Controller(検索):form
  • View⇒Controller(登録・更新):form?(検索とは別のフォーム?)
  • View⇐Controller(検索結果):???

  • 1画面内に検索条件と、検索結果を表示する画面があり、検索結果を更新することができるとします。
  • 検索条件(V)→検索処理(C)→検索結果表示(V)→更新(C)という処理フローの場合、
案1 - 検索条件(V)→検索処理(C):Form① - 検索処理(C)→検索結果表示(V):Form② - 検索結果表示(V)→更新(C):Form②
案2 - 検索条件(V)→検索処理(C):Form① - 検索処理(C)→検索結果表示(V):DTO - 検索結果表示(V)→更新(C):Form②
案3 - 検索条件(V)→検索処理(C):Form① - 検索処理(C)→検索結果表示(V):DTO - 検索結果表示(V)→更新(C):DTO
案4 - 検索条件(V)→検索処理(C):Form① - 検索処理(C)→検索結果表示(V):Form① - 検索結果表示(V)→更新(C):Form①
案5 - 検索条件(V)→検索処理(C):Form① - 検索処理(C)→検索結果表示(V):DTO - 検索結果表示(V)→更新(C):Form①

どのような形が正しいのでしょうか?
よろしくお願いします。

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

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

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

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

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

m.ts10806

2019/08/27 05:58

質問者さんは「form」と「DTO」をどういう解釈でいるのでしょうか。 他人のアドバイス100%頼るのではなく自身が調べて理解した内容もご提示ください。 現場現場で解釈が違ってくる可能性もあるし前の質問 https://teratail.com/questions/207750 で「デザインパターンで調べて」とアドバイスしたけど、調べた感がほとんどないので。
HelloWorld2

2019/08/27 06:09 編集

formはViewとController間のやり取りで使用、DTOはControllerとServiceで使用するものと考えています。が、現場のソースを見ていると、検索結果をFormで返していたり、DTOで返していたり、バラバラでしたので、あるべき姿としてはどちらなのかと思った次第です。 前質問に関しては、順々に調べているところです。デザインパターンに関しては、パターンが多いため後回しにしています。
azuapricot

2019/08/27 06:09

画面から入力を受け取ってFormにつめる ↓ 必要な情報をDTOに格納してDB処理をする ↓ DAOなどでDB接続して処理完了、DTOに値をつめる ↓ DTOからFORMに値をつめる ↓ 画面にどーん(雑)
azuapricot

2019/08/27 06:10

現場のソースがあるなら現場が正です。 正しいからと言って現場のソースと全く違う感じでコーディングすると一貫性がなくなって逆にやりにくくなります。 どうやってるんですか?って上司にたずねてみては?
azuapricot

2019/08/27 06:11

(現場の中でもバラバラな場合もよくあるからどれに合わせればいいんですかねぇっていうのも上司に尋ねてみて知らんわって言われたら正しいようにコーディングしたらよいかと)
m.ts10806

2019/08/27 06:13 編集

>デザインパターンに関しては、パターンが多いため後回しにしています。 デザインパターンを後回しにしてできる質問ではありません。 それに多いということはそれだけ”基本的な”考え方があるということ。自由に組むことができる以上、完全なベストプラクティスを求めるのは土台無理な話。 「現場で採用しているやり方に合わせる」以上の答えはできません。
m.ts10806

2019/08/27 06:15

例えベストプラクティスがあったとして、 現場でのやり方があるにも関わらず「俺が決めたさいきょうのルールを押し通すような人」にしかならないので。
HelloWorld2

2019/08/27 06:20

azuapricotさん、ご回答ありがとうございます。 基本は、V⇔Cのやり取りにはForm、C⇔Mのやり取りにはDTOなのですね。 ここで質問する前に上司には相談したのですが、どっちでも良いと言われたので、あるべき形で実装しようとしました。 ちなみに、FormにDTO自体をプロパティとして持つのはどうなんでしょう?
m.ts10806

2019/08/27 06:24

スルーされてそうですけど 大抵の現場はいずれか、または複数のデザインパターンを組み合わせたものから派生した亜種と思っていいので、デザインパターンを後回しにするということは基本を疎かにするということとイコールになります。 基本を疎かにする人は現場では使えません。
HelloWorld2

2019/08/27 06:24

m.ts10806 さん おっしゃることはわかります、が、一朝一夕ですべて理解できるものではないのも事実だと思っています。 ので、せめてどのパターンを参照すべきか、だけでもご教示いただけないでしょうか?
azuapricot

2019/08/27 06:27

FormにDTOを持つ必要があるなら持っておいてもいいんじゃないかなーとは思います。 場合によりけり。
HelloWorld2

2019/08/27 06:28

azuapricot さん なるほど、間違いではないのですね。 ありがとうございます!
azuapricot

2019/08/27 06:29

まぁ先程も言いましたが「現場による」ので、作ってみて上司にこんな感じで問題ないですか?と聞いて「OK」と言われればその現場では問題ないでしょう。
m.ts10806

2019/08/27 06:30

>せめてどのパターンを参照すべきか、だけでもご教示いただけないでしょうか? ベストプラクティスは、ない。ですね。 私も現場で育った人間で、何百とこなしてきたわけではないから「現場現場に合うパターンがある」くらいしか言えません。「間違いはない」けど「正解はない」世界です。(要件を満たすことが第一なので) だからそんなに急ぐのでしたら現場で使われているデザインパターンを聞いてください、としか。 書籍もたくさん出ているのでどれかには当てはまるでしょう。
azuapricot

2019/08/27 06:31

(ただ本当に正しいやり方を貫き通したい!というのであれば、m.ts10806さんのおっしゃるようにデザインパターンをマスターするのがよいですね。)
HelloWorld2

2019/08/27 06:40

m.ts10806 さん なるほど、私の最初の認識が誤っていました。 サービスクラスでformを使用しないように、この質問には単一の絶対正解があると思っていましたが、まずその前提がおかしかったのだと気づきました。 その正解を自分で考えるための武器=デザインパターンなのですね。 デザインパターン学ぼうと思います。 ご回答ありがとうございました。
HelloWorld2

2019/08/27 06:40

azuapricot さん 承知しました。 デザインパターンを学びます! ご回答ありがとうございました。
HelloWorld2

2019/08/27 06:41

(べ、ベストアンサーをお付けしたく・・・)
azuapricot

2019/08/27 06:44

回答がないけど追記でかいけつした場合は自己解決(最終解決方法明記のうえ)&参考になった人へのお礼の言葉で締めて良いと思いますよ~
m.ts10806

2019/08/27 06:45

ここはコメントのやり取りを通して自身が感じたこと学んだことを自身でまとめて書かれたほうが 自身のためにもなりますし、同じような疑問を持った人のためになると思います(下手に回答者側の視点が入らないほうがいい)
guest

回答1

0

自己解決

azuapricotさんの追記と、現場のソースの実装から、
「V⇔Cのやり取りにはForm、C⇔Mのやり取りにはDTO」をベースとし、
FormにDTOのプロパティを持つパターンも考慮しつつ実装します。
一旦、上記を持って解決とし、デザインパターンを学習することで、
その現場なりの正解を考えられるようにします。
azuapricotさん、m.ts10806さん、ご回答ありがとうございました。

投稿2019/08/27 06:50

HelloWorld2

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問