Django’da iş mantığı ve veri erişiminin ayrılması

| | | | | | | | | | | | | | | | | |

Django'da bir proje yazıyorum ve kodun %80'inin models.py dosyasında olduğunu görüyorum. Bu kod kafa karıştırıcı ve belirli bir süre sonra gerçekte ne olduğunu anlamayı bırakıyorum.

İşte beni rahatsız eden şey:

  1. Modelimi çirkin buluyorum. düzey (yalnızca bir veritabanındaki verilerle çalışmaktan sorumlu olması gereken) ayrıca e-posta gönderiyor, API üzerinde diğer hizmetlere yürüyor, vb.
  2. Ayrıca, iş mantığını yerleştirmeyi kabul edilemez buluyorum. görünüm, çünkü bu şekilde kontrol etmek zorlaşıyor. Örneğin, benim uygulamamda yeni Kullanıcı örnekleri oluşturmanın en az üç yolu vardır, ancak teknik olarak bunları tek tip olarak oluşturması gerekir.
  3. Yöntemlerin ve modellerimin özellikleri deterministik olmuyor ve yan etkiler ortaya çıktığında.

İşte basit bir örnek. İlk başta, User modeli şöyleydi:

class User(db.Models): def get_present_name(self): return self.name veya "Anonim" def activate(self): self.status = "aktif" self.save() 

Zamanla şuna dönüştü:

class User(db .Models): def get_present_name(self): # özelliği veritabanı açısından deterministik olmadı # veri api return remote_api.request_user_name(self.uid) veya "Anonim" tarafından başka bir servisten alındı def activate(self): # method artık bir yan etkisi var (kullanıcıya mesaj gönder) self.status = "etkinleştirildi" self.save() send_mail("Hesabınız etkinleştirildi!", "‚Ķ", [self.email]) 

İstediğim şey, kodumdaki varlıkları ayırmak:

  1. Veritabanımın varlıkları, kalıcılık düzeyi: Uygulamam hangi verileri tutuyor?
  2. Uygulamamın varlıkları, iş mantığı düzeyi: Uygulamam ne işe yarar?

Böyle bir uygulamayı uygulamak için iyi uygulamalar nelerdir? Django'da uygulanabilecek n yaklaşım?