私は他の人が書いたアプリケーションに取り組んでいます。サイトフレームワークを積極的に使用して、2つの異なるゲームサイトにサービスを提供します。これらのサイトは、同じデータベース上の同じコードで実行されます。
class Entry(models.Model):
headline = models.CharField(max_length=100)
body = models.TextField()
created = models.DateTimeField()
creator = models.ForeignKey(User)
# Site1 fields
best = models.BooleanField()
is_editor_post = models.BooleanField()
site1_views = models.IntegerField()
cnt_comments = models.IntegerField()
last_edit = models.DateTimeField()
editor = models.ForeignKey(User)
tags = models.ManyToManyField(Tag)
# Site2 fields
category = models.ForeignKey(Category)
blog = models.ForeignKey(Blog)
site2_views = models.IntegerField()
class Game(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
genre = models.ForeignKey(Genre)
release_date = models.DateField()
platform = models.ForeignKey(Platform)
# Site1 fields
mark = models.IntegerField()
badges = models.ManyToManyField(Badge)
badges_updated = models.DateTimeField()
# Site2 fields
requirements = models.CharField(max_length=255)
status = models.IntegerField()
has_news = models.BooleanField()
has_articles = models.BooleanField()
has_screenshots = models.BooleanField()
class Meta:
permissions = (
('site1_add_game', 'Site1/Can add game'),
('site2_add_game', 'Site2/Can add game'),
)
ご覧のとおり、サイトの1つには役に立たないフィールドがたくさんあります。また、デフォルトの権限は使用しませんが、代わりに独自の権限を作成します。これは、ユーザーが2つのサイト間で共有し、1つの使用者が両方のサイトにゲームを追加する権利を持っているのに対し、別のユーザーはサイト2にしかゲームを追加できないためです。
ビュー、モデル、マネージャーのメソッドには、次のようなコードもたくさんあります。
def get_related_entries(self):
if settings.SITE_ID == 1:
# code for finding related entries on site1
elif settings.X_SITE_ID == 2:
# code for finding related entries on site2
return entries
したがって、site1コードで作業しているとき、site2のフィールドとコードは私を混乱させます。最初のサイトに機能を追加する場合、ほとんどの場合、別のサイトではそのような機能は必要ありません。また、私はおそらく3番目のサイトを作成する必要があり、彼らはこのサイトが同じコードとデータベースで実行されることを望んでいます。なんで?これにより、コードの再利用と異なるサイト間でのコンテンツの共有が可能になると彼らは考えているからです。これは本当に良さそうですし、サイト間で一般的なコードがたくさんあります。ただし、同じコードで実行するためのサイトのロジックとモデルの構造にも大きな違いがあります。
コードの保守は非常に難しく、見た目は醜く、単純ではありません。解決策は、一般的なアプリとサイト固有のアプリを分離することかもしれません。ただし、ほとんどすべてのアプリにはサイト固有のコードがあります。それぞれが独自のコードとモデルを持つ2つの異なるプロジェクトがあれば、はるかに簡単になると思います。
それで、サイトフレームワークはここに適していますか?いつ適切ですか?なぜDjangoはそれを使用することを「強く奨励」するのですか?