web-dev-qa-db-ja.com

MVCパターンのどこで日付のフォーマットを行う必要がありますか?

(現在選択されているインターフェイス言語に応じて)カスタム日付形式を処理する必要のあるWebアプリケーションでユーザーリストを表示するとします。

日付形式を適用する場所はいくつか考えられます。どちらを使用しますか、そしてその理由は?

  • モデルでは、たとえば、日付フィールドに対してDATE_FORMAT(user.birthdate, '%d/%m/%Y')を実行します(MySQL DBがあるとします)。

  • たとえば、コントローラーレベルでは(PHPを使用するとします):

    $users = UserModel::getUsers();
    // loops through results before display to format dates.
    // in the $users structure, we have to know which fields are dates or not
    $users = MagicFunctionFormattingDates($users);
    
    $view = new View('someTemplate');
    $view->assign('users', $users);
    
  • たとえば、ビューレベルでは(Smartyなどのテンプレート言語を使用するとします):

    {foreach key=keyitem item=row from=$users}
      <tr>
      {foreach key=keyfield item=field from=$row.fields}
         {* Here $field should be an Object or associative array
            holding its 'type' (is it a date or something else) *}
         <td>{MagicFunctionForFormatting field=$field}</td>
      {/foreach}
      </tr>
    {/endforeach}
    

同様の関連する質問は、日付を調停する場合にも当てはまります(ユーザー登録フォームなど)。日付変換はどこで行うべきですか:

  • モデルを呼び出す前に、フォームを処理および検証するコントローラーで?

  • モデルでは?

6
Frosty Z

2つのことを提案します。

  1. モデルは、データベースI/Oが発生する場所です。その場合、データベースに出入りするすべてのものを事前定義されたフォームにする必要があります。これは「中立」形式であり、常に一貫している必要のある他のすべてのものに対する定義されたインターフェースです。

  2. 1をクリアすると、別の場所で変換を行うことができます。他の場所はデザイン次第です。

しかし、これについてもう少し考えてみると、日付の形式が変わったとしましょう。さらに、ユーザーの好みに応じて日付形式を表示できるようにするとします。

その場合、2つの選択肢があるように見えます。

  1. モデル:インターフェースはユーザーが好む形式です。または

  2. モデル:インターフェースは常に中立的な形式です。その場合、VIEWはおそらく、ユーザーが見る方法との間で変換する場所でなければなりません。

オプション2の場合、これはコントローラーが常にニュートラルフォーマットで機能することもできることを意味します。つまり、その中のコーディング機能/操作は、変更ややり直しが容易である、またはその傾向が少ない可能性があります。

ただし、これはすべて、達成しようとしていることに依存します。


これらすべてについての私の最後の見解:できる限り中立的なフォームを維持し、可能な限り遅くユーザー優先フォームとの間で変換します。 (そして、これはおそらくビューが変換が行われる場所であることを意味します)。

6
quickly_now

それは本当に完全にあなた次第です。

ディスプレイのディテールだと思います。フロントエンドをWebサービスに置き換える場合、まったく異なる方法でフロントエンドを「表示」する必要があります。したがって、私はそれを視野に入れました。個人的に。

10
pdr

可能な限りユーザーに近い日付型との間で変換する一般的なルール-これはすべての値、特に日付に当てはまります。

適切な日付型として保存されている日付は、文字列に移動するとすぐに、明確になる可能性があります(または、取得するのと同じくらい近づきます)。そのため、別の方法で実行する十分な理由がない限り(これは時々行われます)、UXで両方向に変換するか、可能な限り近づける必要があります。

これらが数値である場合、おそらく質問することもないでしょうが、それでも本質的には同じことです。

4
Murph

ビューアで日付の表示(ビュー)とエンコード(送信)を処理するのが好きです。すぐに目的のバックエンド日付形式に変換し、バックエンドでその形式を使用します。

1つの警告-私が開発したすべての「優れた」バックエンドシステムは他のシステムと統合されているため、バックエンドでもある程度の日付変換が必要です。私は通常、これらの追加のシステムが必要とするかどうか、または必要になるときにその問題を先送りし、上記の計画を堅持します。

2
Mike

日付形式を適用する場所はいくつか考えられます。どちらを使用しますか、そしてその理由は?

テキストの書式設定はビューに関連しているため、ビュー。

同様の関連する質問が日付を提出する場合にも当てはまります(ユーザー登録フォームなど)。日付変換はどこで行うべきですか?

適切なセッターメソッドを介したモデル。

0
ybakos