Kapan membuat aplikasi baru (dengan startapp) di Django?

102

Saya telah mencari-cari di Google untuk ini, tetapi saya masih menemui masalah yang berkaitan dengan apa yang Django definisikan sebagai "aplikasi".

Haruskah saya membuat aplikasi baru untuk setiap bagian fungsionalitas di situs, meskipun situs tersebut menggunakan model dari proyek utama?

Apakah kalian memiliki aturan praktis yang baik tentang kapan harus memisahkan aplikasi baru, dan kapan harus tetap menggunakan fungsionalitas dengan "proyek utama" atau aplikasi lain?

Håkan
sumber

Jawaban:

43

James Bennett memiliki seperangkat slide yang bagus tentang bagaimana mengatur aplikasi yang dapat digunakan kembali di Django.

Antti Rasinen
sumber
1
Apakah itu berarti, jika saya membuat model anak, model itu harus selalu ada di aplikasi yang sama? Karena saya tidak dapat dengan mudah memasukkannya ke dalam proyek lain tanpa membawa lebih dari dua "aplikasi"
Lionel
18

Saya lebih suka memikirkan aplikasi Django sebagai modul atau komponen yang dapat digunakan kembali daripada sebagai "aplikasi".

Ini membantu saya merangkum dan memisahkan fitur tertentu dari satu sama lain, meningkatkan kegunaan kembali jika saya memutuskan untuk membagikan "aplikasi" tertentu dengan komunitas pada umumnya, dan pemeliharaan.

Pendekatan umum saya adalah memasukkan fitur atau kumpulan fitur tertentu ke dalam "aplikasi" seolah-olah saya akan merilisnya secara publik. Bagian yang sulit di sini adalah mencari tahu seberapa besar setiap ember.

Trik bagus yang saya gunakan adalah membayangkan bagaimana aplikasi saya akan digunakan jika dirilis secara publik. Ini sering mendorong saya untuk mengecilkan ember dan lebih jelas mendefinisikan "tujuan" nya.

blaspam
sumber
16

Berikut adalah presentasi yang diperbarui pada 6 September 2008.

DjangoCon 2008: Aplikasi yang Dapat Digunakan Kembali @ 7: 53

Slide: Reusable_apps.pdf

Diambil dari slide

Haruskah ini menjadi aplikasinya sendiri?

  • Apakah itu sama sekali tidak terkait dengan fokus aplikasi?
  • Apakah ini ortogonal terhadap hal lain yang saya lakukan?
  • Apakah saya memerlukan fungsi serupa di situs lain?

Jika salah satu dari mereka adalah "Ya"? Kemudian yang terbaik adalah memecahnya menjadi aplikasi terpisah.

Yeo
sumber
Slide yang saya lihat tidak berisi pertanyaan pertama tentang "fokus aplikasi".
johnny
@johnny Itu ada di slide 31 dari 99.
Yeo
13

Saya cenderung membuat aplikasi baru untuk setiap rangkaian model yang terpisah secara logis. misalnya:

  • Profil pengguna
  • Posting Forum
  • Posting blog
pobk
sumber
6

Aturan yang saya ikuti adalah itu harus menjadi aplikasi baru jika saya ingin menggunakan kembali fungsionalitas dalam proyek yang berbeda.

Jika memerlukan pemahaman yang mendalam tentang model dalam proyek Anda, mungkin lebih kohesif untuk tetap menggunakan model.

Ryan
sumber
4

Dua jawaban terbaik untuk pertanyaan ini yang saya temukan di seluruh web adalah:

  1. The Reusable Apps Talk ( slide ) ( video ) juga disebutkan dalam jawaban lain. Bennett, penulis dan kontributor Django, secara teratur menerbitkan aplikasi untuk digunakan orang lain dan memiliki sudut pandang yang kuat terhadap banyak aplikasi kecil.
  2. Tip Doordash untuk Django pada Skala yang memberikan saran sebaliknya dan mengatakan dalam kasus mereka mereka bermigrasi ke satu aplikasi tunggal setelah memulai dengan banyak aplikasi terpisah. Mereka mengalami masalah dengan grafik ketergantungan migrasi antar aplikasi.

Kedua sumber setuju bahwa Anda harus membuat aplikasi terpisah dalam situasi berikut:

  • Jika Anda berencana untuk menggunakan kembali aplikasi Anda dalam proyek Django lain (terutama jika Anda berencana untuk menerbitkannya untuk digunakan kembali orang lain).
  • Jika aplikasi memiliki sedikit atau tidak ada ketergantungan antara itu dan aplikasi lain. Di sini Anda mungkin dapat membayangkan aplikasi berjalan sebagai layanan mikro sendiri di masa mendatang.
Jonathan Berger
sumber
1

Sebuah 'aplikasi' bisa menjadi banyak hal yang berbeda, semuanya tergantung selera. Misalnya, Anda sedang membangun blog. Aplikasi Anda dapat berupa keseluruhan blog, atau Anda dapat memiliki aplikasi 'admin', aplikasi 'situs' untuk semua tampilan publik, aplikasi 'rss', aplikasi 'layanan' sehingga pengembang dapat berinteraksi dengan blog di caranya sendiri, dll.

Saya pribadi akan menjadikan blog itu sendiri sebagai aplikasi, dan memecah fungsionalitas di dalamnya. Blog tersebut kemudian dapat digunakan kembali dengan lebih mudah di situs web lain.

Hal yang menyenangkan tentang Django adalah ia akan mengenali berkas models.py di dalam tingkat manapun dari pohon direktori Anda sebagai berkas yang berisi model Django. Jadi, memecah fungsionalitas Anda menjadi 'sub-aplikasi' yang lebih kecil di dalam 'aplikasi' itu sendiri tidak akan mempersulit apa pun.

willurd
sumber