モデルにヘルパーメソッドを含めるタイミング(MVC)
-
05-07-2019 - |
質問
この質問をする最も簡単な方法は、私が直面している実際の現実の状況であると思います。
システムには、 site テーブルの行を表すSiteモデル(ここではクラシックMVCフレームワーク)があります。サイトモデルに格納される site テーブルのフィールドの1つは、サイトのタイムゾーンです。これを使用して、データベースのUTC日時を表示中のサイトのタイムゾーンに調整します。これを支援するヘルパーメソッドがいくつかあります:utcDatetimeToSiteTimestamp()、utcTimeStampToSiteDatetime()など。
これらのヘルパーメソッドは、サイトモデルに保持されているサイトのタイムゾーンを使用するため、これらのメソッドをモデルに含めることはできますか?または、別のヘルパークラスなどに配置する必要がありますか?
モデルはデータベースからのデータ行を保持するだけでなく、このデータに作用するヘルパーメソッドと、このデータを使用して外部入力に作用するヘルパーメソッドとの境界線はどこにあるべきかを知っていますか?
洞察力をありがとう!
解決
これはいくつかの判断の問題です。ヘルパーメソッドが一般的で、他のクラスで役立つ場合は、コードを再利用できるようにするため、ヘルパークラスを作成します。ヘルパーメソッドが問題のクラスに非常に固有である場合は、そのままにしておきます。
他のヒント
答えは責任の範囲にあります。モデルクラスは、そこにデータを追加する方法、その中のデータを変更する方法、データを削除する方法、および&内部状態を変更する方法。
変換については何もありません。コンバーターはクラスの外部に属します。したがって、フォーマットオブジェクト、またはモデルがクライアントにどのように表示されるかについて責任を負うものはすべて行います。
これらのメソッドは実際には1つのモデルに属さないため、ヘルパークラスを作成します。それらは静的メソッドであると思いますが、私の意見では、これは別のヘルパークラスのプロです。
私はヴィンセント・ラムダニーに同意しますが、それは判断の問題です。個人的には、モデルクラス内からヘルパー関数を定義するのは好きではありません-複雑すぎて、単にそこに属さないと思います(さらに、ヘルパー関数はほとんど使用されないことがよくあります)。ただし、モデル内からヘルパー関数を使用しないというわけではありません。たとえば、BlogPostモデルクラスがある場合、getOneCompiled()メソッドはヘルパー関数を使用して、テーブルの行を表す配列を返す前にいくつかのリンクを組み立てます。
オプションを確認し、どのコードがコードの読み取りと保守を容易にするかを確認することが重要です。ヘルパー関数を独自のファイルに書き込むには、事前の作業が必要になる場合がありますが、コードの管理が容易になる場合は、それだけの価値があります。