0

私は他の人が書いたアプリケーションに取り組んでいます。サイトフレームワークを積極的に使用して、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はそれを使用することを「強く奨励」するのですか?

4

1 に答える 1

1

私はサイト フレームワークの経験があまりありませんが、すべてのサイトで同じ管理インターフェイスを使用したい場合には、ほとんど意味があると思います。そして、それはあなたが言及していない要件です。

最近、私はそれを使用することを検討しましたが、いくつかの初期コーディングの後、使用しないことにしました。物事は非常に急速に複雑になりました。どこにでもステートメントがあり、基本的に1つのサイトでのみ必要な追加フィールドである場合、許可の処理はトリッキーに見えました。

サイト フレームワークのユース ケースがあると確信していますが、疑わしい場合は、必要に応じてモデルをサブクラス化できる再利用可能なアプリを使用して別のプロジェクトを使用します。

于 2011-03-09T22:50:35.960 に答える