モデルロジックに属していないDjangoで、モデル関連の繰り返しコードを管理する適切な方法を探しています。Djang®にモデル関連の反復コードをどこに格納しますか?
ことに留意してください:
- 「コメント」は、他のプロジェクトで使用することができ、再利用可能なアプリ、
- 「コメント」の例、それは問題
の単なる実例だです例:
class Comments(models.model):
### model stuff ###
Threadeコメントのレンダリングは高価な操作なので、HTMLとしてキャッシュに保存したいと考えています。
我々が対処しなければならない反復コード:
def get_comments_html(target_object):
## check cache
## is there is no cached copy, then build HTML and store to the cache
私がコメントモデルのキャッシュロジックはコメント自体に関連していないと、他のどこに置かれるべきだと思います。
class ModelConsumer(object):
# here we can place repetitive code for all models (of just pass)
class CommentsConsumer(ModelConsumer):
model = Comments
def get_comments_html(self, target_object):
# check for cahce
comments = self.model.object.filter(target=target_object)
# render HTML and store to cache
:ALLような機能モデル消費者のクラスに
ストア:ここ
が、私はこの問題を解決するために見る3つのアプローチです:
つの方法は、問題を解決するために
このような論理をプレーン関数in comment_app/utils.py
- 問題ごとに独立したクラスを作成します(f.e. CommentCacheManagerなど)
モデルロジックに属していないモデル関連のコードを処理する最適なソリューションは何ですか?
この質問は、今後の製品制限につながることのないアーキテクチャ上の概念を見つけることに専念しています。
私はそれを理解し、目標はそれがレンダリングだから、HTMLをキャッシュすることです高いです。 Djangoのテンプレートキャッシュを使用しない理由はありますか?キャッシングロジックを複雑にしてテンプレートキャッシングを実現していますか? https://docs.djangoproject.com/en/1.10/topics/cache/#template-fragment-caching – Max
@Max、no。あなたは私を誤解しました。コメントは問題の図解に過ぎません。問題は、そのようなさまざまな問題のすべてを処理する最善の方法を見つけることにあります。モデルロジックに属さないモデル関連のコードがあるとき。 –